mirror of
https://git.linux-kernel.at/oliver/ivatar.git
synced 2025-11-17 21:48:02 +00:00
Merge branch 'master' of https://git.linux-kernel.at/nipos/ivatar into devel
This commit is contained in:
78
INSTALL.md
78
INSTALL.md
@@ -1 +1,77 @@
|
|||||||
TODO
|
# Installation
|
||||||
|
|
||||||
|
## Prequisits
|
||||||
|
|
||||||
|
Python 3.x + virtualenv
|
||||||
|
|
||||||
|
### CentOS/RHEL 7.x (with EPEL enabled!)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yum install python34-virtualenv.noarch
|
||||||
|
```
|
||||||
|
|
||||||
|
## Checkout
|
||||||
|
|
||||||
|
~~~~bash
|
||||||
|
git clone https://git.linux-kernel.at/oliver/ivatar.git
|
||||||
|
cd ivatar
|
||||||
|
~~~~
|
||||||
|
|
||||||
|
## Virtual environment
|
||||||
|
|
||||||
|
~~~~bash
|
||||||
|
virtualenv -p python3 .virtualenv
|
||||||
|
source .virtualenv/bin/activate
|
||||||
|
pip install -r requirements.txt
|
||||||
|
~~~~
|
||||||
|
|
||||||
|
## (SQL) Migrations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./manage.py migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
## Collect static files
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./manage.py collectstatic -l --no-input
|
||||||
|
```
|
||||||
|
|
||||||
|
## Run local (development) server
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./manage.py runserver 0:8080 # or any other free port
|
||||||
|
```
|
||||||
|
|
||||||
|
## Create superuser (optional)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./manage.py createsuperuser # Follow the instructions
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running the testsuite
|
||||||
|
```
|
||||||
|
./manage.py test -v3 # Or any other verbosity level you like
|
||||||
|
```
|
||||||
|
|
||||||
|
# Production deployment Webserver (non-cloudy)
|
||||||
|
|
||||||
|
To deploy this Django application with WSGI on Apache, NGINX or any other web server, please refer to the the webserver documentation; There are also plenty of howtos on the net (I'll not LMGTFY...)
|
||||||
|
|
||||||
|
# Production deloyment (cloudy)
|
||||||
|
|
||||||
|
## Red Hat OpenShift (Online)
|
||||||
|
|
||||||
|
There is already a file called create.sh, which can be reused to create an OpenShift online instance of ivatar. However, you need to have the correct environment variables set, as well as a working oc installation.
|
||||||
|
|
||||||
|
## Amazon AWS
|
||||||
|
|
||||||
|
Pretty sure this work as well; As OpenShift (Online).
|
||||||
|
|
||||||
|
I once wrote an Django (1.x) application in 2016, that used AWS. It can be found here:
|
||||||
|
[Gewusel from ofalk @ GitHub](https://github.com/ofalk/gewusel)
|
||||||
|
There is a file called ebcreate.txt as well as a directory called .ebextensions, which you need to check out in order to get an idea of how to deploy the application on AWS.
|
||||||
|
|
||||||
|
## Database
|
||||||
|
|
||||||
|
It should work with SQLite (do *not* use in production!), MySQL/MariaDB, as well as PostgreSQL.
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ DEFAULT_FROM_EMAIL = 'ivatar@mg.linux-kernel.at'
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
from ivatar.settings import DATABASES
|
from ivatar.settings import DATABASES
|
||||||
except Exception: # pragma: no cover
|
except ImportError: # pragma: no cover
|
||||||
DATABASES = [] # pragma: no cover
|
DATABASES = [] # pragma: no cover
|
||||||
|
|
||||||
if 'default' not in DATABASES:
|
if 'default' not in DATABASES:
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from ivatar.settings import IVATAR_VERSION, SITE_NAME, MAX_PHOTO_SIZE
|
|||||||
from ivatar.settings import BASE_URL, SECURE_BASE_URL
|
from ivatar.settings import BASE_URL, SECURE_BASE_URL
|
||||||
from ivatar.settings import MAX_NUM_UNCONFIRMED_EMAILS
|
from ivatar.settings import MAX_NUM_UNCONFIRMED_EMAILS
|
||||||
|
|
||||||
|
|
||||||
def basepage(request):
|
def basepage(request):
|
||||||
'''
|
'''
|
||||||
Our contextprocessor adds additional context variables
|
Our contextprocessor adds additional context variables
|
||||||
|
|||||||
@@ -2,26 +2,19 @@
|
|||||||
Classes for our ivatar.ivataraccount.forms
|
Classes for our ivatar.ivataraccount.forms
|
||||||
'''
|
'''
|
||||||
from urllib.parse import urlsplit, urlunsplit
|
from urllib.parse import urlsplit, urlunsplit
|
||||||
from io import BytesIO
|
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.urls import reverse
|
|
||||||
from django.template.loader import render_to_string
|
|
||||||
from django.core.mail import send_mail
|
|
||||||
from django.contrib import messages
|
|
||||||
|
|
||||||
from ipware import get_client_ip
|
from ipware import get_client_ip
|
||||||
|
|
||||||
from ivatar import settings
|
from ivatar import settings
|
||||||
from ivatar.settings import MIN_LENGTH_EMAIL, MAX_LENGTH_EMAIL
|
from ivatar.settings import MIN_LENGTH_EMAIL, MAX_LENGTH_EMAIL
|
||||||
from ivatar.settings import MIN_LENGTH_URL, MAX_LENGTH_URL
|
from ivatar.settings import MIN_LENGTH_URL, MAX_LENGTH_URL
|
||||||
from ivatar.settings import JPEG_QUALITY
|
|
||||||
from . models import UnconfirmedEmail, ConfirmedEmail, Photo
|
from . models import UnconfirmedEmail, ConfirmedEmail, Photo
|
||||||
from . models import UnconfirmedOpenId, ConfirmedOpenId
|
from . models import UnconfirmedOpenId, ConfirmedOpenId
|
||||||
from . models import UserPreference
|
from . models import UserPreference
|
||||||
from . models import pil_format, file_format
|
|
||||||
from . read_libravatar_export import read_gzdata as libravatar_read_gzdata
|
|
||||||
|
|
||||||
MAX_NUM_UNCONFIRMED_EMAILS_DEFAULT = 5
|
MAX_NUM_UNCONFIRMED_EMAILS_DEFAULT = 5
|
||||||
|
|
||||||
|
|||||||
@@ -24,21 +24,21 @@ def get_photo(email):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
urlopen(image_url, timeout=URL_TIMEOUT)
|
urlopen(image_url, timeout=URL_TIMEOUT)
|
||||||
except HTTPError as e: # pylint: disable=invalid-name
|
except HTTPError as exc:
|
||||||
if e.code != 404 and e.code != 503:
|
if exc.code != 404 and exc.code != 503:
|
||||||
print( # pragma: no cover
|
print( # pragma: no cover
|
||||||
'Gravatar fetch failed with an unexpected %s HTTP error' %
|
'Gravatar fetch failed with an unexpected %s HTTP error' %
|
||||||
e.code)
|
exc.code)
|
||||||
return False
|
return False
|
||||||
except URLError as e: # pragma: no cover # pylint: disable=invalid-name
|
except URLError as exc: # pragma: no cover
|
||||||
print(
|
print(
|
||||||
'Gravatar fetch failed with URL error: %s' %
|
'Gravatar fetch failed with URL error: %s' %
|
||||||
e.reason) # pragma: no cover
|
exc.reason) # pragma: no cover
|
||||||
return False # pragma: no cover
|
return False # pragma: no cover
|
||||||
except SSLError as e: # pragma: no cover # pylint: disable=invalid-name
|
except SSLError as exc: # pragma: no cover
|
||||||
print(
|
print(
|
||||||
'Gravatar fetch failed with SSL error: %s' %
|
'Gravatar fetch failed with SSL error: %s' %
|
||||||
e.reason) # pragma: no cover
|
exc.reason) # pragma: no cover
|
||||||
return False # pragma: no cover
|
return False # pragma: no cover
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -141,15 +141,15 @@ class Photo(BaseAccountModel):
|
|||||||
try:
|
try:
|
||||||
image = urlopen(image_url)
|
image = urlopen(image_url)
|
||||||
# No idea how to test this
|
# No idea how to test this
|
||||||
# pragma: no cover # pylint: disable=invalid-name
|
# pragma: no cover
|
||||||
except HTTPError as e:
|
except HTTPError as exc:
|
||||||
print('%s import failed with an HTTP error: %s' %
|
print('%s import failed with an HTTP error: %s' %
|
||||||
(service_name, e.code))
|
(service_name, exc.code))
|
||||||
return False
|
return False
|
||||||
# No idea how to test this
|
# No idea how to test this
|
||||||
# pragma: no cover
|
# pragma: no cover
|
||||||
except URLError as e: # pylint: disable=invalid-name
|
except URLError as exc:
|
||||||
print('%s import failed: %s' % (service_name, e.reason))
|
print('%s import failed: %s' % (service_name, exc.reason))
|
||||||
return False
|
return False
|
||||||
data = image.read()
|
data = image.read()
|
||||||
|
|
||||||
@@ -176,9 +176,9 @@ class Photo(BaseAccountModel):
|
|||||||
try:
|
try:
|
||||||
img = Image.open(BytesIO(self.data))
|
img = Image.open(BytesIO(self.data))
|
||||||
# Testing? Ideas anyone?
|
# Testing? Ideas anyone?
|
||||||
except Exception as e: # pylint: disable=invalid-name,broad-except
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
# For debugging only
|
# For debugging only
|
||||||
print('Exception caught: %s' % e)
|
print('Exception caught: %s' % exc)
|
||||||
return False
|
return False
|
||||||
self.format = file_format(img.format)
|
self.format = file_format(img.format)
|
||||||
if not self.format:
|
if not self.format:
|
||||||
@@ -201,7 +201,7 @@ class Photo(BaseAccountModel):
|
|||||||
addr.save()
|
addr.save()
|
||||||
|
|
||||||
if email:
|
if email:
|
||||||
# Explicitely asked
|
# Explicitly asked
|
||||||
email.photo = self
|
email.photo = self
|
||||||
email.save()
|
email.save()
|
||||||
|
|
||||||
@@ -227,11 +227,10 @@ class Photo(BaseAccountModel):
|
|||||||
dimensions['w'], dimensions['h'] = dimensions['a'], dimensions['b']
|
dimensions['w'], dimensions['h'] = dimensions['a'], dimensions['b']
|
||||||
min_from_w_h = min(dimensions['w'], dimensions['h'])
|
min_from_w_h = min(dimensions['w'], dimensions['h'])
|
||||||
dimensions['w'], dimensions['h'] = min_from_w_h, min_from_w_h
|
dimensions['w'], dimensions['h'] = min_from_w_h, min_from_w_h
|
||||||
elif dimensions['w'] < 0 or (
|
elif ((dimensions['w'] < 0)
|
||||||
dimensions['x'] + dimensions['w']
|
or ((dimensions['x'] + dimensions['w']) > dimensions['a'])
|
||||||
) > dimensions['a'] or dimensions['h'] < 0 or (
|
or (dimensions['h'] < 0)
|
||||||
dimensions['y'] + dimensions['h']
|
or ((dimensions['y'] + dimensions['h']) > dimensions['b'])):
|
||||||
) > dimensions['b']:
|
|
||||||
messages.error(
|
messages.error(
|
||||||
request,
|
request,
|
||||||
_('Crop outside of original image bounding box'))
|
_('Crop outside of original image bounding box'))
|
||||||
@@ -538,8 +537,7 @@ class DjangoOpenIDStore(OpenIDStore):
|
|||||||
try:
|
try:
|
||||||
# pylint: disable=no-member
|
# pylint: disable=no-member
|
||||||
expires = association.getExpiresIn()
|
expires = association.getExpiresIn()
|
||||||
# pylint: disable=invalid-name,broad-except,unused-variable
|
except AttributeError:
|
||||||
except Exception as e:
|
|
||||||
expires = association.expiresIn
|
expires = association.expiresIn
|
||||||
if expires == 0:
|
if expires == 0:
|
||||||
self.removeAssociation(server_url, assoc.handle)
|
self.removeAssociation(server_url, assoc.handle)
|
||||||
|
|||||||
@@ -2,14 +2,17 @@
|
|||||||
Reading libravatar export
|
Reading libravatar export
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
import binascii
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import gzip
|
import gzip
|
||||||
import xml.etree.ElementTree
|
import xml.etree.ElementTree
|
||||||
import base64
|
import base64
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
|
|
||||||
SCHEMAROOT = 'https://www.libravatar.org/schemas/export/0.2'
|
SCHEMAROOT = 'https://www.libravatar.org/schemas/export/0.2'
|
||||||
|
|
||||||
|
|
||||||
def read_gzdata(gzdata=None):
|
def read_gzdata(gzdata=None):
|
||||||
'''
|
'''
|
||||||
Read gzipped data file
|
Read gzipped data file
|
||||||
@@ -44,22 +47,23 @@ def read_gzdata(gzdata=None):
|
|||||||
if photo.tag == '{%s}photo' % SCHEMAROOT:
|
if photo.tag == '{%s}photo' % SCHEMAROOT:
|
||||||
try:
|
try:
|
||||||
data = base64.decodebytes(bytes(photo.text, 'utf-8'))
|
data = base64.decodebytes(bytes(photo.text, 'utf-8'))
|
||||||
except Exception as e: # pylint: disable=broad-except,invalid-name
|
except binascii.Error as exc:
|
||||||
print('Cannot decode photo; Encoding: %s, Format: %s: %s' % (
|
print('Cannot decode photo; Encoding: %s, Format: %s: %s' % (
|
||||||
photo.attrib['encoding'], photo.attrib['format'], e))
|
photo.attrib['encoding'], photo.attrib['format'], exc))
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
Image.open(BytesIO(data))
|
Image.open(BytesIO(data))
|
||||||
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
|
print('Cannot decode photo; Encoding: %s, Format: %s: %s' % (
|
||||||
|
photo.attrib['encoding'], photo.attrib['format'], exc))
|
||||||
|
continue
|
||||||
|
else:
|
||||||
# If it is a working image, we can use it
|
# If it is a working image, we can use it
|
||||||
photo.text.replace('\n', '')
|
photo.text.replace('\n', '')
|
||||||
photos.append({
|
photos.append({
|
||||||
'data': photo.text,
|
'data': photo.text,
|
||||||
'format': photo.attrib['format'],
|
'format': photo.attrib['format'],
|
||||||
})
|
})
|
||||||
except Exception as e: # pylint: disable=broad-except,invalid-name
|
|
||||||
print('Cannot decode photo; Encoding: %s, Format: %s: %s' % (
|
|
||||||
photo.attrib['encoding'], photo.attrib['format'], e))
|
|
||||||
continue
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'emails': emails,
|
'emails': emails,
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
|
|
||||||
{% if not user.is_anonymous %}
|
{% if not user.is_anonymous %}
|
||||||
{% if photos %}
|
{% if photos %}
|
||||||
<p>{% trans 'Would you like to import some of these externally hosted photos?' %}</p>
|
<h3>{% trans 'Would you like to import some of these externally hosted photos?' %}</h3>
|
||||||
{% if email_id %}
|
{% if email_id %}
|
||||||
<form action="{% url 'import_photo' email_id %}" method="post">{% csrf_token %}
|
<form action="{% url 'import_photo' email_id %}" method="post">{% csrf_token %}
|
||||||
<input type="hidden" name="email_id" value="{{ email_id }}">
|
<input type="hidden" name="email_id" value="{{ email_id }}">
|
||||||
@@ -11,26 +10,29 @@
|
|||||||
<form action="{% url 'import_photo' %}" method="post">{% csrf_token %}
|
<form action="{% url 'import_photo' %}" method="post">{% csrf_token %}
|
||||||
<input type="hidden" name="email_addr" value="{{ email_addr }}">
|
<input type="hidden" name="email_addr" value="{{ email_addr }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<ul class="horizontal-list imported-list centered">
|
<div class="row">
|
||||||
{% for photo in photos %}
|
{% for photo in photos %}
|
||||||
<li><input type="checkbox" name="photo_{{photo.service_name}}" id="photo_{{photo.service_name}}" checked="checked">
|
<div class="panel panel-tortin" style="width:182px;float:left;margin-left:20px">
|
||||||
<br/>
|
<div class="panel-heading">
|
||||||
<label for="photo_{{photo.service_name}}">
|
<h3 class="panel-title">
|
||||||
<img src="{{ photo.thumbnail_url }}" class="thumbnail" alt="{{ photo.service_name }} image">
|
<input type="checkbox" name="photo_{{photo.service_name}}" id="photo_{{photo.service_name}}" checked="checked">
|
||||||
</label>
|
<label for="photo_{{photo.service_name}}" style="width:100%">
|
||||||
<br/>
|
{{ photo.service_name }}
|
||||||
{% if photo.service_url %}
|
{% if photo.service_url %}
|
||||||
<a href="{{ photo.service_url }}">{{ photo.service_name }}</a>
|
<a href="{{ photo.service_url }}" style="float:right;color:#FFFFFF"><i class="fa fa-external-link"></i></a>
|
||||||
{% else %} {# pragma: no cover #}
|
{% endif %}
|
||||||
{{ photo.service_name }} {# pragma: no cover #}
|
</label>
|
||||||
{% endif %} {# pragma: no cover #}
|
</h3></div>
|
||||||
</li>
|
<div class="panel-body">
|
||||||
|
<center>
|
||||||
|
<img src="{{ photo.thumbnail_url }}" alt="{{ photo.service_name }} image">
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
{% buttons %}
|
<button type="submit" class="btn btn-default">{% trans 'Import' %}</button>
|
||||||
<button type="submit" class="btn btn-primary">{% trans 'Import' %}</button>
|
|
||||||
{% endbuttons %}
|
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -5,26 +5,29 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
{% if form.errors %}
|
|
||||||
{% for error in form.non_field_errors %}
|
|
||||||
<div class="alert alert-danger">
|
|
||||||
<strong>{{ error|escape }}</strong>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<h1>{% trans 'Add a new email address' %}</h1>
|
<h1>{% trans 'Add a new email address' %}</h1>
|
||||||
|
|
||||||
<p>{% blocktrans %}Otherwise, type your email address in the box below and we will send you an email with a link to click on in order to verify that you own that email address.{% endblocktrans %}</p>
|
<p>{% blocktrans %}Otherwise, type your email address in the box below and we will send you an email with a link to click on in order to verify that you own that email address.{% endblocktrans %}</p>
|
||||||
|
|
||||||
<form action="{% url 'add_email' %}" name="addemail" method="post" id="form-addemail">{% csrf_token %}
|
{% if form.errors %}
|
||||||
|
{% for error in form.non_field_errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">{{ error|escape }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% if form.email.errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">{{ form.email.errors }}</div>
|
||||||
|
{% endif %}
|
||||||
|
<div style="max-width:600px">
|
||||||
|
<form action="{% url 'add_email' %}" name="addemail" method="post" id="form-addemail">
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
{{ form.email.errors }}
|
<div class="form-group">
|
||||||
<p class="aligned wide">{{ form.email.label_tag }} {{ form.email }}</p>
|
<label for="id_email">{% trans 'Email' %}:</label>
|
||||||
|
<input type="text" name="email" autofocus required class="form-control" id="id_email">
|
||||||
<p><input type="submit" value="{% trans 'Add' %}" />
|
</div>
|
||||||
<a href="{% url 'profile' %}">{% trans 'Cancel' %}</a></p>
|
<button type="submit" class="btn btn-default">{% trans 'Add' %}</button>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -7,18 +7,22 @@
|
|||||||
|
|
||||||
<h1>{% trans 'Add a new OpenID' %}</h1>
|
<h1>{% trans 'Add a new OpenID' %}</h1>
|
||||||
|
|
||||||
<p>{% trans 'Once you have confirmed this OpenID URL, you will be able to log into your account using that OpenID URL.' %}</p>
|
<p>{% trans 'Once you have confirmed this OpenID URL, you will be able to log into your account using that OpenID URL.' %}<br/>
|
||||||
|
{% trans 'You will be redirected to the authorisation page for the provider. If the process fails, you can remove the ID from this list and try adding it again.' %}</p>
|
||||||
|
{% if form.openid.errors %}
|
||||||
|
<div class="alert alert-danger" role="alert">{{ form.openid.errors }}</div>
|
||||||
|
{% endif %}
|
||||||
|
<div style="max-width:600px">
|
||||||
|
<form action="{% url 'add_openid' %}" name="addopenid" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
<form action="{% url 'add_openid' %}" name="addopenid" method="post">{% csrf_token %}
|
<div class="form-group">
|
||||||
|
<label for="id_openid">{% trans 'OpenID' %}:</label>
|
||||||
{{form.openid.errors}}
|
<input type="url" name="openid" value="https://" maxlength="255" minlength="11" required id="id_openid" autofocus class="form-control">
|
||||||
<p class="aligned wide">{{form.openid.label_tag}} {{form.openid}}</p>
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default">{% trans 'Add' %}</button>
|
||||||
<p class="hint">{% trans 'You will be redirected to the authorisation page for the provider. If the process fails, you can remove the ID from this list and try adding it again.' %}</p>
|
|
||||||
|
|
||||||
<p><input type="submit" value="{% trans 'Add' %}" />
|
|
||||||
<a href="{% url 'profile' %}">{% trans 'Cancel' %}</a></p>
|
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -4,46 +4,65 @@
|
|||||||
{% block title %}{% blocktrans with email.email as email_address %}Choose a photo for {{ email_address }}{% endblocktrans %}{% endblock title %}
|
{% block title %}{% blocktrans with email.email as email_address %}Choose a photo for {{ email_address }}{% endblocktrans %}{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
.nobutton {
|
||||||
|
background: none;
|
||||||
|
color: inherit;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
font: inherit;
|
||||||
|
cursor: pointer;
|
||||||
|
outline: inherit;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<h1>{% blocktrans with email.email as email_address %}Choose a photo for {{ email_address }}{% endblocktrans %}</h1>
|
<h1>{% blocktrans with email.email as email_address %}Choose a photo for {{ email_address }}{% endblocktrans %}</h1>
|
||||||
|
|
||||||
{% if not user.photo_set.count %}
|
{% if not user.photo_set.count %}
|
||||||
|
|
||||||
{% url 'upload_photo' as upload_url %}
|
{% url 'upload_photo' as upload_url %}
|
||||||
<p>{% blocktrans %}You need to <a href="{{ upload_url }}">upload some photos</a> first!{% endblocktrans %}</p>
|
<h4>{% blocktrans %}You need to <a href="{{ upload_url }}">upload some photos</a> first!{% endblocktrans %}</h4>
|
||||||
|
|
||||||
<p><a href="{% url 'profile' %}">{% trans 'Back to your profile' %}</a></p>
|
<p><a href="{% url 'profile' %}" class="btn btn-default">{% trans 'Back to your profile' %}</a></p>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
<p>{% trans 'Here are the pictures you have uploaded, click on the one you wish to associate with this email address:' %}</p>
|
<p>{% trans 'Here are the pictures you have uploaded, click on the one you wish to associate with this email address:' %}</p>
|
||||||
<ul class="horizontal-list avatar-list centered">
|
<div class="row">
|
||||||
{% for photo in user.photo_set.all %}
|
{% for photo in user.photo_set.all %}
|
||||||
<li>
|
<form action="{% url 'assign_photo_email' view.kwargs.email_id %}" method="post" style="float:left;margin-left:20px">{% csrf_token %}
|
||||||
<form action="{% url 'assign_photo_email' view.kwargs.email_id %}" method="post">{% csrf_token %}
|
|
||||||
<input type="hidden" name="photo_id" value="{{ photo.id }}">
|
<input type="hidden" name="photo_id" value="{{ photo.id }}">
|
||||||
<input type="image" name="photo{{ photo.id }}" src="{% url 'raw_image' photo.id %}" class="thumbnail">
|
<button type="submit" name="photo{{ photo.id }}" class="nobutton">
|
||||||
{% ifequal email.photo.id photo.id %}
|
<div class="panel panel-tortin" style="width:132px;margin:0">
|
||||||
<br>{% trans '(current)' %}
|
<div class="panel-heading">
|
||||||
{% endifequal %}
|
<h3 class="panel-title">{% ifequal email.photo.id photo.id %}<i class="fa fa-check"></i>{% endifequal %} {% trans 'Image' %} {{ forloop.counter }}</h3>
|
||||||
</form></li>
|
</div>
|
||||||
|
<div class="panel-body" style="height:130px">
|
||||||
|
<center>
|
||||||
|
<img style="max-height:100px;max-width:100px" src="{% url 'raw_image' photo.id %}">
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<li>
|
<form action="{% url 'assign_photo_email' view.kwargs.email_id %}" method="post" style="float:left;margin-left:20px">{% csrf_token %}
|
||||||
<form action="{% url 'assign_photo_email' view.kwargs.email_id %}" method="post">{% csrf_token %}
|
<button type="submit" name="photoNone" class="nobutton">
|
||||||
<input type="submit" name="photoNone" value="{% trans 'None' %}">
|
<div class="panel panel-tortin" style="width:132px;margin:0">
|
||||||
{% ifequal email.photo.id photo.id %}
|
<div class="panel-heading">
|
||||||
<br>{% trans '(current)' %}
|
<h3 class="panel-title">{% ifequal email.photo.id photo.id %}<i class="fa fa-check"></i>{% endifequal %} {% trans 'No image' %}</h3>
|
||||||
{% endifequal %}
|
</div>
|
||||||
</form></li>
|
<div class="panel-body" style="height:130px">
|
||||||
</ul>
|
<center>
|
||||||
|
<img style="max-height:100px;max-width:100px" src="/static/img/nobody/100.png">
|
||||||
<p>
|
</center>
|
||||||
<br/>
|
</div>
|
||||||
<a href="{% url 'upload_photo' %}">{% blocktrans %}Upload a new one{% endblocktrans %}</a>
|
</div>
|
||||||
<br/>
|
</button>
|
||||||
<a href="{% url 'import_photo' email.pk %}">{% blocktrans %}Import from other services{% endblocktrans %}</a>
|
</form>
|
||||||
</p>
|
</div>
|
||||||
|
<div style="height:8px"></div>
|
||||||
|
<a href="{% url 'upload_photo' %}" class="btn btn-default">{% blocktrans %}Upload a new one{% endblocktrans %}</a>
|
||||||
|
<a href="{% url 'import_photo' email.pk %}" class="btn btn-default">{% blocktrans %}Import from other services{% endblocktrans %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -4,41 +4,65 @@
|
|||||||
{% block title %}{% blocktrans with openid.openid as openid_address %}Choose a photo for {{ openid_address }}{% endblocktrans %}{% endblock title %}
|
{% block title %}{% blocktrans with openid.openid as openid_address %}Choose a photo for {{ openid_address }}{% endblocktrans %}{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
.nobutton {
|
||||||
|
background: none;
|
||||||
|
color: inherit;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
font: inherit;
|
||||||
|
cursor: pointer;
|
||||||
|
outline: inherit;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<h1>{% blocktrans with openid.openid as openid_address %}Choose a photo for {{ openid_address }}{% endblocktrans %}</h1>
|
<h1>{% blocktrans with openid.openid as openid_address %}Choose a photo for {{ openid_address }}{% endblocktrans %}</h1>
|
||||||
|
|
||||||
{% if not user.photo_set.count %}
|
{% if not user.photo_set.count %}
|
||||||
|
|
||||||
{% url 'upload_photo' as upload_url %}
|
{% url 'upload_photo' as upload_url %}
|
||||||
<p>{% blocktrans %}You need to <a href="{{ upload_url }}">upload some photos</a> first!{% endblocktrans %}</p>
|
<h3>{% blocktrans %}You need to <a href="{{ upload_url }}">upload some photos</a> first!{% endblocktrans %}</h3>
|
||||||
|
|
||||||
<p><a href="{% url 'profile' %}">{% trans 'Back to your profile' %}</a></p>
|
<p><a href="{% url 'profile' %}" class="btn btn-default">{% trans 'Back to your profile' %}</a></p>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
<p>{% trans 'Here are the pictures you have uploaded, click on the one you wish to associate with this openid address:' %}</p>
|
<p>{% trans 'Here are the pictures you have uploaded, click on the one you wish to associate with this openid address:' %}</p>
|
||||||
<ul class="horizontal-list avatar-list centered">
|
<div class="row">
|
||||||
{% for photo in user.photo_set.all %}
|
{% for photo in user.photo_set.all %}
|
||||||
<li>
|
<form action="{% url 'assign_photo_openid' view.kwargs.openid_id %}" method="post" style="float:left;margin-left:20px">{% csrf_token %}
|
||||||
<form action="{% url 'assign_photo_openid' view.kwargs.openid_id %}" method="post">{% csrf_token %}
|
|
||||||
<input type="hidden" name="photo_id" value="{{ photo.id }}">
|
<input type="hidden" name="photo_id" value="{{ photo.id }}">
|
||||||
<input type="image" name="photo{{ photo.id }}" src="{% url 'raw_image' photo.id %}" class="thumbnail">
|
<button type="submit" name="photo{{ photo.id }}" class="nobutton">
|
||||||
{% ifequal openid.photo.id photo.id %}
|
<div class="panel panel-tortin" style="width:132px;margin:0">
|
||||||
<br>{% trans '(current)' %}
|
<div class="panel-heading">
|
||||||
{% endifequal %}
|
<h3 class="panel-title">{% ifequal openid.photo.id photo.id %}<i class="fa fa-check"></i>{% endifequal %} {% trans 'Image' %} {{ forloop.counter }}</h3>
|
||||||
</form></li>
|
</div>
|
||||||
|
<div class="panel-body" style="height:130px">
|
||||||
|
<center>
|
||||||
|
<img style="max-height:100px;max-width:100px" src="{% url 'raw_image' photo.id %}">
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<li>
|
<form action="{% url 'assign_photo_openid' view.kwargs.openid_id %}" method="post" style="float:left;margin-left:20px">{% csrf_token %}
|
||||||
<form action="{% url 'assign_photo_openid' view.kwargs.openid_id %}" method="post">{% csrf_token %}
|
<button type="submit" name="photoNone" class="nobutton">
|
||||||
<input type="submit" name="photoNone" value="{% trans 'None' %}">
|
<div class="panel panel-tortin" style="width:132px;margin:0">
|
||||||
{% ifequal openid.photo.id photo.id %}
|
<div class="panel-heading">
|
||||||
<br>{% trans '(current)' %}
|
<h3 class="panel-title">{% ifequal openid.photo.id photo.id %}<i class="fa fa-check"></i>{% endifequal %} {% trans 'No image' %}</h3>
|
||||||
{% endifequal %}
|
</div>
|
||||||
</form></li>
|
<div class="panel-body" style="height:130px">
|
||||||
</ul>
|
<center>
|
||||||
|
<img style="max-height:100px;max-width:100px" src="/static/img/nobody/100.png">
|
||||||
<p><a href="{% url 'upload_photo' %}">{% blocktrans %}upload a new one{% endblocktrans %}</a></p>
|
</center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div style="height:8px"></div>
|
||||||
|
<a href="{% url 'upload_photo' %}" class="btn btn-default">{% blocktrans %}upload a new one{% endblocktrans %}</a>
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -1,40 +1,67 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
|
|
||||||
{% block title %}{% trans 'Choose items to be uploaded' %}{% endblock title %}
|
{% block title %}{% trans 'Choose items to be uploaded' %}{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
input[type=checkbox] {display:none}
|
||||||
|
input[type=checkbox].text + label {
|
||||||
|
padding-left:0;
|
||||||
|
font-weight:normal;
|
||||||
|
}
|
||||||
|
input[type=checkbox].text + label:before {
|
||||||
|
font-family: FontAwesome;
|
||||||
|
display: inline-block;
|
||||||
|
letter-spacing:5px;
|
||||||
|
font-size:20px;
|
||||||
|
color:#36b7d7;
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
input[type=checkbox].text + label:before {content: "\f0c8"}
|
||||||
|
input[type=checkbox].text:checked + label:before {content: "\f14a"}
|
||||||
|
input[type=checkbox].image + label:before {
|
||||||
|
font-family: FontAwesome;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
input[type=checkbox].image + label:before {content: "\f096"}
|
||||||
|
input[type=checkbox].image + label:before {letter-spacing: 5px}
|
||||||
|
input[type=checkbox].image:checked + label:before {content: "\f046"}
|
||||||
|
input[type=checkbox].image:checked + label:before {letter-spacing: 3px}
|
||||||
|
</style>
|
||||||
<h1>{% trans 'Choose items to be imported' %}</h1>
|
<h1>{% trans 'Choose items to be imported' %}</h1>
|
||||||
|
|
||||||
<div style="max-width:600px;">
|
|
||||||
<form method="post" action="{% url 'upload_export' 'save' %}">{% csrf_token %}
|
<form method="post" action="{% url 'upload_export' 'save' %}">{% csrf_token %}
|
||||||
{% if emails %}
|
{% if emails %}
|
||||||
<p>
|
<h4>{% trans 'Email addresses we found in the export - existing ones will not be re-added' %}</h4>
|
||||||
{% trans 'Email addresses we found in the export - existing ones will not be re-added' %}:
|
|
||||||
</p>
|
|
||||||
{% for email in emails %}
|
{% for email in emails %}
|
||||||
<input type="checkbox" checked name="email_{{ forloop.counter }}" value="{{ email }}"> {{ email }}</input><br/>
|
<input type="checkbox" checked name="email_{{ forloop.counter }}" id="email_{{ forloop.counter }}" value="{{ email }}" class="text"><label for="email_{{ forloop.counter }}">{{ email }}</label><br/>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p/>
|
|
||||||
{% if photos %}
|
{% if photos %}
|
||||||
<p>
|
<h4>{% trans 'Photos we found in the export' %}</h4>
|
||||||
{% trans 'Photos we found in the export' %}:
|
<div class="row">
|
||||||
</p>
|
|
||||||
{% for photo in photos %}
|
{% for photo in photos %}
|
||||||
<input type="checkbox" checked name="photo_{{ forloop.counter }}" value="{{ photo.data }}">
|
<div class="panel panel-tortin" style="width:132px;float:left;margin-left:20px">
|
||||||
<img style="max-width: 80px; max-height: 80px;" src="data:image/{{ photo.format }};base64,{{ photo.data }}"/>
|
<div class="panel-heading">
|
||||||
</input>
|
<h3 class="panel-title">
|
||||||
<br/>
|
<input type="checkbox" checked name="photo_{{ forloop.counter }}" id="photo_{{ forloop.counter }}" value="{{ photo.data }}" class="image">
|
||||||
|
<label for="photo_{{ forloop.counter }}">{% trans 'Image' %} {{ forloop.counter }}</label>
|
||||||
|
</label>
|
||||||
|
</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<center>
|
||||||
|
<img style="max-height:100px;max-width:100px" src="data:image/{{ photo.format }};base64,{{ photo.data }}">
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<br/>
|
<p>
|
||||||
{% buttons %}
|
<button type="submit" class="btn btn-default">{% trans 'Upload' %}</button>
|
||||||
<button type="submit" class="btn btn-primary">{% trans 'Upload' %}</button>
|
</p>
|
||||||
<button type="cancel" class="btn btn-danger">{% trans 'Cancel' %}</button>
|
|
||||||
{% endbuttons %}
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -7,7 +7,13 @@
|
|||||||
{% block header %}<link rel="prefetch" href="{% static 'css/jcrop.css' %}">{% endblock header %}
|
{% block header %}<link rel="prefetch" href="{% static 'css/jcrop.css' %}">{% endblock header %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
.jcrop-holder > div > div:nth-child(1) {
|
||||||
|
outline-width:2px;
|
||||||
|
outline-style:solid;
|
||||||
|
outline-color:#36b7d7;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<h1>{% trans 'Crop photo' %}</h1>
|
<h1>{% trans 'Crop photo' %}</h1>
|
||||||
|
|
||||||
<p>{% trans 'Draw a square around the portion of the image you want to use:' %}</p>
|
<p>{% trans 'Draw a square around the portion of the image you want to use:' %}</p>
|
||||||
@@ -15,22 +21,18 @@
|
|||||||
<form action="{% url 'crop_photo' photo.pk %}" method="post">{% csrf_token %}
|
<form action="{% url 'crop_photo' photo.pk %}" method="post">{% csrf_token %}
|
||||||
{% if email %}<input type="hidden" name="email" value="{{email}}">{% endif %}
|
{% if email %}<input type="hidden" name="email" value="{{email}}">{% endif %}
|
||||||
{% if openid %}<input type="hidden" name="openid" value="{{openid}}">{% endif %}
|
{% if openid %}<input type="hidden" name="openid" value="{{openid}}">{% endif %}
|
||||||
|
<div class="form-group">
|
||||||
<p class="aligned wide"><img src='{% url 'raw_image' photo.pk %}' id='cropbox' /></p>
|
<img src='{% url 'raw_image' photo.pk %}' id='cropbox'>
|
||||||
|
</div>
|
||||||
<input type='hidden' id='x' name='x' value='0'/>
|
<input type='hidden' id='x' name='x' value='0'/>
|
||||||
<input type='hidden' id='y' name='y' value='0'/>
|
<input type='hidden' id='y' name='y' value='0'/>
|
||||||
<input type='hidden' id='w' name='w' value='0'/>
|
<input type='hidden' id='w' name='w' value='0'/>
|
||||||
<input type='hidden' id='h' name='h' value='0'/>
|
<input type='hidden' id='h' name='h' value='0'/>
|
||||||
|
<div class="form-group">
|
||||||
<p><input type="submit" value="{% trans 'Crop' %}" onsubmit="return checkCoords();"/>
|
<button type="submit" class="btn btn-default" onsubmit="return checkCoords();">{% trans 'Crop' %}</button>
|
||||||
<a id="cancel-link" href="{% url 'profile' %}">{% trans 'Cancel' %}</a></p>
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
{% endblock content %}
|
|
||||||
|
|
||||||
{% block bootstrap4_after_content %}
|
|
||||||
{{ block.super }}
|
|
||||||
<script src="{% static '/js/jcrop.js' %}"></script>
|
<script src="{% static '/js/jcrop.js' %}"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function updateCoords(c) {
|
function updateCoords(c) {
|
||||||
@@ -48,8 +50,11 @@ function checkCoords() {
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
jQuery(function($){
|
jQuery(function($){
|
||||||
$('#cropbox').Jcrop({
|
$('#cropbox').Jcrop({
|
||||||
onSelect: updateCoords
|
onSelect: updateCoords,
|
||||||
|
bgOpacity:1,
|
||||||
|
bgColor:'transparent'
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock bootstrap4_after_content %}
|
<div style="height:40px"></div>
|
||||||
|
{% endblock content %}
|
||||||
|
|||||||
@@ -4,13 +4,22 @@
|
|||||||
{% block title %}{% trans 'Email confirmation' %} - Libravatar{% endblock title %}
|
{% block title %}{% trans 'Email confirmation' %} - Libravatar{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
input[type=checkbox] {display:none}
|
||||||
|
input[type=checkbox] + label:before {
|
||||||
|
font-family: FontAwesome;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
input[type=checkbox] + label:before {content: "\f096"}
|
||||||
|
input[type=checkbox] + label:before {letter-spacing: 5px}
|
||||||
|
input[type=checkbox]:checked + label:before {content: "\f046"}
|
||||||
|
input[type=checkbox]:checked + label:before {letter-spacing: 3px}
|
||||||
|
</style>
|
||||||
<h1>{% trans 'Email confirmation' %}</h1>
|
<h1>{% trans 'Email confirmation' %}</h1>
|
||||||
|
|
||||||
<p><b>{% trans 'Your email address was successfully confirmed!' %}</b></p>
|
<h4>{% trans 'Your email address was successfully confirmed!' %}</h4>
|
||||||
|
|
||||||
{% include '_import_photo_form.html' %}
|
{% include '_import_photo_form.html' %}
|
||||||
|
|
||||||
<p><a href="{% url 'profile' %}">{% trans 'Back to your profile' %}</a></p>
|
<div style="height:40px"></div>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -1,22 +1,32 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
|
|
||||||
{% block title %}{% trans 'Import photo' %} - Libravatar{% endblock title %}
|
{% block title %}{% trans 'Import photo' %} - Libravatar{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
input[type=checkbox] {display:none}
|
||||||
|
input[type=checkbox] + label:before {
|
||||||
|
font-family: FontAwesome;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
input[type=checkbox] + label:before {content: "\f096"}
|
||||||
|
input[type=checkbox] + label:before {letter-spacing: 5px}
|
||||||
|
input[type=checkbox]:checked + label:before {content: "\f046"}
|
||||||
|
input[type=checkbox]:checked + label:before {letter-spacing: 3px}
|
||||||
|
</style>
|
||||||
<h1>{% trans 'Import photo' %}</h1>
|
<h1>{% trans 'Import photo' %}</h1>
|
||||||
|
|
||||||
{% include '_import_photo_form.html' %}
|
|
||||||
|
|
||||||
{% if not email_id %}
|
{% if not email_id %}
|
||||||
|
<div style="max-width:600px">
|
||||||
<form action="{% url 'import_photo' %}" method="get" id="check_mail_form">
|
<form action="{% url 'import_photo' %}" method="get" id="check_mail_form">
|
||||||
|
<div class="form-group">
|
||||||
<label for="check_email_addr">{% trans 'Email Address' %}</label>
|
<label for="check_email_addr">{% trans 'Email Address' %}</label>
|
||||||
<input type="text" name="check_email_addr" value="{{ email_addr }}">
|
<input type="text" name="check_email_addr" class="form-control" value="{{ email_addr }}">
|
||||||
{% buttons %}
|
</div>
|
||||||
<button type="submit" class="btn btn-primary">{% trans 'Check' %}</button>
|
<div class="form-group">
|
||||||
{% endbuttons %}
|
<button type="submit" class="btn btn-default">{% trans 'Check' %}</button>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<script>
|
<script>
|
||||||
document.getElementById('check_mail_form').onsubmit =
|
document.getElementById('check_mail_form').onsubmit =
|
||||||
@@ -25,9 +35,9 @@
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<p><a href="{% url 'profile' %}">{% trans 'Back to your profile' %}</a></p>
|
{% include '_import_photo_form.html' %}
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -9,41 +9,28 @@
|
|||||||
|
|
||||||
{% if form.errors %}
|
{% if form.errors %}
|
||||||
{% for error in form.non_field_errors %}
|
{% for error in form.non_field_errors %}
|
||||||
<div class="alert alert-danger">
|
<div class="alert alert-danger" role="alert">{{ error|escape }}</div>
|
||||||
<strong>{{ error|escape }}</strong>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<form action="{% url 'login' %}" method="post" name="login">{% csrf_token %}
|
|
||||||
|
|
||||||
<table summary="">
|
|
||||||
{% if form.username.errors %}
|
{% if form.username.errors %}
|
||||||
<tr>
|
<div class="alert alert-danger" role="alert">{{ form.username.errors }}</div>
|
||||||
<td colspan="2">{{ form.username.errors }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
|
||||||
<td>{{ form.username.label_tag }}</td>
|
|
||||||
<td>{{ form.username }}</td>
|
|
||||||
</tr>
|
|
||||||
{% if form.password.errors %}
|
{% if form.password.errors %}
|
||||||
<tr>
|
<div class="alert alert-danger" role="alert">{{ form.password.errors }}</div>
|
||||||
<td colspan="2">{{ form.password.errors }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
<div style="max-width:600px">
|
||||||
<td>{{ form.password.label_tag }}</td>
|
<form action="{% url 'login' %}" method="post" name="login">
|
||||||
<td>{{ form.password }}</td>
|
{% csrf_token %}
|
||||||
</tr>
|
<div class="form-group">
|
||||||
</table>
|
<label for="id_username">{% trans 'Benutzername' %}:</label>
|
||||||
|
<input type="text" name="username" autofocus required class="form-control" id="id_username">
|
||||||
<p><input type="submit" value="{% trans 'Login' %}">
|
</div>
|
||||||
<a href="/">{% trans 'Cancel' %}</a></p>
|
<div class="form-group">
|
||||||
|
<label for="id_password">{% trans 'Password' %}:</label>
|
||||||
|
<input type="password" name="password" class="form-control" required id="id_password">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default">{% trans 'Login' %}</button> or <a href="{% url 'new_account' %}" class="btn btn-default">{% trans 'Create new user' %}</a>
|
||||||
</form>
|
</form>
|
||||||
or
|
</div>
|
||||||
<a href="{% url 'new_account' %}">{% trans 'Create new user' %}</a>
|
<div style="height:40px"></div>
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -7,41 +7,32 @@
|
|||||||
|
|
||||||
<h1>{% trans 'Create a new account' %}</h1>
|
<h1>{% trans 'Create a new account' %}</h1>
|
||||||
|
|
||||||
<form action="{% url 'new_account' %}" method="post" name="newaccount">{% csrf_token %}
|
|
||||||
|
|
||||||
<table summary="">
|
|
||||||
{% if form.username.errors %}
|
{% if form.username.errors %}
|
||||||
<tr>
|
<div class="alert alert-danger" role="alert">{{ form.username.errors }}</div>
|
||||||
<td colspan="2">{{ form.username.errors }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
|
||||||
<td>{{ form.username.label_tag }}</td>
|
|
||||||
<td>{{ form.username }}</td>
|
|
||||||
</tr>
|
|
||||||
{% if form.password1.errors %}
|
{% if form.password1.errors %}
|
||||||
<tr>
|
<div class="alert alert-danger" role="alert">{{ form.password1.errors }}</div>
|
||||||
<td colspan="2">{{ form.password1.errors }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
|
||||||
<td>{{ form.password1.label_tag }}</td>
|
|
||||||
<td>{{ form.password1 }}</td>
|
|
||||||
</tr>
|
|
||||||
{% if form.password2.errors %}
|
{% if form.password2.errors %}
|
||||||
<tr>
|
<div class="alert alert-danger" role="alert">{{ form.password2.errors }}</div>
|
||||||
<td colspan="2">{{ form.password2.errors }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
<form action="{% url 'new_account' %}" method="post" name="newaccount">
|
||||||
<td>{{ form.password2.label_tag }}</td>
|
{% csrf_token %}
|
||||||
<td>{{ form.password2 }}</td>
|
<div style="max-width:600px">
|
||||||
</tr>
|
<div class="form-group">
|
||||||
</table>
|
<label for="id_username">{% trans 'Username' %}:</label>
|
||||||
|
<input type="text" name="username" autofocus required class="form-control" id="id_username">
|
||||||
<p><input type="submit" value="{% trans 'Create account' %}">
|
</div>
|
||||||
<a href="/">{% trans 'Cancel' %}</a></p>
|
<div class="form-group">
|
||||||
|
<label for="id_password1">{% trans 'Password' %}:</label>
|
||||||
|
<input type="password" name="password1" class="form-control" required id="id_password1">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="id_password2">{% trans 'Password confirmation' %}:</label>
|
||||||
|
<input type="password" name="password2" class="form-control" required id="id_password2">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default">{% trans 'Create account' %}</button> or <a href="/accounts/login/" class="btn btn-default">{% trans 'Login' %}</a>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -6,46 +6,34 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<h1>{% trans 'Change password' %}</h1>
|
<h1>{% trans 'Change password' %}</h1>
|
||||||
|
|
||||||
<form action="" method="post" name="changepassword">{% csrf_token %}
|
|
||||||
|
|
||||||
<table summary="">
|
|
||||||
{% if form.old_password %}
|
|
||||||
{% if form.old_password.errors %}
|
{% if form.old_password.errors %}
|
||||||
<tr>
|
<div class="alert alert-danger" role="alert">{{ form.old_password.errors }}</div>
|
||||||
<td colspan="2">{{ form.old_password.errors }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
|
||||||
<td>{{ form.old_password.label_tag }}</td>
|
|
||||||
<td>{{ form.old_password }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if form.new_password1.errors %}
|
{% if form.new_password1.errors %}
|
||||||
<tr>
|
<div class="alert alert-danger" role="alert">{{ form.new_password1.errors }}</div>
|
||||||
<td colspan="2">{{ form.new_password1.errors }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
|
||||||
<td>{{ form.new_password1.label_tag }}</td>
|
|
||||||
<td>{{ form.new_password1 }}</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
{% if form.new_password2.errors %}
|
{% if form.new_password2.errors %}
|
||||||
<tr>
|
<div class="alert alert-danger" role="alert">{{ form.new_password2.errors }}</div>
|
||||||
<td colspan="2">{{ form.new_password2.errors }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr>
|
<form action="" method="post" name="changepassword">
|
||||||
<td>{{ form.new_password2.label_tag }}</td>
|
{% csrf_token %}
|
||||||
<td>{{ form.new_password2 }}</td>
|
<div style="max-width:600px">
|
||||||
</tr>
|
{% if form.old_password %}
|
||||||
</table>
|
<div class="form-group">
|
||||||
|
<label for="id_old_password">{% trans 'Old password' %}:</label>
|
||||||
<p><input type="submit" value="{% trans 'Change my password' %}" />
|
<input type="password" name="old_password" autofocus required class="form-control" id="id_old_password">
|
||||||
<a href="{% url 'profile' %}">{% trans 'Cancel' %}</a></p>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="id_new_password1">{% trans 'New password' %}:</label>
|
||||||
|
<input type="password" name="new_password1" class="form-control" required id="id_new_password1">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="id_new_password2">{% trans 'New password confirmation' %}:</label>
|
||||||
|
<input type="password" name="new_password2" class="form-control" required id="id_new_password2">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default">{% trans 'Change my password' %}</button>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
|
||||||
{% block title %}{% trans 'Your Preferences' %}{% endblock title %}
|
{% block title %}{% trans 'Your Preferences' %}{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<h1>{% trans 'Account settings' %}</h1>
|
||||||
|
|
||||||
<div style="max-width:600px;">
|
{% if has_password %}
|
||||||
<form method="post" name="check">{% csrf_token %}
|
<p><a href="{% url 'password_change' %}" class="btn btn-default">{% trans 'Change your password' %}</a></p>
|
||||||
{% bootstrap_form form %}
|
{% else %}
|
||||||
{% buttons %}
|
<p><a href="{% url 'password_set' %}" class="btn btn-default">{% trans 'Set a password' %}</a></p>
|
||||||
<button type="submit" class="btn btn-primary">{% trans 'Update' %}</button>
|
{% endif %}
|
||||||
<button type="cancel" class="btn btn-danger">{% trans 'Cancel' %}</button>
|
|
||||||
{% endbuttons %}
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<!-- <p><a href="{% url 'export' %}" class="btn btn-default">{% trans 'Export your data' %}</a></p> -->
|
||||||
|
|
||||||
|
<p><a href="{% url 'delete' %}" class="btn btn-default">{% trans 'Permanently delete your account' %}</a></p>
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -26,154 +26,112 @@
|
|||||||
padding-right: 0.3em;
|
padding-right: 0.3em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.thumbnail {
|
||||||
|
max-width:80px;
|
||||||
|
max-height:80px;
|
||||||
|
}
|
||||||
|
.nobutton {
|
||||||
|
background: none;
|
||||||
|
color: inherit;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
font: inherit;
|
||||||
|
cursor: pointer;
|
||||||
|
outline: inherit;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
{% if user.confirmedemail_set.count or user.confirmedopenid_set.count %}
|
{% if user.confirmedemail_set.count or user.confirmedopenid_set.count %}
|
||||||
<p>{% trans 'You have the following confirmed identities:' %}</p>
|
<h3>{% trans 'You have the following confirmed identities:' %}</h3>
|
||||||
<ul class="horizontal-list avatar-list">
|
<div class="row">
|
||||||
{% for email in user.confirmedemail_set.all %}
|
{% for email in user.confirmedemail_set.all %}
|
||||||
<li style="float:left;">
|
<form action="{% url 'remove_confirmed_email' email.id %}" method="post">
|
||||||
<form action="{% url 'remove_confirmed_email' email.id %}" method="post">{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div style="float:left; width: 80px; height: 80px;">
|
<div class="panel panel-tortin" style="width:172px;margin-left:20px;float:left">
|
||||||
<a href="{% url 'assign_photo_email' email.id %}">
|
<div class="panel-heading" style="padding-right:0">
|
||||||
{% if email.photo %}
|
<h3 class="panel-title" title="{{ email.email }}" style="display:inline-flex"><a href="{% url 'assign_photo_email' email.id %}"><i class="fa fa-edit"></i></a>
|
||||||
<img class="thumbnail editable avatar-chooser" src="{% url 'raw_image' email.photo.id %}" alt="">
|
<button type="submit" class="nobutton" onclick="return confirm('{% trans 'Are you sure that you want to delete this email address?' %}')"><i class="fa fa-trash"></i></button>
|
||||||
{% else %}
|
{{ email.email|truncatechars:12 }}</h3>
|
||||||
<img class="thumbnail editable avatar-chooser" src="{% static '/img/nobody/80.png' %}" alt="Nobody">
|
</div>
|
||||||
{% endif %}
|
<div class="panel-body" style="height:130px">
|
||||||
</a>
|
<center>
|
||||||
</div>
|
<img style="max-height:100px;max-width:100px" src="{% if email.photo %}{% url 'raw_image' email.photo.id %}{% else %}{% static '/img/nobody/80.png' %}{% endif %}">
|
||||||
<div class="d-none d-sm-block" style="min-width: 320px;">{{ email.email|truncatechars:40 }}</div>
|
</center>
|
||||||
<div style="display:flex;">
|
</div>
|
||||||
<a class="btn btn-light action-item" href="{% url 'assign_photo_email' email.id %}"
|
</div>
|
||||||
role="button" title="{% trans 'Change photo' %}">
|
|
||||||
<i class="fa fa-edit"></i>
|
|
||||||
<span class="d-none">{% trans 'Change' %}</span>
|
|
||||||
</a>
|
|
||||||
<button type="submit" class="btn btn-danger action-item" title="{% trans 'Remove' %}">
|
|
||||||
<i class="fa fa-trash"></i>
|
|
||||||
<span class="d-none">{% trans 'Delete' %}</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="d-block d-sm-none" style="min-width: 320px;">{{ email.email|truncatechars:30 }}</div>
|
|
||||||
</form>
|
</form>
|
||||||
</li>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for openid in user.confirmedopenid_set.all %}
|
{% for openid in user.confirmedopenid_set.all %}
|
||||||
<li style="float:left;">
|
|
||||||
<form action="{% url 'remove_confirmed_openid' openid.id %}" method="post">{% csrf_token %}
|
<form action="{% url 'remove_confirmed_openid' openid.id %}" method="post">{% csrf_token %}
|
||||||
<div style="float:left; min-width: 80px; min-height: 80px;">
|
<div class="panel panel-tortin" style="width:172px;margin-left:20px;float:left">
|
||||||
<a href="{% url 'assign_photo_openid' openid.id %}">
|
<div class="panel-heading" style="padding-right:0">
|
||||||
{% if openid.photo %}
|
<h3 class="panel-title" title="{{ openid.openid }}" style="display:inline-flex"><a href="{% url 'assign_photo_openid' openid.pk %}"><i class="fa fa-edit"></i></a>
|
||||||
<img class="thumbnail editable avatar-chooser" src="{% url 'raw_image' openid.photo.id %}" alt="">
|
<button type="submit" class="nobutton" onclick="return confirm('{% trans 'Are you sure that you want to delete this OpenID?' %}')"><i class="fa fa-trash"></i></button>
|
||||||
{% else %}
|
{{ openid.openid|cut:"http://"|cut:"https://"|truncatechars:12 }}</h3>
|
||||||
<img class="thumbnail editable avatar-chooser" src="{% static '/img/nobody/80.png' %}" alt="">
|
</div>
|
||||||
{% endif %}
|
<div class="panel-body" style="height:130px">
|
||||||
</a>
|
<center>
|
||||||
</div>
|
<img style="max-height:100px;max-width:100px" src="{% if openid.photo %}{% url 'raw_image' openid.photo.id %}{% else %}{% static '/img/nobody/80.png' %}{% endif %}">
|
||||||
<div class="d-none d-sm-block" style="min-width: 320px;">{{ openid.openid|truncatechars:40 }}</div>
|
</center>
|
||||||
<div style="display:flex;">
|
</div>
|
||||||
<a class="btn btn-light action-item" href="{% url 'assign_photo_openid' openid.pk %}"
|
</div>
|
||||||
role="button" title="{% trans 'Change photo' %}">
|
|
||||||
<i class="fa fa-edit"></i>
|
|
||||||
<span class="d-none">{% trans 'Change' %}</span>
|
|
||||||
</a>
|
|
||||||
<button type="submit" class="btn btn-danger action-item" title="{% trans 'Remove' %}">
|
|
||||||
<i class="fa fa-trash"></i>
|
|
||||||
<span class="d-none">{% trans 'Delete' %}</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="d-block d-sm-none" style="min-width: 320px;">{{ openid.openid|truncatechars:30 }}</div>
|
|
||||||
</form>
|
</form>
|
||||||
</li>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</div>
|
||||||
<div class="clear-both"></div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if user.unconfirmedemail_set.count or user.unconfirmedopenid_set.count %}
|
{% if user.unconfirmedemail_set.count or user.unconfirmedopenid_set.count %}
|
||||||
<p>{% trans 'You have the following unconfirmed email addresses and OpenIDs:' %}</p>
|
<h3>{% trans 'You have the following unconfirmed email addresses and OpenIDs:' %}</h3>
|
||||||
<ul class="vertical-list">
|
|
||||||
{% for email in user.unconfirmedemail_set.all %}
|
{% for email in user.unconfirmedemail_set.all %}
|
||||||
<li>
|
<form action="{% url 'remove_unconfirmed_email' email.id %}" method="post">
|
||||||
<form action="{% url 'remove_unconfirmed_email' email.id %}" method="post">{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ email.email }}
|
<div class="btn-group form-group" role="group">
|
||||||
<br/>
|
<button type="submit" class="btn btn-default" onclick="return confirm('{% trans 'Are you sure that you want to delete this email address?' %}')"><i class="fa fa-trash"></i></button>
|
||||||
<!-- TODO: Confirmation mail URL -->
|
<a href="{% url 'resend_confirmation_mail' email.pk %}" class="btn btn-default"><i class="fa fa-envelope"></i></a>
|
||||||
<a class="btn btn-info btn-sm action-item" href="{% url 'resend_confirmation_mail' email.pk %}"
|
<span class="input-group-addon">{{ email.email }}</span>
|
||||||
role="button" title="{% trans 'Resend confirmation mail' %}" style="color:white;">
|
</div>
|
||||||
<i class="fa fa-envelope"></i>
|
</form>
|
||||||
<span class="d-none">{% trans 'Resend confirmation mail' %}</span>
|
|
||||||
</a>
|
|
||||||
<button type="submit" class="btn btn-danger btn-sm action-item" title="{% trans 'Remove' %}">
|
|
||||||
<i class="fa fa-trash"></i>
|
|
||||||
<span class="d-none">{% trans 'Delete' %}</span>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
{# TODO: (expires in xx hours) #}
|
{# TODO: (expires in xx hours) #}
|
||||||
</li>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for openid in user.unconfirmedopenid_set.all %}
|
{% for openid in user.unconfirmedopenid_set.all %}
|
||||||
<li>
|
<form action="{% url 'remove_unconfirmed_openid' openid.id %}" method="post">
|
||||||
<form action="{% url 'remove_unconfirmed_openid' openid.id %}" method="post">{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ openid.openid }}
|
<div class="btn-group form-group" role="group">
|
||||||
<br/>
|
<button type="submit" class="btn btn-default" onclick="return confirm('{% trans 'Are you sure that you want to delete this OpenID?' %}')"><i class="fa fa-trash"></i></button>
|
||||||
<button type="submit" class="btn btn-danger btn-sm" title="{% trans 'Remove' %}">
|
<span class="input-group-addon">{{ openid.openid }}</span>
|
||||||
<i class="fa fa-trash"></i>
|
</div>
|
||||||
</button>
|
|
||||||
</form>
|
</form>
|
||||||
{# TODO: (expires in xx hours) #}
|
{# TODO: (expires in xx hours) #}
|
||||||
</li>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
{% if not max_emails %}
|
{% if not max_emails %}<a href="{% url 'add_email' %}" class="btn btn-default">{% trans 'Add a new email address' %}</a> or{% endif %}
|
||||||
<a href="{% url 'add_email' %}">{% trans 'Add a new email address' %}</a>
|
<a href="{% url 'add_openid' %}" class="btn btn-default">{% trans 'Add a new OpenID' %}</a></p>
|
||||||
|
|
|
||||||
{% endif %}
|
|
||||||
<a href="{% url 'add_openid' %}">{% trans 'Add a new OpenID' %}</a></p>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% if user.photo_set.count %}
|
{% if user.photo_set.count %}
|
||||||
<p>{% trans 'Here are the photos you have uploaded/imported:' %}</p>
|
<h3>{% trans 'Here are the photos you have uploaded/imported:' %}</h3>
|
||||||
<ul class="horizontal-list avatar-list centered">
|
<div class="row">
|
||||||
{% for photo in user.photo_set.all %}
|
{% for photo in user.photo_set.all %}
|
||||||
<li>
|
<div class="panel panel-tortin" style="width:132px;margin-left:20px;float:left">
|
||||||
<a href="{% url 'raw_image' photo.id %}">
|
<div class="panel-heading">
|
||||||
<img class="thumbnail" src="{% url 'raw_image' photo.id %}"
|
<h3 class="panel-title"><a href="{% url 'delete_photo' photo.pk %}" onclick="return confirm('{% trans 'Are you sure that you want to delete this image?' %}')"><i class="fa fa-trash"></i></a> {% trans 'Image' %} {{ forloop.counter }}</h3>
|
||||||
title="{% blocktrans with photo.add_date as datetime %}Uploaded on {{ datetime }}{% endblocktrans %}"
|
</div>
|
||||||
alt="{% blocktrans with photo.add_date as datetime %}Uploaded on {{ datetime }}{% endblocktrans %}">
|
<div class="panel-body" style="height:130px">
|
||||||
</a>
|
<center>
|
||||||
<div style="padding-top: 2px; min-width: 100px;"/>
|
<img style="max-height:100px;max-width:100px" src="{% url 'raw_image' photo.id %}">
|
||||||
<a class="btn btn-danger btn-sm action-item" href="{% url 'delete_photo' photo.pk %}"
|
</center>
|
||||||
role="button" title="{% trans 'Delete' %}" style="color:white;">
|
</div>
|
||||||
<i class="fa fa-trash"></i>
|
</div>
|
||||||
<span class="d-none">Delete</span>
|
|
||||||
</a>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if not max_photos %}
|
{% if not max_photos %}
|
||||||
<p>
|
<p>
|
||||||
<br/>
|
<a href="{% url 'upload_photo' %}" class="btn btn-default">{% trans 'Upload a new photo' %}</a> or
|
||||||
<a href="{% url 'upload_photo' %}">{% trans 'Upload a new photo' %}</a><br/>
|
<a href="{% url 'import_photo' %}" class="btn btn-default">{% trans 'Import photo from other services' %}</a>
|
||||||
<a href="{% url 'import_photo' %}">{% trans 'Import photo from other services' %}</a>
|
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<div style="height:40px"></div>
|
||||||
<h2>{% trans 'Account settings' %}</h2>
|
|
||||||
|
|
||||||
{% if has_password %}
|
|
||||||
<p><a href="{% url 'password_change' %}">{% trans 'Change your password' %}</a></p>
|
|
||||||
{% else %}
|
|
||||||
<p><a href="{% url 'password_set' %}">{% trans 'Set a password' %}</a></p>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!-- <p><a href="{% url 'export' %}">{% trans 'Export your data' %}</a></p> -->
|
|
||||||
|
|
||||||
<p><a href="{% url 'delete' %}">{% trans 'Permanently delete your account' %}</a></p>
|
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -1,20 +1,57 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
|
|
||||||
{% block title %}{% trans 'Upload an export from libravatar' %} - ivatar{% endblock title %}
|
{% block title %}{% trans 'Upload an export from libravatar' %} - ivatar{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
input[type=checkbox] {display:none}
|
||||||
|
input[type=checkbox] + label {
|
||||||
|
padding-left:0;
|
||||||
|
}
|
||||||
|
input[type=checkbox] + label:before {
|
||||||
|
font-family: FontAwesome;
|
||||||
|
display: inline-block;
|
||||||
|
letter-spacing:5px;
|
||||||
|
font-size:20px;
|
||||||
|
color:#36b7d7;
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
input[type=checkbox] + label:before {content: "\f0c8"}
|
||||||
|
input[type=checkbox]:checked + label:before {content: "\f14a"}
|
||||||
|
.uploadbtn:before {
|
||||||
|
position:absolute;
|
||||||
|
left:0;
|
||||||
|
right:0;
|
||||||
|
text-align:center;
|
||||||
|
content:"Select file";
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<h1>{% trans 'Upload an export from libravatar' %}</h1>
|
<h1>{% trans 'Upload an export from libravatar' %}</h1>
|
||||||
|
|
||||||
<div style="max-width:600px;">
|
<form enctype="multipart/form-data" method="post">
|
||||||
<form enctype="multipart/form-data" method="post">{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% bootstrap_form form %}
|
<div class="form-group">
|
||||||
{% buttons %}
|
<label for="id_export_file">{% trans 'Export file' %}</label>
|
||||||
<button type="submit" class="btn btn-primary">{% trans 'Upload' %}</button>
|
<span class="btn btn-default uploadbtn" style="display:flex;width:120px;padding:0;height:36px;position:relative;align-items:center">
|
||||||
<button type="cancel" class="btn btn-danger">{% trans 'Cancel' %}</button>
|
<input type="file" name="export_file" required id="id_export_file" style="opacity:0;width:100%;height:100%;float:left">
|
||||||
{% endbuttons %}
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="checkbox">
|
||||||
|
<input type="checkbox" name="not_porn" required id="id_not_porn">
|
||||||
|
<label for="id_not_porn">{% trans 'suitable for all ages (i.e. no offensive content)' %}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="checkbox">
|
||||||
|
<input type="checkbox" name="can_distribute" required id="id_can_distribute">
|
||||||
|
<label for="id_can_distribute">{% trans 'can be freely copied' %}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default">{% trans 'Upload' %}</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
|
|
||||||
{% block title %}{% trans 'Upload a new photo' %}{% endblock title %}
|
{% block title %}{% trans 'Upload a new photo' %}{% endblock title %}
|
||||||
|
|
||||||
@@ -9,35 +8,60 @@
|
|||||||
<link rel="prefetch" href="{% static '/js/jcrop.js' %}">{% endblock header %}
|
<link rel="prefetch" href="{% static '/js/jcrop.js' %}">{% endblock header %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<style>
|
||||||
|
input[type=checkbox] {display:none}
|
||||||
|
input[type=checkbox] + label {
|
||||||
|
padding-left:0;
|
||||||
|
}
|
||||||
|
input[type=checkbox] + label:before {
|
||||||
|
font-family: FontAwesome;
|
||||||
|
display: inline-block;
|
||||||
|
letter-spacing:5px;
|
||||||
|
font-size:20px;
|
||||||
|
color:#36b7d7;
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
input[type=checkbox] + label:before {content: "\f0c8"}
|
||||||
|
input[type=checkbox]:checked + label:before {content: "\f14a"}
|
||||||
|
.uploadbtn:before {
|
||||||
|
position:absolute;
|
||||||
|
left:0;
|
||||||
|
right:0;
|
||||||
|
text-align:center;
|
||||||
|
content:"Select file";
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<h1>{% trans 'Upload a new photo' %}</h1>
|
<h1>{% trans 'Upload a new photo' %}</h1>
|
||||||
|
|
||||||
<form enctype="multipart/form-data" action="{% url 'upload_photo' %}" method="post">{% csrf_token %}
|
<form enctype="multipart/form-data" action="{% url 'upload_photo' %}" method="post">{% csrf_token %}
|
||||||
{% if email %}<input type="hidden" name="email" value="{{ email }}">{% endif %}
|
{% if email %}<input type="hidden" name="email" value="{{ email }}">{% endif %}
|
||||||
{% if openid %}<input type="hidden" name="openid" value="{{ openid }}">{% endif %}
|
{% if openid %}<input type="hidden" name="openid" value="{{ openid }}">{% endif %}
|
||||||
|
|
||||||
{{ form.photo.errors }}
|
{% if form.photo.errors %}
|
||||||
<div class="form-group">
|
<div class="alert alert-danger" role="alert">{{ form.photo.errors }}</div>
|
||||||
{{ form.photo.label_tag }}
|
{% endif %}
|
||||||
<input id="id_photo" type="file" name="photo" accept="image/*">
|
<div class="form-group">
|
||||||
</div>
|
<label for="id_photo">{% trans 'Photo' %}:</label>
|
||||||
|
<span class="btn btn-default uploadbtn" style="display:flex;width:120px;padding:0;height:36px;position:relative;align-items:center">
|
||||||
|
<input type="file" name="photo" required id="id_photo" accept="image/*" style="opacity:0;width:100%;height:100%;float:left">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
{% blocktrans with max_file_size|filesizeformat as max_size %}Maximum file size of {{ max_size }}.{% endblocktrans %}</p>
|
{% blocktrans with max_file_size|filesizeformat as max_size %}Maximum file size of {{ max_size }}.{% endblocktrans %}</p>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<ul class="conditions">
|
<div class="checkbox">
|
||||||
<li>
|
<input type="checkbox" name="not_porn" required id="id_not_porn">
|
||||||
{{ form.not_porn.errors }} {{ form.not_porn }}
|
<label for="id_not_porn">{% trans 'suitable for all ages (i.e. no offensive content)' %}</label>
|
||||||
<label for="id_not_porn">{{ form.not_porn.label }}</label>
|
</div>
|
||||||
</li>
|
</div>
|
||||||
<li>
|
<div class="form-group">
|
||||||
{{ form.can_distribute.errors }} {{ form.can_distribute }}
|
<div class="checkbox">
|
||||||
<label for="id_can_distribute">{{ form.can_distribute.label }}</label>
|
<input type="checkbox" name="can_distribute" required id="id_can_distribute">
|
||||||
</li>
|
<label for="id_can_distribute">{% trans 'can be freely copied' %}</label>
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default">{% trans 'Upload' %}</button>
|
||||||
{% buttons %}
|
|
||||||
<button type="submit" class="btn btn-primary">{% trans 'Upload' %}</button>
|
|
||||||
<button type="cancel" class="btn btn-danger">{% trans 'Cancel' %}</button>
|
|
||||||
{% endbuttons %}
|
|
||||||
</form>
|
</form>
|
||||||
|
<div style="height:40px"></div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class Tester(TestCase): # pylint: disable=too-many-public-methods
|
|||||||
username = random_string()
|
username = random_string()
|
||||||
password = random_string()
|
password = random_string()
|
||||||
email = '%s@%s.%s' % (username, random_string(), random_string(2))
|
email = '%s@%s.%s' % (username, random_string(), random_string(2))
|
||||||
# Dunno why random tld doens't work, but I'm too lazy now to investigate
|
# Dunno why random tld doesn't work, but I'm too lazy now to investigate
|
||||||
openid = 'http://%s.%s.%s/' % (username, random_string(), 'org')
|
openid = 'http://%s.%s.%s/' % (username, random_string(), 'org')
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
@@ -375,7 +375,7 @@ class Tester(TestCase): # pylint: disable=too-many-public-methods
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
response.status_code,
|
response.status_code,
|
||||||
200,
|
200,
|
||||||
'deleting photo doesnt work?')
|
'deleting photo does not work?')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
str(list(response.context[0]['messages'])[0]),
|
str(list(response.context[0]['messages'])[0]),
|
||||||
'Photo deleted successfully',
|
'Photo deleted successfully',
|
||||||
@@ -489,12 +489,8 @@ class Tester(TestCase): # pylint: disable=too-many-public-methods
|
|||||||
self.login()
|
self.login()
|
||||||
url = reverse('upload_photo')
|
url = reverse('upload_photo')
|
||||||
# rb => Read binary
|
# rb => Read binary
|
||||||
with open(
|
with open(os.path.join(settings.STATIC_ROOT, 'img', 'deadbeef.png'),
|
||||||
os.path.join(
|
'rb') as photo:
|
||||||
settings.STATIC_ROOT,
|
|
||||||
'img',
|
|
||||||
'deadbeef.png'),
|
|
||||||
'rb') as photo:
|
|
||||||
response = self.client.post(url, {
|
response = self.client.post(url, {
|
||||||
'photo': photo,
|
'photo': photo,
|
||||||
'not_porn': True,
|
'not_porn': True,
|
||||||
@@ -571,12 +567,8 @@ class Tester(TestCase): # pylint: disable=too-many-public-methods
|
|||||||
self.login()
|
self.login()
|
||||||
url = reverse('upload_photo')
|
url = reverse('upload_photo')
|
||||||
# rb => Read binary
|
# rb => Read binary
|
||||||
with open(
|
with open(os.path.join(settings.STATIC_ROOT, 'img', 'mm.svg'),
|
||||||
os.path.join(
|
'rb') as photo:
|
||||||
settings.STATIC_ROOT,
|
|
||||||
'img',
|
|
||||||
'mm.svg'),
|
|
||||||
'rb') as photo:
|
|
||||||
response = self.client.post(url, {
|
response = self.client.post(url, {
|
||||||
'photo': photo,
|
'photo': photo,
|
||||||
'not_porn': True,
|
'not_porn': True,
|
||||||
@@ -594,12 +586,8 @@ class Tester(TestCase): # pylint: disable=too-many-public-methods
|
|||||||
self.login()
|
self.login()
|
||||||
url = reverse('upload_photo')
|
url = reverse('upload_photo')
|
||||||
# rb => Read binary
|
# rb => Read binary
|
||||||
with open(
|
with open(os.path.join(settings.STATIC_ROOT, 'img', 'broken.gif'),
|
||||||
os.path.join(
|
'rb') as photo:
|
||||||
settings.STATIC_ROOT,
|
|
||||||
'img',
|
|
||||||
'broken.gif'),
|
|
||||||
'rb') as photo:
|
|
||||||
response = self.client.post(url, {
|
response = self.client.post(url, {
|
||||||
'photo': photo,
|
'photo': photo,
|
||||||
'not_porn': True,
|
'not_porn': True,
|
||||||
@@ -620,12 +608,9 @@ class Tester(TestCase): # pylint: disable=too-many-public-methods
|
|||||||
self.login()
|
self.login()
|
||||||
url = reverse('upload_photo')
|
url = reverse('upload_photo')
|
||||||
# rb => Read binary
|
# rb => Read binary
|
||||||
with open(
|
with open(os.path.join(settings.STATIC_ROOT, 'img',
|
||||||
os.path.join(
|
'hackergotchi_test.tif'),
|
||||||
settings.STATIC_ROOT,
|
'rb') as photo:
|
||||||
'img',
|
|
||||||
'hackergotchi_test.tif'),
|
|
||||||
'rb') as photo:
|
|
||||||
response = self.client.post(url, {
|
response = self.client.post(url, {
|
||||||
'photo': photo,
|
'photo': photo,
|
||||||
'not_porn': True,
|
'not_porn': True,
|
||||||
@@ -860,7 +845,6 @@ class Tester(TestCase): # pylint: disable=too-many-public-methods
|
|||||||
'openid',
|
'openid',
|
||||||
'OpenID already added and confirmed!')
|
'OpenID already added and confirmed!')
|
||||||
|
|
||||||
|
|
||||||
def test_assign_photo_to_openid(self):
|
def test_assign_photo_to_openid(self):
|
||||||
'''
|
'''
|
||||||
Test assignment of photo to openid
|
Test assignment of photo to openid
|
||||||
|
|||||||
@@ -4,9 +4,11 @@ View classes for ivatar/ivataraccount/
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
import base64
|
import base64
|
||||||
from PIL import Image
|
import binascii
|
||||||
from urllib.request import urlopen
|
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
from django.db.models import ProtectedError
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
@@ -298,7 +300,7 @@ class ImportPhotoView(SuccessMessageMixin, TemplateView):
|
|||||||
if 'email_id' in kwargs:
|
if 'email_id' in kwargs:
|
||||||
try:
|
try:
|
||||||
addr = ConfirmedEmail.objects.get(pk=kwargs['email_id']).email
|
addr = ConfirmedEmail.objects.get(pk=kwargs['email_id']).email
|
||||||
except Exception: # pylint: disable=broad-except
|
except ConfirmedEmail.ObjectDoesNotExist:
|
||||||
messages.error(
|
messages.error(
|
||||||
self.request,
|
self.request,
|
||||||
_('Address does not exist'))
|
_('Address does not exist'))
|
||||||
@@ -316,10 +318,12 @@ class ImportPhotoView(SuccessMessageMixin, TemplateView):
|
|||||||
email=addr,
|
email=addr,
|
||||||
default=404,
|
default=404,
|
||||||
)
|
)
|
||||||
try:
|
if libravatar_service_url:
|
||||||
if libravatar_service_url:
|
try:
|
||||||
# if it doesn't work, it will be catched by except
|
|
||||||
urlopen(libravatar_service_url)
|
urlopen(libravatar_service_url)
|
||||||
|
except OSError as exc:
|
||||||
|
print('Exception caught during photo import: {}'.format(exc))
|
||||||
|
else:
|
||||||
context['photos'].append({
|
context['photos'].append({
|
||||||
'service_url': libravatar_service_url,
|
'service_url': libravatar_service_url,
|
||||||
'thumbnail_url': libravatar_service_url + '?s=80',
|
'thumbnail_url': libravatar_service_url + '?s=80',
|
||||||
@@ -328,9 +332,6 @@ class ImportPhotoView(SuccessMessageMixin, TemplateView):
|
|||||||
'height': 80,
|
'height': 80,
|
||||||
'service_name': 'Libravatar',
|
'service_name': 'Libravatar',
|
||||||
})
|
})
|
||||||
except Exception as e: # pylint: disable=broad-except,invalid-name
|
|
||||||
print('Exception caught during photo import: %s' % e)
|
|
||||||
pass
|
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@@ -423,7 +424,7 @@ class DeletePhotoView(SuccessMessageMixin, View):
|
|||||||
photo = self.model.objects.get( # pylint: disable=no-member
|
photo = self.model.objects.get( # pylint: disable=no-member
|
||||||
pk=kwargs['pk'], user=request.user)
|
pk=kwargs['pk'], user=request.user)
|
||||||
photo.delete()
|
photo.delete()
|
||||||
except Exception: # pylint: disable=broad-except
|
except (self.model.DoesNotExist, ProtectedError):
|
||||||
messages.error(
|
messages.error(
|
||||||
request,
|
request,
|
||||||
_('No such image or no permission to delete it'))
|
_('No such image or no permission to delete it'))
|
||||||
@@ -558,12 +559,12 @@ class RedirectOpenIDView(View):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
auth_request = openid_consumer.begin(user_url)
|
auth_request = openid_consumer.begin(user_url)
|
||||||
except consumer.DiscoveryFailure as e: # pylint: disable=invalid-name
|
except consumer.DiscoveryFailure as exc:
|
||||||
messages.error(request, _('OpenID discovery failed: %s' % e))
|
messages.error(request, _('OpenID discovery failed: %s' % exc))
|
||||||
return HttpResponseRedirect(reverse_lazy('profile'))
|
return HttpResponseRedirect(reverse_lazy('profile'))
|
||||||
except UnicodeDecodeError as e: # pragma: no cover pylint: disable=invalid-name
|
except UnicodeDecodeError as exc: # pragma: no cover
|
||||||
msg = _('OpenID discovery failed (userid=%s) for %s: %s' %
|
msg = _('OpenID discovery failed (userid=%s) for %s: %s' %
|
||||||
(request.user.id, user_url.encode('utf-8'), e))
|
(request.user.id, user_url.encode('utf-8'), exc))
|
||||||
print(msg)
|
print(msg)
|
||||||
messages.error(request, msg)
|
messages.error(request, msg)
|
||||||
|
|
||||||
@@ -684,14 +685,14 @@ class CropPhotoView(TemplateView):
|
|||||||
if 'email' in request.POST:
|
if 'email' in request.POST:
|
||||||
try:
|
try:
|
||||||
email = ConfirmedEmail.objects.get(email=request.POST['email'])
|
email = ConfirmedEmail.objects.get(email=request.POST['email'])
|
||||||
except Exception: # pylint: disable=broad-except
|
except ConfirmedEmail.DoesNotExist:
|
||||||
pass # Ignore automatic assignment
|
pass # Ignore automatic assignment
|
||||||
|
|
||||||
if 'openid' in request.POST:
|
if 'openid' in request.POST:
|
||||||
try:
|
try:
|
||||||
openid = ConfirmedOpenId.objects.get( # pylint: disable=no-member
|
openid = ConfirmedOpenId.objects.get( # pylint: disable=no-member
|
||||||
openid=request.POST['openid'])
|
openid=request.POST['openid'])
|
||||||
except Exception: # pylint: disable=broad-except
|
except ConfirmedOpenId.DoesNotExist:
|
||||||
pass # Ignore automatic assignment
|
pass # Ignore automatic assignment
|
||||||
|
|
||||||
return photo.perform_crop(request, dimensions, email, openid)
|
return photo.perform_crop(request, dimensions, email, openid)
|
||||||
@@ -731,8 +732,8 @@ class UploadLibravatarExportView(SuccessMessageMixin, FormView):
|
|||||||
for arg in request.POST:
|
for arg in request.POST:
|
||||||
if arg.startswith('email_'):
|
if arg.startswith('email_'):
|
||||||
email = request.POST[arg]
|
email = request.POST[arg]
|
||||||
if not ConfirmedEmail.objects.filter(email=email) and \
|
if (not ConfirmedEmail.objects.filter(email=email)
|
||||||
not UnconfirmedEmail.objects.filter(email=email): # pylint: disable=no-member
|
and not UnconfirmedEmail.objects.filter(email=email)): # pylint: disable=no-member
|
||||||
try:
|
try:
|
||||||
unconfirmed = UnconfirmedEmail.objects.create( # pylint: disable=no-member
|
unconfirmed = UnconfirmedEmail.objects.create( # pylint: disable=no-member
|
||||||
user=request.user,
|
user=request.user,
|
||||||
@@ -743,19 +744,20 @@ class UploadLibravatarExportView(SuccessMessageMixin, FormView):
|
|||||||
url=request.build_absolute_uri('/')[:-1])
|
url=request.build_absolute_uri('/')[:-1])
|
||||||
messages.info(
|
messages.info(
|
||||||
request,
|
request,
|
||||||
'%s: %s' %(
|
'%s: %s' % (
|
||||||
email,
|
email,
|
||||||
_('address added successfully,\
|
_('address added successfully,\
|
||||||
confirmation mail sent')))
|
confirmation mail sent')))
|
||||||
except Exception as e: # pylint: disable=broad-except,invalid-name
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
# DEBUG
|
# DEBUG
|
||||||
print('Exception during adding mail address (%s): %s' % (email, e))
|
print('Exception during adding mail address (%s): %s'
|
||||||
|
% (email, exc))
|
||||||
|
|
||||||
if arg.startswith('photo'):
|
if arg.startswith('photo'):
|
||||||
try:
|
try:
|
||||||
data = base64.decodebytes(bytes(request.POST[arg], 'utf-8'))
|
data = base64.decodebytes(bytes(request.POST[arg], 'utf-8'))
|
||||||
except Exception as e: # pylint: disable=broad-except,invalid-name
|
except binascii.Error as exc:
|
||||||
print('Cannot decode photo: %s' % e)
|
print('Cannot decode photo: %s' % exc)
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
pilobj = Image.open(BytesIO(data))
|
pilobj = Image.open(BytesIO(data))
|
||||||
@@ -768,8 +770,8 @@ class UploadLibravatarExportView(SuccessMessageMixin, FormView):
|
|||||||
photo.format = file_format(pilobj.format)
|
photo.format = file_format(pilobj.format)
|
||||||
photo.data = out.read()
|
photo.data = out.read()
|
||||||
photo.save()
|
photo.save()
|
||||||
except Exception as e: # pylint: disable=broad-except,invalid-name
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
print('Exception during save: %s' % e)
|
print('Exception during save: %s' % exc)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
return HttpResponseRedirect(reverse_lazy('profile'))
|
return HttpResponseRedirect(reverse_lazy('profile'))
|
||||||
@@ -799,17 +801,18 @@ class ResendConfirmationMailView(View):
|
|||||||
try:
|
try:
|
||||||
email = self.model.objects.get( # pylint: disable=no-member
|
email = self.model.objects.get( # pylint: disable=no-member
|
||||||
user=request.user, id=kwargs['email_id'])
|
user=request.user, id=kwargs['email_id'])
|
||||||
|
except self.model.DoesNotExist: # pragma: no cover # pylint: disable=no-member
|
||||||
|
messages.error(request, _('ID does not exist'))
|
||||||
|
else:
|
||||||
try:
|
try:
|
||||||
email.send_confirmation_mail(
|
email.send_confirmation_mail(
|
||||||
url=request.build_absolute_uri('/')[:-1])
|
url=request.build_absolute_uri('/')[:-1])
|
||||||
messages.success(
|
messages.success(
|
||||||
request, '%s: %s' %
|
request, '%s: %s' %
|
||||||
(_('Confirmation mail sent to'), email.email))
|
(_('Confirmation mail sent to'), email.email))
|
||||||
except Exception as e: # pylint: disable=broad-except,invalid-name
|
except Exception as exc: # pylint: disable=broad-except
|
||||||
messages.error(
|
messages.error(
|
||||||
request, '%s %s: %s' %
|
request, '%s %s: %s' %
|
||||||
(_('Unable to send confirmation email for'),
|
(_('Unable to send confirmation email for'),
|
||||||
email.email, e))
|
email.email, exc))
|
||||||
except self.model.DoesNotExist: # pragma: no cover # pylint: disable=no-member
|
|
||||||
messages.error(request, _('ID does not exist'))
|
|
||||||
return HttpResponseRedirect(reverse_lazy('profile'))
|
return HttpResponseRedirect(reverse_lazy('profile'))
|
||||||
|
|||||||
7
ivatar/static/css/bootstrap-4.1.1.min.css
vendored
7
ivatar/static/css/bootstrap-4.1.1.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
ivatar/static/css/bootstrap.min.css
vendored
1
ivatar/static/css/bootstrap.min.css
vendored
@@ -1 +0,0 @@
|
|||||||
bootstrap-4.1.1.min.css
|
|
||||||
6
ivatar/static/css/bootstrap.min.css
vendored
Normal file
6
ivatar/static/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
bootstrap-4.1.1.min.css.map
|
|
||||||
@@ -1,131 +0,0 @@
|
|||||||
body {
|
|
||||||
background-image: url("../img/pattern.jpg");
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1, h2, h3 {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
color: #8c8c11;
|
|
||||||
}
|
|
||||||
|
|
||||||
#contribute-button a {
|
|
||||||
background-color: #938411;
|
|
||||||
}
|
|
||||||
|
|
||||||
#outer {
|
|
||||||
background-color: #AB9F58;
|
|
||||||
}
|
|
||||||
|
|
||||||
#account a {
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#site-name {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#site-branding {
|
|
||||||
color: #fff;
|
|
||||||
margin-right: 20%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error, .errorlist li {
|
|
||||||
border-radius: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#page {
|
|
||||||
background-color: #7e3700cc;
|
|
||||||
padding: 10px 18px;
|
|
||||||
margin: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header, #footer {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #F9711F;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header {
|
|
||||||
padding: 5px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#footer {
|
|
||||||
font-size: small;
|
|
||||||
padding: 5px;
|
|
||||||
min-height: 40px;
|
|
||||||
margin-top: 30px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
#account {
|
|
||||||
float: right;
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 2px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 25px;
|
|
||||||
border-radius: 0px;
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content a {
|
|
||||||
color: #938411;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul li {
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.horizontal-list li {
|
|
||||||
display: inline;
|
|
||||||
float: left;
|
|
||||||
margin: 0 15px 15px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.centered li {
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fas, .fab {
|
|
||||||
color: #dbc40d;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
border-radius: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar {
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-light {
|
|
||||||
background-color: transparent !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-link {
|
|
||||||
color: #eee !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-link:hover {
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-control {
|
|
||||||
border-radius: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropdown-menu {
|
|
||||||
border-radius: 0px;
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
/* Main palette from http://www.colourlovers.com/palette/4581580/Dr._Hans_6 */
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #DEE8F1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#site-name {
|
|
||||||
color: #675E57;
|
|
||||||
}
|
|
||||||
|
|
||||||
#site-branding {
|
|
||||||
color: #4F6384;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
color: #675E57;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
color: #4F6384;
|
|
||||||
}
|
|
||||||
|
|
||||||
#outer {
|
|
||||||
background-color: #9AB5D2;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #675E57;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content a {
|
|
||||||
color: #4F6384;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fas, .fab {
|
|
||||||
color: #675E57;
|
|
||||||
}
|
|
||||||
4
ivatar/static/css/fontawesome.min.css
vendored
Normal file
4
ivatar/static/css/fontawesome.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
25
ivatar/static/css/fonts.css
Normal file
25
ivatar/static/css/fonts.css
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url("../fonts/montserrat-regular-webfont.eot");
|
||||||
|
src: url("../fonts/montserrat-regular-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/montserrat-regular-webfont.woff2") format("woff2"), url("../fonts/montserrat-regular-webfont.woff") format("woff"), url("../fonts/montserrat-regular-webfont.ttf") format("truetype");
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url("../fonts/montserrat-bold-webfont.eot");
|
||||||
|
src: url("../fonts/montserrat-bold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/montserrat-bold-webfont.woff2") format("woff2"), url("../fonts/montserrat-bold-webfont.woff") format("woff"), url("../fonts/montserrat-bold-webfont.ttf") format("truetype");
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Source Sans Pro';
|
||||||
|
src: url('../fonts/Source-Sans-Pro.woff') format('woff'),
|
||||||
|
url('../fonts/Source-Sans-Pro.svg#Source-Sans-Pro') format('svg'),
|
||||||
|
url('../fonts/Source-Sans-Pro.eot'),
|
||||||
|
url('../fonts/Source-Sans-Pro.eot?#iefix') format('embedded-opentype');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
@@ -1,201 +0,0 @@
|
|||||||
/* Main palette from http://www.colourlovers.com/palette/4569033/Graceful */
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #FFE7B9;
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#site-name {
|
|
||||||
color: #332B3A;
|
|
||||||
font-size: 1.5em;
|
|
||||||
font-style: normal;
|
|
||||||
letter-spacing: 0.35em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logo {
|
|
||||||
float: left;
|
|
||||||
margin: 0 1em 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logo img {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#site-branding {
|
|
||||||
color: #0B0507;
|
|
||||||
font-style: italic;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
color: #AFA44B;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
color: #F9711F;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error, .errorlist li {
|
|
||||||
background-color: #FF0000;
|
|
||||||
border-radius: 8px;
|
|
||||||
color: #FFFFFF;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#outer {
|
|
||||||
background-color: #AFA44B;
|
|
||||||
padding: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header, #footer {
|
|
||||||
color: #8390BA;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #F9711F;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
#footer {
|
|
||||||
font-size: small;
|
|
||||||
padding: 16px 8px 8px 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#account {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 8px 16px 16px 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content a {
|
|
||||||
color: #AFA44B;
|
|
||||||
}
|
|
||||||
|
|
||||||
.thumbnail {
|
|
||||||
border: 0;
|
|
||||||
max-height: 80px;
|
|
||||||
max-width: 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-list {
|
|
||||||
height: 105px;
|
|
||||||
margin: 0 0 0 1.5em;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-list .editable {
|
|
||||||
margin: 0 8px 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 414px) {
|
|
||||||
.avatar-list {
|
|
||||||
position: relative;
|
|
||||||
left: -30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ul li {
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.horizontal-list li {
|
|
||||||
display: inline;
|
|
||||||
float: left;
|
|
||||||
margin: 0 15px 15px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.centered li {
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
.imported-list {
|
|
||||||
height: 125px;
|
|
||||||
margin: 0 0 0 1.5em;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conditions {
|
|
||||||
list-style-type: none;
|
|
||||||
margin: 0;
|
|
||||||
padding-start: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hint {
|
|
||||||
color: #6D6D6D;
|
|
||||||
font-style: italic;
|
|
||||||
margin: 0 0 0 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-chooser {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
#action-panel {
|
|
||||||
border: 5px;
|
|
||||||
border-radius: 8px;
|
|
||||||
border-style: dashed;
|
|
||||||
float: right;
|
|
||||||
margin: 20px;
|
|
||||||
padding: 5px 20px 15px 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#id_openid, #id_openid_identifier {
|
|
||||||
background : #FFFFFF url("../img/openid_logo.png") no-repeat scroll 0 50%;
|
|
||||||
padding : 4px 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#contribute-button {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
#contribute-button a {
|
|
||||||
background-color: #AFA44B;
|
|
||||||
border: 1px;
|
|
||||||
border-color: #000;
|
|
||||||
border-radius: 8px;
|
|
||||||
border-style: solid;
|
|
||||||
font-size: 1.5em;
|
|
||||||
color: black !important;
|
|
||||||
padding: 3px 5px 5px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#agpl-button {
|
|
||||||
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGsAAAAUCAMAAAC9FTMqAAAAV1BMVEXV1tXMzczGyMa4urivsq+rraurraurrauqrKqnq6edoJyTl5OFiIR7fntwc3BjZWJbXVtISUc/QD8xMjEnJyccHBwSEhIMDAwBAQEAAAAAAAAAAAAAAAAPezW4AAABW0lEQVRIx73VyY7DIBAE0E6kisxibJYGDvX/3zkHE8eamUssJ31BspCfKJYWfq+EwXynAoVGpn/K2mmapgspMRSaBwDA4lVmVTYLAOmyAKeX5eYnZG2oJOlxKXawQhiSt7GXRpaxRL3eWlYAgPdYo0NkdWOZYczNKY8xpcaWUsokW2rvW2sEYBYL64G5N7/v3fiZyG2MIoVFRIRkkXzCqoCNZltKJ3U/KJkks2SNoiySVLWzSNQk5aRF90gWAEwsSqbdSptlnZHCLCU6pyxinQ/1nBW4xhkAzGwRXtu1W7ebbNYyMrxNZzOc+7LHtvbq8TtDZd4s5kN2pyybyojNF6o73Ot2tLre5a79YInc37Uw92oBM+fexxE5nnkNjRoqySWsJOt231lDCMvbliebaiPrjONzVa+/y/Dbpx6PD+Nn3ihgaaRGh89Qw3r2FOPMn9ZycU/5Zq/8Xv0AInWfQFkFqnUAAAAASUVORK5CYII=');
|
|
||||||
float: left;
|
|
||||||
height: 20px;
|
|
||||||
margin: 0 5px 0 0;
|
|
||||||
width: 107px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bolder {
|
|
||||||
font-weight: bolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.clear-both {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fas, .fab {
|
|
||||||
color: #dbc40d;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 320px) {
|
|
||||||
body {
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
ivatar/static/css/tortin.css
Normal file
1
ivatar/static/css/tortin.css
Normal file
File diff suppressed because one or more lines are too long
313
ivatar/static/css/tortin.less
Normal file
313
ivatar/static/css/tortin.less
Normal file
@@ -0,0 +1,313 @@
|
|||||||
|
@lab-blue:#36b7d7;
|
||||||
|
@lab-blue-light:#d5f0f7;
|
||||||
|
@lab-green:#3aa850;
|
||||||
|
@lab-green-light:#4bd268;
|
||||||
|
@lab-red:#f7645e;
|
||||||
|
@lab-black:#525252;
|
||||||
|
@lab-grey:#888888;
|
||||||
|
@lab-grey-light:#dddddd;
|
||||||
|
@lab-grey-lighter:#f5f5f5;
|
||||||
|
@lab-libravatar:#f9711f;
|
||||||
|
@lab-font:'Source Sans Pro',Helvetica,Arial,sans-serif;
|
||||||
|
@lab-font-bold:600;
|
||||||
|
@lab-font-thin:200;
|
||||||
|
@bg-hero:@lab-blue;
|
||||||
|
body {
|
||||||
|
font-family: @lab-font;
|
||||||
|
color: @lab-black;
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
border-bottom-width: 3px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
text-transform: uppercase;
|
||||||
|
background: @bg-hero;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
-webkit-transition: all 0.3s;
|
||||||
|
-moz-transition: all 0.3s;
|
||||||
|
-ms-transition: all 0.3s;
|
||||||
|
transition: all 0.3s;
|
||||||
|
&.btn-default {
|
||||||
|
color: lighten(@bg-hero, 10%);
|
||||||
|
border-color: lighten(@bg-hero, 10%);
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
&.btn-primary {
|
||||||
|
border-color: darken(@bg-hero, 15%);
|
||||||
|
}
|
||||||
|
&:hover, &:active, &:focus {
|
||||||
|
background: none;
|
||||||
|
border-color: darken(@bg-hero, 10%);
|
||||||
|
color: darken(@bg-hero, 10%);
|
||||||
|
&:after {
|
||||||
|
top: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
z-index: -1;
|
||||||
|
width: 150%;
|
||||||
|
height: 200%;
|
||||||
|
top: -190%;
|
||||||
|
left: 50%;
|
||||||
|
background: lighten(@bg-hero, 20%);
|
||||||
|
-webkit-transform: translateX(-50%) translateY(-50%) skew(0,5deg);
|
||||||
|
-moz-transform: translateX(-50%) translateY(-50%) skew(0,5deg);
|
||||||
|
-ms-transform: translateX(-50%) translateY(-50%) skew(0,5deg);
|
||||||
|
transform: translateX(-50%) translateY(-50%) skew(0,5deg);
|
||||||
|
-webkit-transition: all 0.5s ease-out;
|
||||||
|
-moz-transition: all 0.5s ease-out;
|
||||||
|
-ms-transition: all 0.5s ease-out;
|
||||||
|
transition: all 0.5s ease-out;
|
||||||
|
}
|
||||||
|
&.btn-block {
|
||||||
|
&:after {
|
||||||
|
height: 250%;
|
||||||
|
width: 200%;
|
||||||
|
-webkit-transform: translateX(-50%) translateY(-50%) skew(0,2deg);
|
||||||
|
-moz-transform: translateX(-50%) translateY(-50%) skew(0,2deg);
|
||||||
|
-ms-transform: translateX(-50%) translateY(-50%) skew(0,2deg);
|
||||||
|
transform: translateX(-50%) translateY(-50%) skew(0,2deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.hero {
|
||||||
|
background-color: @bg-hero;
|
||||||
|
color: #fff;
|
||||||
|
padding: 90px 0 40px;
|
||||||
|
h1 {
|
||||||
|
font-weight: @lab-font-bold;
|
||||||
|
font-size: 6em;
|
||||||
|
color: rgba(255,255,255,.5);
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-weight: @lab-font-thin;
|
||||||
|
font-size: 30px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
small {
|
||||||
|
color: rgba(0,0,0,.4);
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
|
&.btn-default {
|
||||||
|
color: lighten(@bg-hero, 22%);
|
||||||
|
border-color: lighten(@bg-hero, 22%);
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
&.btn-primary {
|
||||||
|
border-color: #fff;
|
||||||
|
}
|
||||||
|
&:hover, &:active, &:focus {
|
||||||
|
border-color: #fff;
|
||||||
|
color: darken(@bg-hero, 20%);
|
||||||
|
}
|
||||||
|
&:after {
|
||||||
|
background: rgba(255,255,255,.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
position: relative;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.social {
|
||||||
|
background-color: @bg-hero;
|
||||||
|
padding: 30px 0 140px;
|
||||||
|
ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
li {
|
||||||
|
float: left;
|
||||||
|
margin-right: 15px;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.clipper, .clipper-footer {
|
||||||
|
background-color: #fff;
|
||||||
|
height: 110px;
|
||||||
|
width: 100%;
|
||||||
|
position: relative;
|
||||||
|
top: -40px;
|
||||||
|
-webkit-transform: skew(0,2deg);
|
||||||
|
-moz-transform: skew(0,2deg);
|
||||||
|
-ms-transform: skew(0,2deg);
|
||||||
|
transform: skew(0,2deg);
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.clipper-footer {top: 0;}
|
||||||
|
section.content {
|
||||||
|
position: relative;
|
||||||
|
top: -100px;
|
||||||
|
margin-bottom: -100px;
|
||||||
|
z-index: 10;
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
color: darken(@bg-hero, 10%);
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-weight: @lab-font-thin;
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
section {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
& .container > hr {
|
||||||
|
-webkit-transform: skew(0,2deg);
|
||||||
|
-moz-transform: skew(0,2deg);
|
||||||
|
-ms-transform: skew(0,2deg);
|
||||||
|
transform: skew(0,2deg);
|
||||||
|
margin-top: 80px;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
footer {
|
||||||
|
background-color: @lab-grey-light;
|
||||||
|
color: @lab-grey;
|
||||||
|
padding: 100px 0 40px;
|
||||||
|
margin-top: -40px;
|
||||||
|
.pull-left {margin-right: 20px;}
|
||||||
|
.logo {
|
||||||
|
float: left;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-top: -8px;
|
||||||
|
.circle{
|
||||||
|
stroke: @lab-grey;
|
||||||
|
stroke-width: 7;
|
||||||
|
fill: none;
|
||||||
|
}
|
||||||
|
.polygon{fill: @lab-grey;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.hero {
|
||||||
|
padding: 50px 0 30px;
|
||||||
|
h1 {
|
||||||
|
font-size: 4em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.social {
|
||||||
|
padding: 30px 0 100px;
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
section.content {
|
||||||
|
section {
|
||||||
|
margin-bottom: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.color {
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: 50%;
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
&.blue {background-color: @lab-blue;}
|
||||||
|
&.green {background-color: @lab-green;}
|
||||||
|
&.red {background-color: @lab-red;}
|
||||||
|
&.black {background-color: @lab-black;}
|
||||||
|
}
|
||||||
|
.navbar-tortin {
|
||||||
|
border:0;
|
||||||
|
background-color:@bg-hero;
|
||||||
|
color:#FFFFFF;
|
||||||
|
border-radius:0;
|
||||||
|
}
|
||||||
|
.form-control {
|
||||||
|
border-bottom-width: 3px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
-webkit-transition: all 0.3s;
|
||||||
|
-moz-transition: all 0.3s;
|
||||||
|
-ms-transition: all 0.3s;
|
||||||
|
transition: all 0.3s;
|
||||||
|
border-color: lighten(@bg-hero, 10%);
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
.form-control:focus {
|
||||||
|
border-color:darken(@bg-hero,10%);
|
||||||
|
box-shadow:none;
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-brand,.navbar-tortin .navbar-text,.navbar-tortin .navbar-nav > li > a,.navbar-tortin .navbar-link,.navbar-tortin .btn-link {
|
||||||
|
color:#FFFFFF;
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-nav > .active > a,.navbar-tortin .navbar-nav > .active > a:focus,.navbar-tortin .navbar-nav > .active > a:hover,.navbar-tortin .navbar-nav > li > a:focus,.navbar-tortin .navbar-nav > li > a:hover,.navbar-tortin .navbar-link:hover,.navbar-tortin .btn-link:focus,.navbar-tortin .btn-link:hover,.navbar-tortin .navbar-nav > .open > a,.navbar-tortin .navbar-nav > .open > a:focus,.navbar-tortin .navbar-nav > .open > a:hover {
|
||||||
|
background-color:darken(@bg-hero, 10%);
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-toggle {
|
||||||
|
border-color:#FFFFFF;
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-toggle:hover {
|
||||||
|
background-color:#FFFFFF;
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-toggle .icon-bar {
|
||||||
|
background-color:#FFFFFF;
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-toggle:hover .icon-bar {
|
||||||
|
background-color:@bg-hero;
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-collapse, .navbar-tortin .navbar-form {
|
||||||
|
border:0;
|
||||||
|
}
|
||||||
|
@media (max-width:767px) {
|
||||||
|
.navbar-tortin .navbar-nav .open .dropdown-menu > li > a {
|
||||||
|
color:#FFFFFF
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-nav .open .dropdown-menu > li > a:hover {
|
||||||
|
background-color:darken(@bg-hero, 10%);
|
||||||
|
}
|
||||||
|
.navbar-tortin .navbar-nav .open .dropdown-menu > .active > a, .navbar-tortin .navbar-nav .open .dropdown-menu > .active > a:focus,
|
||||||
|
.navbar-tortin .navbar-nav .open .dropdown-menu > .active > a:hover {
|
||||||
|
background-color:darken(@bg-hero, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.panel-tortin {
|
||||||
|
border-color:@bg-hero;
|
||||||
|
border-bottom-width: 3px;
|
||||||
|
}
|
||||||
|
.panel-tortin > .panel-heading {
|
||||||
|
color:#fff;
|
||||||
|
background-color:@bg-hero;
|
||||||
|
border-color:@bg-hero;
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
}
|
||||||
|
.panel-tortin > .panel-heading + .panel-collapse > .panel-body {
|
||||||
|
border-top-color:@bg-hero;
|
||||||
|
}
|
||||||
|
.panel-tortin > .panel-heading .badge {
|
||||||
|
color:@bg-hero;
|
||||||
|
background-color:#fff;
|
||||||
|
}
|
||||||
|
.panel-tortin > .panel-footer + .panel-collapse > .panel-body {
|
||||||
|
border-bottom-color:@bg-hero;
|
||||||
|
}
|
||||||
|
.alert.alert-danger {
|
||||||
|
background-color:#FFFFFF;
|
||||||
|
color:@lab-red;
|
||||||
|
border-color:@lab-red;
|
||||||
|
border-bottom-width: 3px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.input-group-addon {
|
||||||
|
border-bottom-width: 3px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
border-color: lighten(@bg-hero, 10%);
|
||||||
|
background: none;
|
||||||
|
width:auto;
|
||||||
|
height:36px;
|
||||||
|
}
|
||||||
BIN
ivatar/static/fonts/Source-Sans-Pro.eot
Normal file
BIN
ivatar/static/fonts/Source-Sans-Pro.eot
Normal file
Binary file not shown.
5392
ivatar/static/fonts/Source-Sans-Pro.svg
Normal file
5392
ivatar/static/fonts/Source-Sans-Pro.svg
Normal file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 421 KiB |
BIN
ivatar/static/fonts/Source-Sans-Pro.woff
Normal file
BIN
ivatar/static/fonts/Source-Sans-Pro.woff
Normal file
Binary file not shown.
BIN
ivatar/static/fonts/fontawesome-webfont.eot
Normal file
BIN
ivatar/static/fonts/fontawesome-webfont.eot
Normal file
Binary file not shown.
2671
ivatar/static/fonts/fontawesome-webfont.svg
Normal file
2671
ivatar/static/fonts/fontawesome-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 434 KiB |
BIN
ivatar/static/fonts/fontawesome-webfont.ttf
Normal file
BIN
ivatar/static/fonts/fontawesome-webfont.ttf
Normal file
Binary file not shown.
BIN
ivatar/static/fonts/fontawesome-webfont.woff
Normal file
BIN
ivatar/static/fonts/fontawesome-webfont.woff
Normal file
Binary file not shown.
BIN
ivatar/static/fonts/fontawesome-webfont.woff2
Normal file
BIN
ivatar/static/fonts/fontawesome-webfont.woff2
Normal file
Binary file not shown.
BIN
ivatar/static/fonts/montserrat-bold-webfont.eot
Executable file
BIN
ivatar/static/fonts/montserrat-bold-webfont.eot
Executable file
Binary file not shown.
1462
ivatar/static/fonts/montserrat-bold-webfont.svg
Executable file
1462
ivatar/static/fonts/montserrat-bold-webfont.svg
Executable file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 89 KiB |
BIN
ivatar/static/fonts/montserrat-bold-webfont.ttf
Executable file
BIN
ivatar/static/fonts/montserrat-bold-webfont.ttf
Executable file
Binary file not shown.
BIN
ivatar/static/fonts/montserrat-bold-webfont.woff
Executable file
BIN
ivatar/static/fonts/montserrat-bold-webfont.woff
Executable file
Binary file not shown.
BIN
ivatar/static/fonts/montserrat-bold-webfont.woff2
Executable file
BIN
ivatar/static/fonts/montserrat-bold-webfont.woff2
Executable file
Binary file not shown.
BIN
ivatar/static/fonts/montserrat-regular-webfont.eot
Executable file
BIN
ivatar/static/fonts/montserrat-regular-webfont.eot
Executable file
Binary file not shown.
1317
ivatar/static/fonts/montserrat-regular-webfont.svg
Executable file
1317
ivatar/static/fonts/montserrat-regular-webfont.svg
Executable file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 85 KiB |
BIN
ivatar/static/fonts/montserrat-regular-webfont.ttf
Executable file
BIN
ivatar/static/fonts/montserrat-regular-webfont.ttf
Executable file
Binary file not shown.
BIN
ivatar/static/fonts/montserrat-regular-webfont.woff
Executable file
BIN
ivatar/static/fonts/montserrat-regular-webfont.woff
Executable file
Binary file not shown.
BIN
ivatar/static/fonts/montserrat-regular-webfont.woff2
Executable file
BIN
ivatar/static/fonts/montserrat-regular-webfont.woff2
Executable file
Binary file not shown.
7
ivatar/static/js/bootstrap-4.1.1.min.js
vendored
7
ivatar/static/js/bootstrap-4.1.1.min.js
vendored
File diff suppressed because one or more lines are too long
1
ivatar/static/js/bootstrap.min.js
vendored
1
ivatar/static/js/bootstrap.min.js
vendored
@@ -1 +0,0 @@
|
|||||||
bootstrap-4.1.1.min.js
|
|
||||||
7
ivatar/static/js/bootstrap.min.js
vendored
Normal file
7
ivatar/static/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
5
ivatar/static/js/popper-1.14.3.min.js
vendored
5
ivatar/static/js/popper-1.14.3.min.js
vendored
File diff suppressed because one or more lines are too long
1
ivatar/static/js/popper.min.js
vendored
1
ivatar/static/js/popper.min.js
vendored
@@ -1 +0,0 @@
|
|||||||
popper-1.14.3.min.js
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,845 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Line Awesome 1.1.0 by @icons_8 - https://icons8.com/line-awesome
|
|
||||||
* License - https://icons8.com/good-boy-license/ (Font: SIL OFL 1.1, CSS: MIT License)
|
|
||||||
*
|
|
||||||
* Made with love by Icons8 [ https://icons8.com/ ] using FontCustom [ https://github.com/FontCustom/fontcustom ]
|
|
||||||
*
|
|
||||||
* Contacts:
|
|
||||||
* [ https://icons8.com/contact ]
|
|
||||||
*
|
|
||||||
* Follow Icon8 on
|
|
||||||
* Twitter [ https://twitter.com/icons_8 ]
|
|
||||||
* Facebook [ https://www.facebook.com/Icons8 ]
|
|
||||||
* Google+ [ https://plus.google.com/+Icons8 ]
|
|
||||||
* GitHub [ https://github.com/icons8 ]
|
|
||||||
*/
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "FontAwesome";
|
|
||||||
src: url("../fonts/line-awesome.eot?v=1.1.");
|
|
||||||
src: url("../fonts/line-awesome.eot??v=1.1.#iefix") format("embedded-opentype"),
|
|
||||||
url("../fonts/line-awesome.woff2?v=1.1.") format("woff2"),
|
|
||||||
url("../fonts/line-awesome.woff?v=1.1.") format("woff"),
|
|
||||||
url("../fonts/line-awesome.ttf?v=1.1.") format("truetype"),
|
|
||||||
url("../fonts/line-awesome.svg?v=1.1.#fa") format("svg");
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
|
||||||
@font-face {
|
|
||||||
font-family: "FontAwesome";
|
|
||||||
src: url("../fonts/line-awesome.svg?v=1.1.#fa") format("svg");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Thanks to http://fontawesome.io @fontawesome and @davegandy */
|
|
||||||
.fa {
|
|
||||||
display: inline-block;
|
|
||||||
font: normal normal normal 14px/1 "FontAwesome";
|
|
||||||
font-size: inherit;
|
|
||||||
text-decoration: inherit;
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
text-transform: none;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
font-smoothing: antialiased;
|
|
||||||
}
|
|
||||||
/* makes the font 33% larger relative to the icon container */
|
|
||||||
.fa-lg {
|
|
||||||
font-size: 1.33333333em;
|
|
||||||
line-height: 0.75em;
|
|
||||||
vertical-align: -15%;
|
|
||||||
}
|
|
||||||
.fa-2x {
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
.fa-3x {
|
|
||||||
font-size: 3em;
|
|
||||||
}
|
|
||||||
.fa-4x {
|
|
||||||
font-size: 4em;
|
|
||||||
}
|
|
||||||
.fa-5x {
|
|
||||||
font-size: 5em;
|
|
||||||
}
|
|
||||||
.fa-fw {
|
|
||||||
width: 1.28571429em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.fa-ul {
|
|
||||||
padding-left: 0;
|
|
||||||
margin-left: 2.14285714em;
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
.fa-ul > li {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.fa-li {
|
|
||||||
position: absolute;
|
|
||||||
left: -2.14285714em;
|
|
||||||
width: 2.14285714em;
|
|
||||||
top: 0.14285714em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.fa-li.fa-lg {
|
|
||||||
left: -1.85714286em;
|
|
||||||
}
|
|
||||||
.fa-border {
|
|
||||||
padding: .2em .25em .15em;
|
|
||||||
border: solid 0.08em #eeeeee;
|
|
||||||
border-radius: .1em;
|
|
||||||
}
|
|
||||||
.pull-right {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
.pull-left {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.fa.pull-left {
|
|
||||||
margin-right: .3em;
|
|
||||||
}
|
|
||||||
.fa.pull-right {
|
|
||||||
margin-left: .3em;
|
|
||||||
}
|
|
||||||
.fa-spin {
|
|
||||||
-webkit-animation: fa-spin 2s infinite linear;
|
|
||||||
animation: fa-spin 2s infinite linear;
|
|
||||||
}
|
|
||||||
@-webkit-keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.fa-rotate-90 {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
|
|
||||||
-webkit-transform: rotate(90deg);
|
|
||||||
-ms-transform: rotate(90deg);
|
|
||||||
transform: rotate(90deg);
|
|
||||||
}
|
|
||||||
.fa-rotate-180 {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
|
|
||||||
-webkit-transform: rotate(180deg);
|
|
||||||
-ms-transform: rotate(180deg);
|
|
||||||
transform: rotate(180deg);
|
|
||||||
}
|
|
||||||
.fa-rotate-270 {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
|
|
||||||
-webkit-transform: rotate(270deg);
|
|
||||||
-ms-transform: rotate(270deg);
|
|
||||||
transform: rotate(270deg);
|
|
||||||
}
|
|
||||||
.fa-flip-horizontal {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
|
|
||||||
-webkit-transform: scale(-1, 1);
|
|
||||||
-ms-transform: scale(-1, 1);
|
|
||||||
transform: scale(-1, 1);
|
|
||||||
}
|
|
||||||
.fa-flip-vertical {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
|
|
||||||
-webkit-transform: scale(1, -1);
|
|
||||||
-ms-transform: scale(1, -1);
|
|
||||||
transform: scale(1, -1);
|
|
||||||
}
|
|
||||||
:root .fa-rotate-90,
|
|
||||||
:root .fa-rotate-180,
|
|
||||||
:root .fa-rotate-270,
|
|
||||||
:root .fa-flip-horizontal,
|
|
||||||
:root .fa-flip-vertical {
|
|
||||||
filter: none;
|
|
||||||
}
|
|
||||||
.fa-stack {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
width: 2em;
|
|
||||||
height: 2em;
|
|
||||||
line-height: 2em;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.fa-stack-1x,
|
|
||||||
.fa-stack-2x {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.fa-stack-1x {
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
.fa-stack-2x {
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
.fa-inverse {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
/* Thanks to http://fontawesome.io @fontawesome and @davegandy */
|
|
||||||
|
|
||||||
.fa-500px:before { content: "\f100"; }
|
|
||||||
.fa-adjust:before { content: "\f101"; }
|
|
||||||
.fa-adn:before { content: "\f102"; }
|
|
||||||
.fa-align-center:before { content: "\f103"; }
|
|
||||||
.fa-align-justify:before { content: "\f104"; }
|
|
||||||
.fa-align-left:before { content: "\f105"; }
|
|
||||||
.fa-align-right:before { content: "\f106"; }
|
|
||||||
.fa-amazon:before { content: "\f107"; }
|
|
||||||
.fa-ambulance:before { content: "\f108"; }
|
|
||||||
.fa-anchor:before { content: "\f109"; }
|
|
||||||
.fa-android:before { content: "\f10a"; }
|
|
||||||
.fa-angellist:before { content: "\f10b"; }
|
|
||||||
.fa-angle-double-down:before { content: "\f10c"; }
|
|
||||||
.fa-angle-double-left:before { content: "\f10d"; }
|
|
||||||
.fa-angle-double-right:before { content: "\f10e"; }
|
|
||||||
.fa-angle-double-up:before { content: "\f10f"; }
|
|
||||||
.fa-angle-down:before { content: "\f110"; }
|
|
||||||
.fa-angle-left:before { content: "\f111"; }
|
|
||||||
.fa-angle-right:before { content: "\f112"; }
|
|
||||||
.fa-angle-up:before { content: "\f113"; }
|
|
||||||
.fa-apple:before { content: "\f114"; }
|
|
||||||
.fa-archive:before { content: "\f115"; }
|
|
||||||
.fa-area-chart:before { content: "\f116"; }
|
|
||||||
.fa-arrow-circle-down:before { content: "\f117"; }
|
|
||||||
.fa-arrow-circle-left:before { content: "\f118"; }
|
|
||||||
.fa-arrow-circle-o-down:before { content: "\f119"; }
|
|
||||||
.fa-arrow-circle-o-left:before { content: "\f11a"; }
|
|
||||||
.fa-arrow-circle-o-right:before { content: "\f11b"; }
|
|
||||||
.fa-arrow-circle-o-up:before { content: "\f11c"; }
|
|
||||||
.fa-arrow-circle-right:before { content: "\f11d"; }
|
|
||||||
.fa-arrow-circle-up:before { content: "\f11e"; }
|
|
||||||
.fa-arrow-down:before { content: "\f11f"; }
|
|
||||||
.fa-arrow-left:before { content: "\f120"; }
|
|
||||||
.fa-arrow-right:before { content: "\f121"; }
|
|
||||||
.fa-arrow-up:before { content: "\f122"; }
|
|
||||||
.fa-arrows:before { content: "\f123"; }
|
|
||||||
.fa-arrows-alt:before { content: "\f124"; }
|
|
||||||
.fa-arrows-h:before { content: "\f125"; }
|
|
||||||
.fa-arrows-v:before { content: "\f126"; }
|
|
||||||
.fa-asterisk:before { content: "\f127"; }
|
|
||||||
.fa-at:before { content: "\f128"; }
|
|
||||||
.fa-automobile:before { content: "\f129"; }
|
|
||||||
.fa-backward:before { content: "\f12a"; }
|
|
||||||
.fa-balance-scale:before { content: "\f12b"; }
|
|
||||||
.fa-ban:before { content: "\f12c"; }
|
|
||||||
.fa-bank:before { content: "\f12d"; }
|
|
||||||
.fa-bar-chart:before { content: "\f12e"; }
|
|
||||||
.fa-bar-chart-o:before { content: "\f12f"; }
|
|
||||||
.fa-barcode:before { content: "\f130"; }
|
|
||||||
.fa-bars:before { content: "\f131"; }
|
|
||||||
.fa-battery-0:before { content: "\f132"; }
|
|
||||||
.fa-battery-1:before { content: "\f133"; }
|
|
||||||
.fa-battery-2:before { content: "\f134"; }
|
|
||||||
.fa-battery-3:before { content: "\f135"; }
|
|
||||||
.fa-battery-4:before { content: "\f136"; }
|
|
||||||
.fa-battery-empty:before { content: "\f137"; }
|
|
||||||
.fa-battery-full:before { content: "\f138"; }
|
|
||||||
.fa-battery-half:before { content: "\f139"; }
|
|
||||||
.fa-battery-quarter:before { content: "\f13a"; }
|
|
||||||
.fa-battery-three-quarters:before { content: "\f13b"; }
|
|
||||||
.fa-bed:before { content: "\f13c"; }
|
|
||||||
.fa-beer:before { content: "\f13d"; }
|
|
||||||
.fa-behance:before { content: "\f13e"; }
|
|
||||||
.fa-behance-square:before { content: "\f13f"; }
|
|
||||||
.fa-bell:before { content: "\f140"; }
|
|
||||||
.fa-bell-o:before { content: "\f141"; }
|
|
||||||
.fa-bell-slash:before { content: "\f142"; }
|
|
||||||
.fa-bell-slash-o:before { content: "\f143"; }
|
|
||||||
.fa-bicycle:before { content: "\f144"; }
|
|
||||||
.fa-binoculars:before { content: "\f145"; }
|
|
||||||
.fa-birthday-cake:before { content: "\f146"; }
|
|
||||||
.fa-bitbucket:before { content: "\f147"; }
|
|
||||||
.fa-bitbucket-square:before { content: "\f148"; }
|
|
||||||
.fa-bitcoin:before { content: "\f149"; }
|
|
||||||
.fa-black-tie:before { content: "\f14a"; }
|
|
||||||
.fa-bold:before { content: "\f14b"; }
|
|
||||||
.fa-bolt:before { content: "\f14c"; }
|
|
||||||
.fa-bomb:before { content: "\f14d"; }
|
|
||||||
.fa-book:before { content: "\f14e"; }
|
|
||||||
.fa-bookmark:before { content: "\f14f"; }
|
|
||||||
.fa-bookmark-o:before { content: "\f150"; }
|
|
||||||
.fa-briefcase:before { content: "\f151"; }
|
|
||||||
.fa-btc:before { content: "\f152"; }
|
|
||||||
.fa-bug:before { content: "\f153"; }
|
|
||||||
.fa-building:before { content: "\f154"; }
|
|
||||||
.fa-building-o:before { content: "\f155"; }
|
|
||||||
.fa-bullhorn:before { content: "\f156"; }
|
|
||||||
.fa-bullseye:before { content: "\f157"; }
|
|
||||||
.fa-bus:before { content: "\f158"; }
|
|
||||||
.fa-buysellads:before { content: "\f159"; }
|
|
||||||
.fa-cab:before { content: "\f15a"; }
|
|
||||||
.fa-calculator:before { content: "\f15b"; }
|
|
||||||
.fa-calendar:before { content: "\f15c"; }
|
|
||||||
.fa-calendar-check-o:before { content: "\f15d"; }
|
|
||||||
.fa-calendar-minus-o:before { content: "\f15e"; }
|
|
||||||
.fa-calendar-o:before { content: "\f15f"; }
|
|
||||||
.fa-calendar-plus-o:before { content: "\f160"; }
|
|
||||||
.fa-calendar-times-o:before { content: "\f161"; }
|
|
||||||
.fa-camera:before { content: "\f162"; }
|
|
||||||
.fa-camera-retro:before { content: "\f163"; }
|
|
||||||
.fa-car:before { content: "\f164"; }
|
|
||||||
.fa-caret-down:before { content: "\f165"; }
|
|
||||||
.fa-caret-left:before { content: "\f166"; }
|
|
||||||
.fa-caret-right:before { content: "\f167"; }
|
|
||||||
.fa-caret-square-o-down:before, .fa-toggle-down:before { content: "\f168"; }
|
|
||||||
.fa-caret-square-o-left:before, .fa-toggle-left:before { content: "\f169"; }
|
|
||||||
.fa-caret-square-o-right:before, .fa-toggle-right:before { content: "\f16a"; }
|
|
||||||
.fa-caret-square-o-up:before, .fa-toggle-up:before { content: "\f16b"; }
|
|
||||||
.fa-caret-up:before { content: "\f16c"; }
|
|
||||||
.fa-cart-arrow-down:before { content: "\f16d"; }
|
|
||||||
.fa-cart-plus:before { content: "\f16e"; }
|
|
||||||
.fa-cc:before { content: "\f16f"; }
|
|
||||||
.fa-cc-amex:before { content: "\f170"; }
|
|
||||||
.fa-cc-diners-club:before { content: "\f171"; }
|
|
||||||
.fa-cc-discover:before { content: "\f172"; }
|
|
||||||
.fa-cc-jcb:before { content: "\f173"; }
|
|
||||||
.fa-cc-mastercard:before { content: "\f174"; }
|
|
||||||
.fa-cc-paypal:before { content: "\f175"; }
|
|
||||||
.fa-cc-stripe:before { content: "\f176"; }
|
|
||||||
.fa-cc-visa:before { content: "\f177"; }
|
|
||||||
.fa-certificate:before { content: "\f178"; }
|
|
||||||
.fa-chain:before { content: "\f179"; }
|
|
||||||
.fa-chain-broken:before { content: "\f17a"; }
|
|
||||||
.fa-check:before { content: "\f17b"; }
|
|
||||||
.fa-check-circle:before { content: "\f17c"; }
|
|
||||||
.fa-check-circle-o:before { content: "\f17d"; }
|
|
||||||
.fa-check-square:before { content: "\f17e"; }
|
|
||||||
.fa-check-square-o:before { content: "\f17f"; }
|
|
||||||
.fa-chevron-circle-down:before { content: "\f180"; }
|
|
||||||
.fa-chevron-circle-left:before { content: "\f181"; }
|
|
||||||
.fa-chevron-circle-right:before { content: "\f182"; }
|
|
||||||
.fa-chevron-circle-up:before { content: "\f183"; }
|
|
||||||
.fa-chevron-down:before { content: "\f184"; }
|
|
||||||
.fa-chevron-left:before { content: "\f185"; }
|
|
||||||
.fa-chevron-right:before { content: "\f186"; }
|
|
||||||
.fa-chevron-up:before { content: "\f187"; }
|
|
||||||
.fa-child:before { content: "\f188"; }
|
|
||||||
.fa-chrome:before { content: "\f189"; }
|
|
||||||
.fa-circle:before { content: "\f18a"; }
|
|
||||||
.fa-circle-o:before { content: "\f18b"; }
|
|
||||||
.fa-circle-o-notch:before { content: "\f18c"; }
|
|
||||||
.fa-circle-thin:before { content: "\f18d"; }
|
|
||||||
.fa-clipboard:before { content: "\f18e"; }
|
|
||||||
.fa-clock-o:before { content: "\f18f"; }
|
|
||||||
.fa-clone:before { content: "\f190"; }
|
|
||||||
.fa-close:before { content: "\f191"; }
|
|
||||||
.fa-cloud:before { content: "\f192"; }
|
|
||||||
.fa-cloud-download:before { content: "\f193"; }
|
|
||||||
.fa-cloud-upload:before { content: "\f194"; }
|
|
||||||
.fa-cny:before { content: "\f195"; }
|
|
||||||
.fa-code:before { content: "\f196"; }
|
|
||||||
.fa-code-fork:before { content: "\f197"; }
|
|
||||||
.fa-codepen:before { content: "\f198"; }
|
|
||||||
.fa-coffee:before { content: "\f199"; }
|
|
||||||
.fa-cog:before { content: "\f19a"; }
|
|
||||||
.fa-cogs:before { content: "\f19b"; }
|
|
||||||
.fa-columns:before { content: "\f19c"; }
|
|
||||||
.fa-comment:before { content: "\f19d"; }
|
|
||||||
.fa-comment-o:before { content: "\f19e"; }
|
|
||||||
.fa-commenting:before { content: "\f19f"; }
|
|
||||||
.fa-commenting-o:before { content: "\f1a0"; }
|
|
||||||
.fa-comments:before { content: "\f1a1"; }
|
|
||||||
.fa-comments-o:before { content: "\f1a2"; }
|
|
||||||
.fa-compass:before { content: "\f1a3"; }
|
|
||||||
.fa-compress:before { content: "\f1a4"; }
|
|
||||||
.fa-connectdevelop:before { content: "\f1a5"; }
|
|
||||||
.fa-contao:before { content: "\f1a6"; }
|
|
||||||
.fa-copy:before { content: "\f1a7"; }
|
|
||||||
.fa-copyright:before { content: "\f1a8"; }
|
|
||||||
.fa-creative-commons:before { content: "\f1a9"; }
|
|
||||||
.fa-credit-card:before { content: "\f1aa"; }
|
|
||||||
.fa-crop:before { content: "\f1ab"; }
|
|
||||||
.fa-crosshairs:before { content: "\f1ac"; }
|
|
||||||
.fa-css3:before { content: "\f1ad"; }
|
|
||||||
.fa-cube:before { content: "\f1ae"; }
|
|
||||||
.fa-cubes:before { content: "\f1af"; }
|
|
||||||
.fa-cut:before { content: "\f1b0"; }
|
|
||||||
.fa-cutlery:before { content: "\f1b1"; }
|
|
||||||
.fa-dashboard:before { content: "\f1b2"; }
|
|
||||||
.fa-dashcube:before { content: "\f1b3"; }
|
|
||||||
.fa-database:before { content: "\f1b4"; }
|
|
||||||
.fa-dedent:before { content: "\f1b5"; }
|
|
||||||
.fa-delicious:before { content: "\f1b6"; }
|
|
||||||
.fa-desktop:before { content: "\f1b7"; }
|
|
||||||
.fa-deviantart:before { content: "\f1b8"; }
|
|
||||||
.fa-diamond:before { content: "\f1b9"; }
|
|
||||||
.fa-digg:before { content: "\f1ba"; }
|
|
||||||
.fa-dollar:before { content: "\f1bb"; }
|
|
||||||
.fa-dot-circle-o:before { content: "\f1bc"; }
|
|
||||||
.fa-download:before { content: "\f1bd"; }
|
|
||||||
.fa-dribbble:before { content: "\f1be"; }
|
|
||||||
.fa-dropbox:before { content: "\f1bf"; }
|
|
||||||
.fa-drupal:before { content: "\f1c0"; }
|
|
||||||
.fa-edit:before { content: "\f1c1"; }
|
|
||||||
.fa-eject:before { content: "\f1c2"; }
|
|
||||||
.fa-ellipsis-h:before { content: "\f1c3"; }
|
|
||||||
.fa-ellipsis-v:before { content: "\f1c4"; }
|
|
||||||
.fa-empire:before, .fa-ge:before { content: "\f1c5"; }
|
|
||||||
.fa-envelope:before { content: "\f1c6"; }
|
|
||||||
.fa-envelope-o:before { content: "\f1c7"; }
|
|
||||||
.fa-envelope-square:before { content: "\f1c8"; }
|
|
||||||
.fa-eraser:before { content: "\f1c9"; }
|
|
||||||
.fa-eur:before { content: "\f1ca"; }
|
|
||||||
.fa-euro:before { content: "\f1cb"; }
|
|
||||||
.fa-exchange:before { content: "\f1cc"; }
|
|
||||||
.fa-exclamation:before { content: "\f1cd"; }
|
|
||||||
.fa-exclamation-circle:before { content: "\f1ce"; }
|
|
||||||
.fa-exclamation-triangle:before { content: "\f1cf"; }
|
|
||||||
.fa-expand:before { content: "\f1d0"; }
|
|
||||||
.fa-expeditedssl:before { content: "\f1d1"; }
|
|
||||||
.fa-external-link:before { content: "\f1d2"; }
|
|
||||||
.fa-external-link-square:before { content: "\f1d3"; }
|
|
||||||
.fa-eye:before { content: "\f1d4"; }
|
|
||||||
.fa-eye-slash:before { content: "\f1d5"; }
|
|
||||||
.fa-eyedropper:before { content: "\f1d6"; }
|
|
||||||
.fa-facebook:before, .fa-facebook-f:before { content: "\f1d7"; }
|
|
||||||
.fa-facebook-official:before { content: "\f1d8"; }
|
|
||||||
.fa-facebook-square:before { content: "\f1d9"; }
|
|
||||||
.fa-fast-backward:before { content: "\f1da"; }
|
|
||||||
.fa-fast-forward:before { content: "\f1db"; }
|
|
||||||
.fa-fax:before { content: "\f1dc"; }
|
|
||||||
.fa-female:before { content: "\f1dd"; }
|
|
||||||
.fa-fighter-jet:before { content: "\f1de"; }
|
|
||||||
.fa-file:before { content: "\f1df"; }
|
|
||||||
.fa-file-archive-o:before { content: "\f1e0"; }
|
|
||||||
.fa-file-audio-o:before { content: "\f1e1"; }
|
|
||||||
.fa-file-code-o:before { content: "\f1e2"; }
|
|
||||||
.fa-file-excel-o:before { content: "\f1e3"; }
|
|
||||||
.fa-file-image-o:before { content: "\f1e4"; }
|
|
||||||
.fa-file-movie-o:before { content: "\f1e5"; }
|
|
||||||
.fa-file-o:before { content: "\f1e6"; }
|
|
||||||
.fa-file-pdf-o:before { content: "\f1e7"; }
|
|
||||||
.fa-file-photo-o:before { content: "\f1e8"; }
|
|
||||||
.fa-file-picture-o:before { content: "\f1e9"; }
|
|
||||||
.fa-file-powerpoint-o:before { content: "\f1ea"; }
|
|
||||||
.fa-file-sound-o:before { content: "\f1eb"; }
|
|
||||||
.fa-file-text:before { content: "\f1ec"; }
|
|
||||||
.fa-file-text-o:before { content: "\f1ed"; }
|
|
||||||
.fa-file-video-o:before { content: "\f1ee"; }
|
|
||||||
.fa-file-word-o:before { content: "\f1ef"; }
|
|
||||||
.fa-file-zip-o:before { content: "\f1f0"; }
|
|
||||||
.fa-files-o:before { content: "\f1f1"; }
|
|
||||||
.fa-film:before { content: "\f1f2"; }
|
|
||||||
.fa-filter:before { content: "\f1f3"; }
|
|
||||||
.fa-fire:before { content: "\f1f4"; }
|
|
||||||
.fa-fire-extinguisher:before { content: "\f1f5"; }
|
|
||||||
.fa-firefox:before { content: "\f1f6"; }
|
|
||||||
.fa-flag:before { content: "\f1f7"; }
|
|
||||||
.fa-flag-checkered:before { content: "\f1f8"; }
|
|
||||||
.fa-flag-o:before { content: "\f1f9"; }
|
|
||||||
.fa-flash:before { content: "\f1fa"; }
|
|
||||||
.fa-flask:before { content: "\f1fb"; }
|
|
||||||
.fa-flickr:before { content: "\f1fc"; }
|
|
||||||
.fa-floppy-o:before { content: "\f1fd"; }
|
|
||||||
.fa-folder:before { content: "\f1fe"; }
|
|
||||||
.fa-folder-o:before { content: "\f1ff"; }
|
|
||||||
.fa-folder-open:before { content: "\f200"; }
|
|
||||||
.fa-folder-open-o:before { content: "\f201"; }
|
|
||||||
.fa-font:before { content: "\f202"; }
|
|
||||||
.fa-fonticons:before { content: "\f203"; }
|
|
||||||
.fa-forumbee:before { content: "\f204"; }
|
|
||||||
.fa-forward:before { content: "\f205"; }
|
|
||||||
.fa-foursquare:before { content: "\f206"; }
|
|
||||||
.fa-frown-o:before { content: "\f207"; }
|
|
||||||
.fa-futbol-o:before, .fa-soccer-ball-o:before { content: "\f208"; }
|
|
||||||
.fa-gamepad:before { content: "\f209"; }
|
|
||||||
.fa-gavel:before { content: "\f20a"; }
|
|
||||||
.fa-gbp:before { content: "\f20b"; }
|
|
||||||
.fa-gear:before { content: "\f20c"; }
|
|
||||||
.fa-gears:before { content: "\f20d"; }
|
|
||||||
.fa-genderless:before { content: "\f20e"; }
|
|
||||||
.fa-get-pocket:before { content: "\f20f"; }
|
|
||||||
.fa-gg:before { content: "\f210"; }
|
|
||||||
.fa-gg-circle:before { content: "\f211"; }
|
|
||||||
.fa-gift:before { content: "\f212"; }
|
|
||||||
.fa-git:before { content: "\f213"; }
|
|
||||||
.fa-git-square:before { content: "\f214"; }
|
|
||||||
.fa-github:before { content: "\f215"; }
|
|
||||||
.fa-github-alt:before { content: "\f216"; }
|
|
||||||
.fa-github-square:before { content: "\f217"; }
|
|
||||||
.fa-glass:before { content: "\f218"; }
|
|
||||||
.fa-globe:before { content: "\f219"; }
|
|
||||||
.fa-google:before { content: "\f21a"; }
|
|
||||||
.fa-google-plus:before { content: "\f21b"; }
|
|
||||||
.fa-google-plus-square:before { content: "\f21c"; }
|
|
||||||
.fa-google-wallet:before { content: "\f21d"; }
|
|
||||||
.fa-graduation-cap:before { content: "\f21e"; }
|
|
||||||
.fa-gratipay:before, .fa-gittip:before { content: "\f21f"; }
|
|
||||||
.fa-group:before { content: "\f220"; }
|
|
||||||
.fa-h-square:before { content: "\f221"; }
|
|
||||||
.fa-hacker-news:before { content: "\f222"; }
|
|
||||||
.fa-hand-grab-o:before { content: "\f223"; }
|
|
||||||
.fa-hand-lizard-o:before { content: "\f224"; }
|
|
||||||
.fa-hand-o-down:before { content: "\f225"; }
|
|
||||||
.fa-hand-o-left:before { content: "\f226"; }
|
|
||||||
.fa-hand-o-right:before { content: "\f227"; }
|
|
||||||
.fa-hand-o-up:before { content: "\f228"; }
|
|
||||||
.fa-hand-paper-o:before { content: "\f229"; }
|
|
||||||
.fa-hand-peace-o:before { content: "\f22a"; }
|
|
||||||
.fa-hand-pointer-o:before { content: "\f22b"; }
|
|
||||||
.fa-hand-rock-o:before { content: "\f22c"; }
|
|
||||||
.fa-hand-scissors-o:before { content: "\f22d"; }
|
|
||||||
.fa-hand-spock-o:before { content: "\f22e"; }
|
|
||||||
.fa-hand-stop-o:before { content: "\f22f"; }
|
|
||||||
.fa-hdd-o:before { content: "\f230"; }
|
|
||||||
.fa-header:before { content: "\f231"; }
|
|
||||||
.fa-headphones:before { content: "\f232"; }
|
|
||||||
.fa-heart:before { content: "\f233"; }
|
|
||||||
.fa-heart-o:before { content: "\f234"; }
|
|
||||||
.fa-heartbeat:before { content: "\f235"; }
|
|
||||||
.fa-history:before { content: "\f236"; }
|
|
||||||
.fa-home:before { content: "\f237"; }
|
|
||||||
.fa-hospital-o:before { content: "\f238"; }
|
|
||||||
.fa-hotel:before { content: "\f239"; }
|
|
||||||
.fa-hourglass:before { content: "\f23a"; }
|
|
||||||
.fa-hourglass-1:before { content: "\f23b"; }
|
|
||||||
.fa-hourglass-2:before { content: "\f23c"; }
|
|
||||||
.fa-hourglass-3:before { content: "\f23d"; }
|
|
||||||
.fa-hourglass-end:before { content: "\f23e"; }
|
|
||||||
.fa-hourglass-half:before { content: "\f23f"; }
|
|
||||||
.fa-hourglass-o:before { content: "\f240"; }
|
|
||||||
.fa-hourglass-start:before { content: "\f241"; }
|
|
||||||
.fa-houzz:before { content: "\f242"; }
|
|
||||||
.fa-html5:before { content: "\f243"; }
|
|
||||||
.fa-i-cursor:before { content: "\f244"; }
|
|
||||||
.fa-ils:before { content: "\f245"; }
|
|
||||||
.fa-image:before { content: "\f246"; }
|
|
||||||
.fa-inbox:before { content: "\f247"; }
|
|
||||||
.fa-indent:before { content: "\f248"; }
|
|
||||||
.fa-industry:before { content: "\f249"; }
|
|
||||||
.fa-info:before { content: "\f24a"; }
|
|
||||||
.fa-info-circle:before { content: "\f24b"; }
|
|
||||||
.fa-inr:before { content: "\f24c"; }
|
|
||||||
.fa-instagram:before { content: "\f24d"; }
|
|
||||||
.fa-institution:before { content: "\f24e"; }
|
|
||||||
.fa-internet-explorer:before { content: "\f24f"; }
|
|
||||||
.fa-ioxhost:before { content: "\f250"; }
|
|
||||||
.fa-italic:before { content: "\f251"; }
|
|
||||||
.fa-joomla:before { content: "\f252"; }
|
|
||||||
.fa-jpy:before { content: "\f253"; }
|
|
||||||
.fa-jsfiddle:before { content: "\f254"; }
|
|
||||||
.fa-key:before { content: "\f255"; }
|
|
||||||
.fa-keyboard-o:before { content: "\f256"; }
|
|
||||||
.fa-krw:before { content: "\f257"; }
|
|
||||||
.fa-language:before { content: "\f258"; }
|
|
||||||
.fa-laptop:before { content: "\f259"; }
|
|
||||||
.fa-lastfm:before { content: "\f25a"; }
|
|
||||||
.fa-lastfm-square:before { content: "\f25b"; }
|
|
||||||
.fa-leaf:before { content: "\f25c"; }
|
|
||||||
.fa-leanpub:before { content: "\f25d"; }
|
|
||||||
.fa-legal:before { content: "\f25e"; }
|
|
||||||
.fa-lemon-o:before { content: "\f25f"; }
|
|
||||||
.fa-level-down:before { content: "\f260"; }
|
|
||||||
.fa-level-up:before { content: "\f261"; }
|
|
||||||
.fa-life-bouy:before { content: "\f262"; }
|
|
||||||
.fa-life-buoy:before { content: "\f263"; }
|
|
||||||
.fa-life-ring:before, .fa-support:before { content: "\f264"; }
|
|
||||||
.fa-life-saver:before { content: "\f265"; }
|
|
||||||
.fa-lightbulb-o:before { content: "\f266"; }
|
|
||||||
.fa-line-chart:before { content: "\f267"; }
|
|
||||||
.fa-link:before { content: "\f268"; }
|
|
||||||
.fa-linkedin:before { content: "\f269"; }
|
|
||||||
.fa-linkedin-square:before { content: "\f26a"; }
|
|
||||||
.fa-linux:before { content: "\f26b"; }
|
|
||||||
.fa-list:before { content: "\f26c"; }
|
|
||||||
.fa-list-alt:before { content: "\f26d"; }
|
|
||||||
.fa-list-ol:before { content: "\f26e"; }
|
|
||||||
.fa-list-ul:before { content: "\f26f"; }
|
|
||||||
.fa-location-arrow:before { content: "\f270"; }
|
|
||||||
.fa-lock:before { content: "\f271"; }
|
|
||||||
.fa-long-arrow-down:before { content: "\f272"; }
|
|
||||||
.fa-long-arrow-left:before { content: "\f273"; }
|
|
||||||
.fa-long-arrow-right:before { content: "\f274"; }
|
|
||||||
.fa-long-arrow-up:before { content: "\f275"; }
|
|
||||||
.fa-magic:before { content: "\f276"; }
|
|
||||||
.fa-magnet:before { content: "\f277"; }
|
|
||||||
.fa-mail-forward:before { content: "\f278"; }
|
|
||||||
.fa-mail-reply:before { content: "\f279"; }
|
|
||||||
.fa-mail-reply-all:before { content: "\f27a"; }
|
|
||||||
.fa-male:before { content: "\f27b"; }
|
|
||||||
.fa-map:before { content: "\f27c"; }
|
|
||||||
.fa-map-marker:before { content: "\f27d"; }
|
|
||||||
.fa-map-o:before { content: "\f27e"; }
|
|
||||||
.fa-map-pin:before { content: "\f27f"; }
|
|
||||||
.fa-map-signs:before { content: "\f280"; }
|
|
||||||
.fa-mars:before { content: "\f281"; }
|
|
||||||
.fa-mars-double:before { content: "\f282"; }
|
|
||||||
.fa-mars-stroke:before { content: "\f283"; }
|
|
||||||
.fa-mars-stroke-h:before { content: "\f284"; }
|
|
||||||
.fa-mars-stroke-v:before { content: "\f285"; }
|
|
||||||
.fa-maxcdn:before { content: "\f286"; }
|
|
||||||
.fa-meanpath:before { content: "\f287"; }
|
|
||||||
.fa-medium:before { content: "\f288"; }
|
|
||||||
.fa-medkit:before { content: "\f289"; }
|
|
||||||
.fa-meh-o:before { content: "\f28a"; }
|
|
||||||
.fa-mercury:before { content: "\f28b"; }
|
|
||||||
.fa-microphone:before { content: "\f28c"; }
|
|
||||||
.fa-microphone-slash:before { content: "\f28d"; }
|
|
||||||
.fa-minus:before { content: "\f28e"; }
|
|
||||||
.fa-minus-circle:before { content: "\f28f"; }
|
|
||||||
.fa-minus-square:before { content: "\f290"; }
|
|
||||||
.fa-minus-square-o:before { content: "\f291"; }
|
|
||||||
.fa-mobile:before { content: "\f292"; }
|
|
||||||
.fa-mobile-phone:before { content: "\f293"; }
|
|
||||||
.fa-money:before { content: "\f294"; }
|
|
||||||
.fa-moon-o:before { content: "\f295"; }
|
|
||||||
.fa-mortar-board:before { content: "\f296"; }
|
|
||||||
.fa-motorcycle:before { content: "\f297"; }
|
|
||||||
.fa-mouse-pointer:before { content: "\f298"; }
|
|
||||||
.fa-music:before { content: "\f299"; }
|
|
||||||
.fa-navicon:before { content: "\f29a"; }
|
|
||||||
.fa-neuter:before { content: "\f29b"; }
|
|
||||||
.fa-newspaper-o:before { content: "\f29c"; }
|
|
||||||
.fa-object-group:before { content: "\f29d"; }
|
|
||||||
.fa-object-ungroup:before { content: "\f29e"; }
|
|
||||||
.fa-odnoklassniki:before { content: "\f29f"; }
|
|
||||||
.fa-odnoklassniki-square:before { content: "\f2a0"; }
|
|
||||||
.fa-opencart:before { content: "\f2a1"; }
|
|
||||||
.fa-openid:before { content: "\f2a2"; }
|
|
||||||
.fa-opera:before { content: "\f2a3"; }
|
|
||||||
.fa-optin-monster:before { content: "\f2a4"; }
|
|
||||||
.fa-outdent:before { content: "\f2a5"; }
|
|
||||||
.fa-pagelines:before { content: "\f2a6"; }
|
|
||||||
.fa-paint-brush:before { content: "\f2a7"; }
|
|
||||||
.fa-paper-plane:before, .fa-send:before { content: "\f2a8"; }
|
|
||||||
.fa-paper-plane-o:before, .fa-send-o:before { content: "\f2a9"; }
|
|
||||||
.fa-paperclip:before { content: "\f2aa"; }
|
|
||||||
.fa-paragraph:before { content: "\f2ab"; }
|
|
||||||
.fa-paste:before { content: "\f2ac"; }
|
|
||||||
.fa-pause:before { content: "\f2ad"; }
|
|
||||||
.fa-paw:before { content: "\f2ae"; }
|
|
||||||
.fa-paypal:before { content: "\f2af"; }
|
|
||||||
.fa-pencil:before { content: "\f2b0"; }
|
|
||||||
.fa-pencil-square:before { content: "\f2b1"; }
|
|
||||||
.fa-pencil-square-o:before { content: "\f2b2"; }
|
|
||||||
.fa-phone:before { content: "\f2b3"; }
|
|
||||||
.fa-phone-square:before { content: "\f2b4"; }
|
|
||||||
.fa-photo:before { content: "\f2b5"; }
|
|
||||||
.fa-picture-o:before { content: "\f2b6"; }
|
|
||||||
.fa-pie-chart:before { content: "\f2b7"; }
|
|
||||||
.fa-pied-piper:before { content: "\f2b8"; }
|
|
||||||
.fa-pied-piper-alt:before { content: "\f2b9"; }
|
|
||||||
.fa-pinterest:before { content: "\f2ba"; }
|
|
||||||
.fa-pinterest-p:before { content: "\f2bb"; }
|
|
||||||
.fa-pinterest-square:before { content: "\f2bc"; }
|
|
||||||
.fa-plane:before { content: "\f2bd"; }
|
|
||||||
.fa-play:before { content: "\f2be"; }
|
|
||||||
.fa-play-circle:before { content: "\f2bf"; }
|
|
||||||
.fa-play-circle-o:before { content: "\f2c0"; }
|
|
||||||
.fa-plug:before { content: "\f2c1"; }
|
|
||||||
.fa-plus:before { content: "\f2c2"; }
|
|
||||||
.fa-plus-circle:before { content: "\f2c3"; }
|
|
||||||
.fa-plus-square:before { content: "\f2c4"; }
|
|
||||||
.fa-plus-square-o:before { content: "\f2c5"; }
|
|
||||||
.fa-power-off:before { content: "\f2c6"; }
|
|
||||||
.fa-print:before { content: "\f2c7"; }
|
|
||||||
.fa-puzzle-piece:before { content: "\f2c8"; }
|
|
||||||
.fa-qq:before { content: "\f2c9"; }
|
|
||||||
.fa-qrcode:before { content: "\f2ca"; }
|
|
||||||
.fa-question:before { content: "\f2cb"; }
|
|
||||||
.fa-question-circle:before { content: "\f2cc"; }
|
|
||||||
.fa-quote-left:before { content: "\f2cd"; }
|
|
||||||
.fa-quote-right:before { content: "\f2ce"; }
|
|
||||||
.fa-ra:before { content: "\f2cf"; }
|
|
||||||
.fa-random:before { content: "\f2d0"; }
|
|
||||||
.fa-rebel:before { content: "\f2d1"; }
|
|
||||||
.fa-recycle:before { content: "\f2d2"; }
|
|
||||||
.fa-reddit:before { content: "\f2d3"; }
|
|
||||||
.fa-reddit-square:before { content: "\f2d4"; }
|
|
||||||
.fa-refresh:before { content: "\f2d5"; }
|
|
||||||
.fa-registered:before { content: "\f2d6"; }
|
|
||||||
.fa-renren:before { content: "\f2d7"; }
|
|
||||||
.fa-reorder:before { content: "\f2d8"; }
|
|
||||||
.fa-repeat:before { content: "\f2d9"; }
|
|
||||||
.fa-reply:before { content: "\f2da"; }
|
|
||||||
.fa-reply-all:before { content: "\f2db"; }
|
|
||||||
.fa-retweet:before { content: "\f2dc"; }
|
|
||||||
.fa-rmb:before { content: "\f2dd"; }
|
|
||||||
.fa-road:before { content: "\f2de"; }
|
|
||||||
.fa-rocket:before { content: "\f2df"; }
|
|
||||||
.fa-rotate-left:before { content: "\f2e0"; }
|
|
||||||
.fa-rotate-right:before { content: "\f2e1"; }
|
|
||||||
.fa-rouble:before { content: "\f2e2"; }
|
|
||||||
.fa-rss:before, .fa-feed:before { content: "\f2e3"; }
|
|
||||||
.fa-rss-square:before { content: "\f2e4"; }
|
|
||||||
.fa-rub:before { content: "\f2e5"; }
|
|
||||||
.fa-ruble:before { content: "\f2e6"; }
|
|
||||||
.fa-rupee:before { content: "\f2e7"; }
|
|
||||||
.fa-safari:before { content: "\f2e8"; }
|
|
||||||
.fa-save:before { content: "\f2e9"; }
|
|
||||||
.fa-scissors:before { content: "\f2ea"; }
|
|
||||||
.fa-search:before { content: "\f2eb"; }
|
|
||||||
.fa-search-minus:before { content: "\f2ec"; }
|
|
||||||
.fa-search-plus:before { content: "\f2ed"; }
|
|
||||||
.fa-sellsy:before { content: "\f2ee"; }
|
|
||||||
.fa-server:before { content: "\f2ef"; }
|
|
||||||
.fa-share:before { content: "\f2f0"; }
|
|
||||||
.fa-share-alt:before { content: "\f2f1"; }
|
|
||||||
.fa-share-alt-square:before { content: "\f2f2"; }
|
|
||||||
.fa-share-square:before { content: "\f2f3"; }
|
|
||||||
.fa-share-square-o:before { content: "\f2f4"; }
|
|
||||||
.fa-shekel:before { content: "\f2f5"; }
|
|
||||||
.fa-sheqel:before { content: "\f2f6"; }
|
|
||||||
.fa-shield:before { content: "\f2f7"; }
|
|
||||||
.fa-ship:before { content: "\f2f8"; }
|
|
||||||
.fa-shirtsinbulk:before { content: "\f2f9"; }
|
|
||||||
.fa-shopping-cart:before { content: "\f2fa"; }
|
|
||||||
.fa-sign-in:before { content: "\f2fb"; }
|
|
||||||
.fa-sign-out:before { content: "\f2fc"; }
|
|
||||||
.fa-signal:before { content: "\f2fd"; }
|
|
||||||
.fa-simplybuilt:before { content: "\f2fe"; }
|
|
||||||
.fa-sitemap:before { content: "\f2ff"; }
|
|
||||||
.fa-skyatlas:before { content: "\f300"; }
|
|
||||||
.fa-skype:before { content: "\f301"; }
|
|
||||||
.fa-slack:before { content: "\f302"; }
|
|
||||||
.fa-sliders:before { content: "\f303"; }
|
|
||||||
.fa-slideshare:before { content: "\f304"; }
|
|
||||||
.fa-smile-o:before { content: "\f305"; }
|
|
||||||
.fa-sort:before, .fa-unsorted:before { content: "\f306"; }
|
|
||||||
.fa-sort-alpha-asc:before { content: "\f307"; }
|
|
||||||
.fa-sort-alpha-desc:before { content: "\f308"; }
|
|
||||||
.fa-sort-amount-asc:before { content: "\f309"; }
|
|
||||||
.fa-sort-amount-desc:before { content: "\f30a"; }
|
|
||||||
.fa-sort-asc:before, .fa-sort-up:before { content: "\f30b"; }
|
|
||||||
.fa-sort-desc:before, .fa-sort-down:before { content: "\f30c"; }
|
|
||||||
.fa-sort-numeric-asc:before { content: "\f30d"; }
|
|
||||||
.fa-sort-numeric-desc:before { content: "\f30e"; }
|
|
||||||
.fa-soundcloud:before { content: "\f30f"; }
|
|
||||||
.fa-space-shuttle:before { content: "\f310"; }
|
|
||||||
.fa-spinner:before { content: "\f311"; }
|
|
||||||
.fa-spoon:before { content: "\f312"; }
|
|
||||||
.fa-spotify:before { content: "\f313"; }
|
|
||||||
.fa-square:before { content: "\f314"; }
|
|
||||||
.fa-square-o:before { content: "\f315"; }
|
|
||||||
.fa-stack-exchange:before { content: "\f316"; }
|
|
||||||
.fa-stack-overflow:before { content: "\f317"; }
|
|
||||||
.fa-star:before { content: "\f318"; }
|
|
||||||
.fa-star-half:before { content: "\f319"; }
|
|
||||||
.fa-star-half-o:before, .fa-star-half-full:before, .fa-star-half-empty:before { content: "\f31a"; }
|
|
||||||
.fa-star-o:before { content: "\f31b"; }
|
|
||||||
.fa-steam:before { content: "\f31c"; }
|
|
||||||
.fa-steam-square:before { content: "\f31d"; }
|
|
||||||
.fa-step-backward:before { content: "\f31e"; }
|
|
||||||
.fa-step-forward:before { content: "\f31f"; }
|
|
||||||
.fa-stethoscope:before { content: "\f320"; }
|
|
||||||
.fa-sticky-note:before { content: "\f321"; }
|
|
||||||
.fa-sticky-note-o:before { content: "\f322"; }
|
|
||||||
.fa-stop:before { content: "\f323"; }
|
|
||||||
.fa-street-view:before { content: "\f324"; }
|
|
||||||
.fa-strikethrough:before { content: "\f325"; }
|
|
||||||
.fa-stumbleupon:before { content: "\f326"; }
|
|
||||||
.fa-stumbleupon-circle:before { content: "\f327"; }
|
|
||||||
.fa-subscript:before { content: "\f328"; }
|
|
||||||
.fa-subway:before { content: "\f329"; }
|
|
||||||
.fa-suitcase:before { content: "\f32a"; }
|
|
||||||
.fa-sun-o:before { content: "\f32b"; }
|
|
||||||
.fa-superscript:before { content: "\f32c"; }
|
|
||||||
.fa-table:before { content: "\f32d"; }
|
|
||||||
.fa-tablet:before { content: "\f32e"; }
|
|
||||||
.fa-tachometer:before { content: "\f32f"; }
|
|
||||||
.fa-tag:before { content: "\f330"; }
|
|
||||||
.fa-tags:before { content: "\f331"; }
|
|
||||||
.fa-tasks:before { content: "\f332"; }
|
|
||||||
.fa-taxi:before { content: "\f333"; }
|
|
||||||
.fa-television:before, .fa-tv:before { content: "\f334"; }
|
|
||||||
.fa-tencent-weibo:before { content: "\f335"; }
|
|
||||||
.fa-terminal:before { content: "\f336"; }
|
|
||||||
.fa-text-height:before { content: "\f337"; }
|
|
||||||
.fa-text-width:before { content: "\f338"; }
|
|
||||||
.fa-th:before { content: "\f339"; }
|
|
||||||
.fa-th-large:before { content: "\f33a"; }
|
|
||||||
.fa-th-list:before { content: "\f33b"; }
|
|
||||||
.fa-thumb-tack:before { content: "\f33c"; }
|
|
||||||
.fa-thumbs-down:before { content: "\f33d"; }
|
|
||||||
.fa-thumbs-o-down:before { content: "\f33e"; }
|
|
||||||
.fa-thumbs-o-up:before { content: "\f33f"; }
|
|
||||||
.fa-thumbs-up:before { content: "\f340"; }
|
|
||||||
.fa-ticket:before { content: "\f341"; }
|
|
||||||
.fa-times:before, .fa-remove:before { content: "\f342"; }
|
|
||||||
.fa-times-circle:before { content: "\f343"; }
|
|
||||||
.fa-times-circle-o:before { content: "\f344"; }
|
|
||||||
.fa-tint:before { content: "\f345"; }
|
|
||||||
.fa-toggle-off:before { content: "\f346"; }
|
|
||||||
.fa-toggle-on:before { content: "\f347"; }
|
|
||||||
.fa-trademark:before { content: "\f348"; }
|
|
||||||
.fa-train:before { content: "\f349"; }
|
|
||||||
.fa-transgender:before, .fa-intersex:before { content: "\f34a"; }
|
|
||||||
.fa-transgender-alt:before { content: "\f34b"; }
|
|
||||||
.fa-trash:before { content: "\f34c"; }
|
|
||||||
.fa-trash-o:before { content: "\f34d"; }
|
|
||||||
.fa-tree:before { content: "\f34e"; }
|
|
||||||
.fa-trello:before { content: "\f34f"; }
|
|
||||||
.fa-tripadvisor:before { content: "\f350"; }
|
|
||||||
.fa-trophy:before { content: "\f351"; }
|
|
||||||
.fa-truck:before { content: "\f352"; }
|
|
||||||
.fa-try:before { content: "\f353"; }
|
|
||||||
.fa-tty:before { content: "\f354"; }
|
|
||||||
.fa-tumblr:before { content: "\f355"; }
|
|
||||||
.fa-tumblr-square:before { content: "\f356"; }
|
|
||||||
.fa-turkish-lira:before { content: "\f357"; }
|
|
||||||
.fa-twitch:before { content: "\f358"; }
|
|
||||||
.fa-twitter:before { content: "\f359"; }
|
|
||||||
.fa-twitter-square:before { content: "\f35a"; }
|
|
||||||
.fa-umbrella:before { content: "\f35b"; }
|
|
||||||
.fa-underline:before { content: "\f35c"; }
|
|
||||||
.fa-undo:before { content: "\f35d"; }
|
|
||||||
.fa-university:before { content: "\f35e"; }
|
|
||||||
.fa-unlink:before { content: "\f35f"; }
|
|
||||||
.fa-unlock:before { content: "\f360"; }
|
|
||||||
.fa-unlock-alt:before { content: "\f361"; }
|
|
||||||
.fa-upload:before { content: "\f362"; }
|
|
||||||
.fa-usd:before { content: "\f363"; }
|
|
||||||
.fa-user:before { content: "\f364"; }
|
|
||||||
.fa-user-md:before { content: "\f365"; }
|
|
||||||
.fa-user-plus:before { content: "\f366"; }
|
|
||||||
.fa-user-secret:before { content: "\f367"; }
|
|
||||||
.fa-user-times:before { content: "\f368"; }
|
|
||||||
.fa-users:before { content: "\f369"; }
|
|
||||||
.fa-venus:before { content: "\f36a"; }
|
|
||||||
.fa-venus-double:before { content: "\f36b"; }
|
|
||||||
.fa-venus-mars:before { content: "\f36c"; }
|
|
||||||
.fa-viacoin:before { content: "\f36d"; }
|
|
||||||
.fa-video-camera:before { content: "\f36e"; }
|
|
||||||
.fa-vimeo:before { content: "\f36f"; }
|
|
||||||
.fa-vimeo-square:before { content: "\f370"; }
|
|
||||||
.fa-vine:before { content: "\f371"; }
|
|
||||||
.fa-vk:before { content: "\f372"; }
|
|
||||||
.fa-volume-down:before { content: "\f373"; }
|
|
||||||
.fa-volume-off:before { content: "\f374"; }
|
|
||||||
.fa-volume-up:before { content: "\f375"; }
|
|
||||||
.fa-warning:before { content: "\f376"; }
|
|
||||||
.fa-wechat:before { content: "\f377"; }
|
|
||||||
.fa-weibo:before { content: "\f378"; }
|
|
||||||
.fa-weixin:before { content: "\f379"; }
|
|
||||||
.fa-whatsapp:before { content: "\f37a"; }
|
|
||||||
.fa-wheelchair:before { content: "\f37b"; }
|
|
||||||
.fa-wifi:before { content: "\f37c"; }
|
|
||||||
.fa-wikipedia-w:before { content: "\f37d"; }
|
|
||||||
.fa-windows:before { content: "\f37e"; }
|
|
||||||
.fa-won:before { content: "\f37f"; }
|
|
||||||
.fa-wordpress:before { content: "\f380"; }
|
|
||||||
.fa-wrench:before { content: "\f381"; }
|
|
||||||
.fa-xing:before { content: "\f382"; }
|
|
||||||
.fa-xing-square:before { content: "\f383"; }
|
|
||||||
.fa-y-combinator:before { content: "\f384"; }
|
|
||||||
.fa-y-combinator-square:before { content: "\f385"; }
|
|
||||||
.fa-yahoo:before { content: "\f386"; }
|
|
||||||
.fa-yc:before { content: "\f387"; }
|
|
||||||
.fa-yc-square:before { content: "\f388"; }
|
|
||||||
.fa-yelp:before { content: "\f389"; }
|
|
||||||
.fa-yen:before { content: "\f38a"; }
|
|
||||||
.fa-youtube:before { content: "\f38b"; }
|
|
||||||
.fa-youtube-play:before { content: "\f38c"; }
|
|
||||||
.fa-youtube-square:before { content: "\f38d"; }
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,845 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Line Awesome 1.1.0 by @icons_8 - https://icons8.com/line-awesome
|
|
||||||
* License - https://icons8.com/good-boy-license/ (Font: SIL OFL 1.1, CSS: MIT License)
|
|
||||||
*
|
|
||||||
* Made with love by Icons8 [ https://icons8.com/ ] using FontCustom [ https://github.com/FontCustom/fontcustom ]
|
|
||||||
*
|
|
||||||
* Contacts:
|
|
||||||
* [ https://icons8.com/contact ]
|
|
||||||
*
|
|
||||||
* Follow Icon8 on
|
|
||||||
* Twitter [ https://twitter.com/icons_8 ]
|
|
||||||
* Facebook [ https://www.facebook.com/Icons8 ]
|
|
||||||
* Google+ [ https://plus.google.com/+Icons8 ]
|
|
||||||
* GitHub [ https://github.com/icons8 ]
|
|
||||||
*/
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "LineAwesome";
|
|
||||||
src: url("../fonts/line-awesome.eot?v=1.1.");
|
|
||||||
src: url("../fonts/line-awesome.eot??v=1.1.#iefix") format("embedded-opentype"),
|
|
||||||
url("../fonts/line-awesome.woff2?v=1.1.") format("woff2"),
|
|
||||||
url("../fonts/line-awesome.woff?v=1.1.") format("woff"),
|
|
||||||
url("../fonts/line-awesome.ttf?v=1.1.") format("truetype"),
|
|
||||||
url("../fonts/line-awesome.svg?v=1.1.#fa") format("svg");
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
|
||||||
@font-face {
|
|
||||||
font-family: "LineAwesome";
|
|
||||||
src: url("../fonts/line-awesome.svg?v=1.1.#fa") format("svg");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Thanks to http://fontawesome.io @fontawesome and @davegandy */
|
|
||||||
.la {
|
|
||||||
display: inline-block;
|
|
||||||
font: normal normal normal 16px/1 "LineAwesome";
|
|
||||||
font-size: inherit;
|
|
||||||
text-decoration: inherit;
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
text-transform: none;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
font-smoothing: antialiased;
|
|
||||||
}
|
|
||||||
/* makes the font 33% larger relative to the icon container */
|
|
||||||
.la-lg {
|
|
||||||
font-size: 1.33333333em;
|
|
||||||
line-height: 0.75em;
|
|
||||||
vertical-align: -15%;
|
|
||||||
}
|
|
||||||
.la-2x {
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
.la-3x {
|
|
||||||
font-size: 3em;
|
|
||||||
}
|
|
||||||
.la-4x {
|
|
||||||
font-size: 4em;
|
|
||||||
}
|
|
||||||
.la-5x {
|
|
||||||
font-size: 5em;
|
|
||||||
}
|
|
||||||
.la-fw {
|
|
||||||
width: 1.28571429em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.la-ul {
|
|
||||||
padding-left: 0;
|
|
||||||
margin-left: 2.14285714em;
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
.la-ul > li {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.la-li {
|
|
||||||
position: absolute;
|
|
||||||
left: -2.14285714em;
|
|
||||||
width: 2.14285714em;
|
|
||||||
top: 0.14285714em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.la-li.la-lg {
|
|
||||||
left: -1.85714286em;
|
|
||||||
}
|
|
||||||
.la-border {
|
|
||||||
padding: .2em .25em .15em;
|
|
||||||
border: solid 0.08em #eeeeee;
|
|
||||||
border-radius: .1em;
|
|
||||||
}
|
|
||||||
.pull-right {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
.pull-left {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.li.pull-left {
|
|
||||||
margin-right: .3em;
|
|
||||||
}
|
|
||||||
.li.pull-right {
|
|
||||||
margin-left: .3em;
|
|
||||||
}
|
|
||||||
.la-spin {
|
|
||||||
-webkit-animation: fa-spin 2s infinite linear;
|
|
||||||
animation: fa-spin 2s infinite linear;
|
|
||||||
}
|
|
||||||
@-webkit-keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.la-rotate-90 {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
|
|
||||||
-webkit-transform: rotate(90deg);
|
|
||||||
-ms-transform: rotate(90deg);
|
|
||||||
transform: rotate(90deg);
|
|
||||||
}
|
|
||||||
.la-rotate-180 {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
|
|
||||||
-webkit-transform: rotate(180deg);
|
|
||||||
-ms-transform: rotate(180deg);
|
|
||||||
transform: rotate(180deg);
|
|
||||||
}
|
|
||||||
.la-rotate-270 {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
|
|
||||||
-webkit-transform: rotate(270deg);
|
|
||||||
-ms-transform: rotate(270deg);
|
|
||||||
transform: rotate(270deg);
|
|
||||||
}
|
|
||||||
.la-flip-horizontal {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
|
|
||||||
-webkit-transform: scale(-1, 1);
|
|
||||||
-ms-transform: scale(-1, 1);
|
|
||||||
transform: scale(-1, 1);
|
|
||||||
}
|
|
||||||
.la-flip-vertical {
|
|
||||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
|
|
||||||
-webkit-transform: scale(1, -1);
|
|
||||||
-ms-transform: scale(1, -1);
|
|
||||||
transform: scale(1, -1);
|
|
||||||
}
|
|
||||||
:root .la-rotate-90,
|
|
||||||
:root .la-rotate-180,
|
|
||||||
:root .la-rotate-270,
|
|
||||||
:root .la-flip-horizontal,
|
|
||||||
:root .la-flip-vertical {
|
|
||||||
filter: none;
|
|
||||||
}
|
|
||||||
.la-stack {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
width: 2em;
|
|
||||||
height: 2em;
|
|
||||||
line-height: 2em;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.la-stack-1x,
|
|
||||||
.la-stack-2x {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.la-stack-1x {
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
.la-stack-2x {
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
.la-inverse {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
/* Thanks to http://fontawesome.io @fontawesome and @davegandy */
|
|
||||||
|
|
||||||
.la-500px:before { content: "\f100"; }
|
|
||||||
.la-adjust:before { content: "\f101"; }
|
|
||||||
.la-adn:before { content: "\f102"; }
|
|
||||||
.la-align-center:before { content: "\f103"; }
|
|
||||||
.la-align-justify:before { content: "\f104"; }
|
|
||||||
.la-align-left:before { content: "\f105"; }
|
|
||||||
.la-align-right:before { content: "\f106"; }
|
|
||||||
.la-amazon:before { content: "\f107"; }
|
|
||||||
.la-ambulance:before { content: "\f108"; }
|
|
||||||
.la-anchor:before { content: "\f109"; }
|
|
||||||
.la-android:before { content: "\f10a"; }
|
|
||||||
.la-angellist:before { content: "\f10b"; }
|
|
||||||
.la-angle-double-down:before { content: "\f10c"; }
|
|
||||||
.la-angle-double-left:before { content: "\f10d"; }
|
|
||||||
.la-angle-double-right:before { content: "\f10e"; }
|
|
||||||
.la-angle-double-up:before { content: "\f10f"; }
|
|
||||||
.la-angle-down:before { content: "\f110"; }
|
|
||||||
.la-angle-left:before { content: "\f111"; }
|
|
||||||
.la-angle-right:before { content: "\f112"; }
|
|
||||||
.la-angle-up:before { content: "\f113"; }
|
|
||||||
.la-apple:before { content: "\f114"; }
|
|
||||||
.la-archive:before { content: "\f115"; }
|
|
||||||
.la-area-chart:before { content: "\f116"; }
|
|
||||||
.la-arrow-circle-down:before { content: "\f117"; }
|
|
||||||
.la-arrow-circle-left:before { content: "\f118"; }
|
|
||||||
.la-arrow-circle-o-down:before { content: "\f119"; }
|
|
||||||
.la-arrow-circle-o-left:before { content: "\f11a"; }
|
|
||||||
.la-arrow-circle-o-right:before { content: "\f11b"; }
|
|
||||||
.la-arrow-circle-o-up:before { content: "\f11c"; }
|
|
||||||
.la-arrow-circle-right:before { content: "\f11d"; }
|
|
||||||
.la-arrow-circle-up:before { content: "\f11e"; }
|
|
||||||
.la-arrow-down:before { content: "\f11f"; }
|
|
||||||
.la-arrow-left:before { content: "\f120"; }
|
|
||||||
.la-arrow-right:before { content: "\f121"; }
|
|
||||||
.la-arrow-up:before { content: "\f122"; }
|
|
||||||
.la-arrows:before { content: "\f123"; }
|
|
||||||
.la-arrows-alt:before { content: "\f124"; }
|
|
||||||
.la-arrows-h:before { content: "\f125"; }
|
|
||||||
.la-arrows-v:before { content: "\f126"; }
|
|
||||||
.la-asterisk:before { content: "\f127"; }
|
|
||||||
.la-at:before { content: "\f128"; }
|
|
||||||
.la-automobile:before { content: "\f129"; }
|
|
||||||
.la-backward:before { content: "\f12a"; }
|
|
||||||
.la-balance-scale:before { content: "\f12b"; }
|
|
||||||
.la-ban:before { content: "\f12c"; }
|
|
||||||
.la-bank:before { content: "\f12d"; }
|
|
||||||
.la-bar-chart:before { content: "\f12e"; }
|
|
||||||
.la-bar-chart-o:before { content: "\f12f"; }
|
|
||||||
.la-barcode:before { content: "\f130"; }
|
|
||||||
.la-bars:before { content: "\f131"; }
|
|
||||||
.la-battery-0:before { content: "\f132"; }
|
|
||||||
.la-battery-1:before { content: "\f133"; }
|
|
||||||
.la-battery-2:before { content: "\f134"; }
|
|
||||||
.la-battery-3:before { content: "\f135"; }
|
|
||||||
.la-battery-4:before { content: "\f136"; }
|
|
||||||
.la-battery-empty:before { content: "\f137"; }
|
|
||||||
.la-battery-full:before { content: "\f138"; }
|
|
||||||
.la-battery-half:before { content: "\f139"; }
|
|
||||||
.la-battery-quarter:before { content: "\f13a"; }
|
|
||||||
.la-battery-three-quarters:before { content: "\f13b"; }
|
|
||||||
.la-bed:before { content: "\f13c"; }
|
|
||||||
.la-beer:before { content: "\f13d"; }
|
|
||||||
.la-behance:before { content: "\f13e"; }
|
|
||||||
.la-behance-square:before { content: "\f13f"; }
|
|
||||||
.la-bell:before { content: "\f140"; }
|
|
||||||
.la-bell-o:before { content: "\f141"; }
|
|
||||||
.la-bell-slash:before { content: "\f142"; }
|
|
||||||
.la-bell-slash-o:before { content: "\f143"; }
|
|
||||||
.la-bicycle:before { content: "\f144"; }
|
|
||||||
.la-binoculars:before { content: "\f145"; }
|
|
||||||
.la-birthday-cake:before { content: "\f146"; }
|
|
||||||
.la-bitbucket:before { content: "\f147"; }
|
|
||||||
.la-bitbucket-square:before { content: "\f148"; }
|
|
||||||
.la-bitcoin:before { content: "\f149"; }
|
|
||||||
.la-black-tie:before { content: "\f14a"; }
|
|
||||||
.la-bold:before { content: "\f14b"; }
|
|
||||||
.la-bolt:before { content: "\f14c"; }
|
|
||||||
.la-bomb:before { content: "\f14d"; }
|
|
||||||
.la-book:before { content: "\f14e"; }
|
|
||||||
.la-bookmark:before { content: "\f14f"; }
|
|
||||||
.la-bookmark-o:before { content: "\f150"; }
|
|
||||||
.la-briefcase:before { content: "\f151"; }
|
|
||||||
.la-btc:before { content: "\f152"; }
|
|
||||||
.la-bug:before { content: "\f153"; }
|
|
||||||
.la-building:before { content: "\f154"; }
|
|
||||||
.la-building-o:before { content: "\f155"; }
|
|
||||||
.la-bullhorn:before { content: "\f156"; }
|
|
||||||
.la-bullseye:before { content: "\f157"; }
|
|
||||||
.la-bus:before { content: "\f158"; }
|
|
||||||
.la-buysellads:before { content: "\f159"; }
|
|
||||||
.la-cab:before { content: "\f15a"; }
|
|
||||||
.la-calculator:before { content: "\f15b"; }
|
|
||||||
.la-calendar:before { content: "\f15c"; }
|
|
||||||
.la-calendar-check-o:before { content: "\f15d"; }
|
|
||||||
.la-calendar-minus-o:before { content: "\f15e"; }
|
|
||||||
.la-calendar-o:before { content: "\f15f"; }
|
|
||||||
.la-calendar-plus-o:before { content: "\f160"; }
|
|
||||||
.la-calendar-times-o:before { content: "\f161"; }
|
|
||||||
.la-camera:before { content: "\f162"; }
|
|
||||||
.la-camera-retro:before { content: "\f163"; }
|
|
||||||
.la-car:before { content: "\f164"; }
|
|
||||||
.la-caret-down:before { content: "\f165"; }
|
|
||||||
.la-caret-left:before { content: "\f166"; }
|
|
||||||
.la-caret-right:before { content: "\f167"; }
|
|
||||||
.la-caret-square-o-down:before, .la-toggle-down:before { content: "\f168"; }
|
|
||||||
.la-caret-square-o-left:before, .la-toggle-left:before { content: "\f169"; }
|
|
||||||
.la-caret-square-o-right:before, .la-toggle-right:before { content: "\f16a"; }
|
|
||||||
.la-caret-square-o-up:before, .la-toggle-up:before { content: "\f16b"; }
|
|
||||||
.la-caret-up:before { content: "\f16c"; }
|
|
||||||
.la-cart-arrow-down:before { content: "\f16d"; }
|
|
||||||
.la-cart-plus:before { content: "\f16e"; }
|
|
||||||
.la-cc:before { content: "\f16f"; }
|
|
||||||
.la-cc-amex:before { content: "\f170"; }
|
|
||||||
.la-cc-diners-club:before { content: "\f171"; }
|
|
||||||
.la-cc-discover:before { content: "\f172"; }
|
|
||||||
.la-cc-jcb:before { content: "\f173"; }
|
|
||||||
.la-cc-mastercard:before { content: "\f174"; }
|
|
||||||
.la-cc-paypal:before { content: "\f175"; }
|
|
||||||
.la-cc-stripe:before { content: "\f176"; }
|
|
||||||
.la-cc-visa:before { content: "\f177"; }
|
|
||||||
.la-certificate:before { content: "\f178"; }
|
|
||||||
.la-chain:before { content: "\f179"; }
|
|
||||||
.la-chain-broken:before { content: "\f17a"; }
|
|
||||||
.la-check:before { content: "\f17b"; }
|
|
||||||
.la-check-circle:before { content: "\f17c"; }
|
|
||||||
.la-check-circle-o:before { content: "\f17d"; }
|
|
||||||
.la-check-square:before { content: "\f17e"; }
|
|
||||||
.la-check-square-o:before { content: "\f17f"; }
|
|
||||||
.la-chevron-circle-down:before { content: "\f180"; }
|
|
||||||
.la-chevron-circle-left:before { content: "\f181"; }
|
|
||||||
.la-chevron-circle-right:before { content: "\f182"; }
|
|
||||||
.la-chevron-circle-up:before { content: "\f183"; }
|
|
||||||
.la-chevron-down:before { content: "\f184"; }
|
|
||||||
.la-chevron-left:before { content: "\f185"; }
|
|
||||||
.la-chevron-right:before { content: "\f186"; }
|
|
||||||
.la-chevron-up:before { content: "\f187"; }
|
|
||||||
.la-child:before { content: "\f188"; }
|
|
||||||
.la-chrome:before { content: "\f189"; }
|
|
||||||
.la-circle:before { content: "\f18a"; }
|
|
||||||
.la-circle-o:before { content: "\f18b"; }
|
|
||||||
.la-circle-o-notch:before { content: "\f18c"; }
|
|
||||||
.la-circle-thin:before { content: "\f18d"; }
|
|
||||||
.la-clipboard:before { content: "\f18e"; }
|
|
||||||
.la-clock-o:before { content: "\f18f"; }
|
|
||||||
.la-clone:before { content: "\f190"; }
|
|
||||||
.la-close:before { content: "\f191"; }
|
|
||||||
.la-cloud:before { content: "\f192"; }
|
|
||||||
.la-cloud-download:before { content: "\f193"; }
|
|
||||||
.la-cloud-upload:before { content: "\f194"; }
|
|
||||||
.la-cny:before { content: "\f195"; }
|
|
||||||
.la-code:before { content: "\f196"; }
|
|
||||||
.la-code-fork:before { content: "\f197"; }
|
|
||||||
.la-codepen:before { content: "\f198"; }
|
|
||||||
.la-coffee:before { content: "\f199"; }
|
|
||||||
.la-cog:before { content: "\f19a"; }
|
|
||||||
.la-cogs:before { content: "\f19b"; }
|
|
||||||
.la-columns:before { content: "\f19c"; }
|
|
||||||
.la-comment:before { content: "\f19d"; }
|
|
||||||
.la-comment-o:before { content: "\f19e"; }
|
|
||||||
.la-commenting:before { content: "\f19f"; }
|
|
||||||
.la-commenting-o:before { content: "\f1a0"; }
|
|
||||||
.la-comments:before { content: "\f1a1"; }
|
|
||||||
.la-comments-o:before { content: "\f1a2"; }
|
|
||||||
.la-compass:before { content: "\f1a3"; }
|
|
||||||
.la-compress:before { content: "\f1a4"; }
|
|
||||||
.la-connectdevelop:before { content: "\f1a5"; }
|
|
||||||
.la-contao:before { content: "\f1a6"; }
|
|
||||||
.la-copy:before { content: "\f1a7"; }
|
|
||||||
.la-copyright:before { content: "\f1a8"; }
|
|
||||||
.la-creative-commons:before { content: "\f1a9"; }
|
|
||||||
.la-credit-card:before { content: "\f1aa"; }
|
|
||||||
.la-crop:before { content: "\f1ab"; }
|
|
||||||
.la-crosshairs:before { content: "\f1ac"; }
|
|
||||||
.la-css3:before { content: "\f1ad"; }
|
|
||||||
.la-cube:before { content: "\f1ae"; }
|
|
||||||
.la-cubes:before { content: "\f1af"; }
|
|
||||||
.la-cut:before { content: "\f1b0"; }
|
|
||||||
.la-cutlery:before { content: "\f1b1"; }
|
|
||||||
.la-dashboard:before { content: "\f1b2"; }
|
|
||||||
.la-dashcube:before { content: "\f1b3"; }
|
|
||||||
.la-database:before { content: "\f1b4"; }
|
|
||||||
.la-dedent:before { content: "\f1b5"; }
|
|
||||||
.la-delicious:before { content: "\f1b6"; }
|
|
||||||
.la-desktop:before { content: "\f1b7"; }
|
|
||||||
.la-deviantart:before { content: "\f1b8"; }
|
|
||||||
.la-diamond:before { content: "\f1b9"; }
|
|
||||||
.la-digg:before { content: "\f1ba"; }
|
|
||||||
.la-dollar:before { content: "\f1bb"; }
|
|
||||||
.la-dot-circle-o:before { content: "\f1bc"; }
|
|
||||||
.la-download:before { content: "\f1bd"; }
|
|
||||||
.la-dribbble:before { content: "\f1be"; }
|
|
||||||
.la-dropbox:before { content: "\f1bf"; }
|
|
||||||
.la-drupal:before { content: "\f1c0"; }
|
|
||||||
.la-edit:before { content: "\f1c1"; }
|
|
||||||
.la-eject:before { content: "\f1c2"; }
|
|
||||||
.la-ellipsis-h:before { content: "\f1c3"; }
|
|
||||||
.la-ellipsis-v:before { content: "\f1c4"; }
|
|
||||||
.la-empire:before, .la-ge:before { content: "\f1c5"; }
|
|
||||||
.la-envelope:before { content: "\f1c6"; }
|
|
||||||
.la-envelope-o:before { content: "\f1c7"; }
|
|
||||||
.la-envelope-square:before { content: "\f1c8"; }
|
|
||||||
.la-eraser:before { content: "\f1c9"; }
|
|
||||||
.la-eur:before { content: "\f1ca"; }
|
|
||||||
.la-euro:before { content: "\f1cb"; }
|
|
||||||
.la-exchange:before { content: "\f1cc"; }
|
|
||||||
.la-exclamation:before { content: "\f1cd"; }
|
|
||||||
.la-exclamation-circle:before { content: "\f1ce"; }
|
|
||||||
.la-exclamation-triangle:before { content: "\f1cf"; }
|
|
||||||
.la-expand:before { content: "\f1d0"; }
|
|
||||||
.la-expeditedssl:before { content: "\f1d1"; }
|
|
||||||
.la-external-link:before { content: "\f1d2"; }
|
|
||||||
.la-external-link-square:before { content: "\f1d3"; }
|
|
||||||
.la-eye:before { content: "\f1d4"; }
|
|
||||||
.la-eye-slash:before { content: "\f1d5"; }
|
|
||||||
.la-eyedropper:before { content: "\f1d6"; }
|
|
||||||
.la-facebook:before, .la-facebook-f:before { content: "\f1d7"; }
|
|
||||||
.la-facebook-official:before { content: "\f1d8"; }
|
|
||||||
.la-facebook-square:before { content: "\f1d9"; }
|
|
||||||
.la-fast-backward:before { content: "\f1da"; }
|
|
||||||
.la-fast-forward:before { content: "\f1db"; }
|
|
||||||
.la-fax:before { content: "\f1dc"; }
|
|
||||||
.la-female:before { content: "\f1dd"; }
|
|
||||||
.la-fighter-jet:before { content: "\f1de"; }
|
|
||||||
.la-file:before { content: "\f1df"; }
|
|
||||||
.la-file-archive-o:before { content: "\f1e0"; }
|
|
||||||
.la-file-audio-o:before { content: "\f1e1"; }
|
|
||||||
.la-file-code-o:before { content: "\f1e2"; }
|
|
||||||
.la-file-excel-o:before { content: "\f1e3"; }
|
|
||||||
.la-file-image-o:before { content: "\f1e4"; }
|
|
||||||
.la-file-movie-o:before { content: "\f1e5"; }
|
|
||||||
.la-file-o:before { content: "\f1e6"; }
|
|
||||||
.la-file-pdf-o:before { content: "\f1e7"; }
|
|
||||||
.la-file-photo-o:before { content: "\f1e8"; }
|
|
||||||
.la-file-picture-o:before { content: "\f1e9"; }
|
|
||||||
.la-file-powerpoint-o:before { content: "\f1ea"; }
|
|
||||||
.la-file-sound-o:before { content: "\f1eb"; }
|
|
||||||
.la-file-text:before { content: "\f1ec"; }
|
|
||||||
.la-file-text-o:before { content: "\f1ed"; }
|
|
||||||
.la-file-video-o:before { content: "\f1ee"; }
|
|
||||||
.la-file-word-o:before { content: "\f1ef"; }
|
|
||||||
.la-file-zip-o:before { content: "\f1f0"; }
|
|
||||||
.la-files-o:before { content: "\f1f1"; }
|
|
||||||
.la-film:before { content: "\f1f2"; }
|
|
||||||
.la-filter:before { content: "\f1f3"; }
|
|
||||||
.la-fire:before { content: "\f1f4"; }
|
|
||||||
.la-fire-extinguisher:before { content: "\f1f5"; }
|
|
||||||
.la-firefox:before { content: "\f1f6"; }
|
|
||||||
.la-flag:before { content: "\f1f7"; }
|
|
||||||
.la-flag-checkered:before { content: "\f1f8"; }
|
|
||||||
.la-flag-o:before { content: "\f1f9"; }
|
|
||||||
.la-flash:before { content: "\f1fa"; }
|
|
||||||
.la-flask:before { content: "\f1fb"; }
|
|
||||||
.la-flickr:before { content: "\f1fc"; }
|
|
||||||
.la-floppy-o:before { content: "\f1fd"; }
|
|
||||||
.la-folder:before { content: "\f1fe"; }
|
|
||||||
.la-folder-o:before { content: "\f1ff"; }
|
|
||||||
.la-folder-open:before { content: "\f200"; }
|
|
||||||
.la-folder-open-o:before { content: "\f201"; }
|
|
||||||
.la-font:before { content: "\f202"; }
|
|
||||||
.la-fonticons:before { content: "\f203"; }
|
|
||||||
.la-forumbee:before { content: "\f204"; }
|
|
||||||
.la-forward:before { content: "\f205"; }
|
|
||||||
.la-foursquare:before { content: "\f206"; }
|
|
||||||
.la-frown-o:before { content: "\f207"; }
|
|
||||||
.la-futbol-o:before, .la-soccer-ball-o:before { content: "\f208"; }
|
|
||||||
.la-gamepad:before { content: "\f209"; }
|
|
||||||
.la-gavel:before { content: "\f20a"; }
|
|
||||||
.la-gbp:before { content: "\f20b"; }
|
|
||||||
.la-gear:before { content: "\f20c"; }
|
|
||||||
.la-gears:before { content: "\f20d"; }
|
|
||||||
.la-genderless:before { content: "\f20e"; }
|
|
||||||
.la-get-pocket:before { content: "\f20f"; }
|
|
||||||
.la-gg:before { content: "\f210"; }
|
|
||||||
.la-gg-circle:before { content: "\f211"; }
|
|
||||||
.la-gift:before { content: "\f212"; }
|
|
||||||
.la-git:before { content: "\f213"; }
|
|
||||||
.la-git-square:before { content: "\f214"; }
|
|
||||||
.la-github:before { content: "\f215"; }
|
|
||||||
.la-github-alt:before { content: "\f216"; }
|
|
||||||
.la-github-square:before { content: "\f217"; }
|
|
||||||
.la-glass:before { content: "\f218"; }
|
|
||||||
.la-globe:before { content: "\f219"; }
|
|
||||||
.la-google:before { content: "\f21a"; }
|
|
||||||
.la-google-plus:before { content: "\f21b"; }
|
|
||||||
.la-google-plus-square:before { content: "\f21c"; }
|
|
||||||
.la-google-wallet:before { content: "\f21d"; }
|
|
||||||
.la-graduation-cap:before { content: "\f21e"; }
|
|
||||||
.la-gratipay:before, .la-gittip:before { content: "\f21f"; }
|
|
||||||
.la-group:before { content: "\f220"; }
|
|
||||||
.la-h-square:before { content: "\f221"; }
|
|
||||||
.la-hacker-news:before { content: "\f222"; }
|
|
||||||
.la-hand-grab-o:before { content: "\f223"; }
|
|
||||||
.la-hand-lizard-o:before { content: "\f224"; }
|
|
||||||
.la-hand-o-down:before { content: "\f225"; }
|
|
||||||
.la-hand-o-left:before { content: "\f226"; }
|
|
||||||
.la-hand-o-right:before { content: "\f227"; }
|
|
||||||
.la-hand-o-up:before { content: "\f228"; }
|
|
||||||
.la-hand-paper-o:before { content: "\f229"; }
|
|
||||||
.la-hand-peace-o:before { content: "\f22a"; }
|
|
||||||
.la-hand-pointer-o:before { content: "\f22b"; }
|
|
||||||
.la-hand-rock-o:before { content: "\f22c"; }
|
|
||||||
.la-hand-scissors-o:before { content: "\f22d"; }
|
|
||||||
.la-hand-spock-o:before { content: "\f22e"; }
|
|
||||||
.la-hand-stop-o:before { content: "\f22f"; }
|
|
||||||
.la-hdd-o:before { content: "\f230"; }
|
|
||||||
.la-header:before { content: "\f231"; }
|
|
||||||
.la-headphones:before { content: "\f232"; }
|
|
||||||
.la-heart:before { content: "\f233"; }
|
|
||||||
.la-heart-o:before { content: "\f234"; }
|
|
||||||
.la-heartbeat:before { content: "\f235"; }
|
|
||||||
.la-history:before { content: "\f236"; }
|
|
||||||
.la-home:before { content: "\f237"; }
|
|
||||||
.la-hospital-o:before { content: "\f238"; }
|
|
||||||
.la-hotel:before { content: "\f239"; }
|
|
||||||
.la-hourglass:before { content: "\f23a"; }
|
|
||||||
.la-hourglass-1:before { content: "\f23b"; }
|
|
||||||
.la-hourglass-2:before { content: "\f23c"; }
|
|
||||||
.la-hourglass-3:before { content: "\f23d"; }
|
|
||||||
.la-hourglass-end:before { content: "\f23e"; }
|
|
||||||
.la-hourglass-half:before { content: "\f23f"; }
|
|
||||||
.la-hourglass-o:before { content: "\f240"; }
|
|
||||||
.la-hourglass-start:before { content: "\f241"; }
|
|
||||||
.la-houzz:before { content: "\f242"; }
|
|
||||||
.la-html5:before { content: "\f243"; }
|
|
||||||
.la-i-cursor:before { content: "\f244"; }
|
|
||||||
.la-ils:before { content: "\f245"; }
|
|
||||||
.la-image:before { content: "\f246"; }
|
|
||||||
.la-inbox:before { content: "\f247"; }
|
|
||||||
.la-indent:before { content: "\f248"; }
|
|
||||||
.la-industry:before { content: "\f249"; }
|
|
||||||
.la-info:before { content: "\f24a"; }
|
|
||||||
.la-info-circle:before { content: "\f24b"; }
|
|
||||||
.la-inr:before { content: "\f24c"; }
|
|
||||||
.la-instagram:before { content: "\f24d"; }
|
|
||||||
.la-institution:before { content: "\f24e"; }
|
|
||||||
.la-internet-explorer:before { content: "\f24f"; }
|
|
||||||
.la-ioxhost:before { content: "\f250"; }
|
|
||||||
.la-italic:before { content: "\f251"; }
|
|
||||||
.la-joomla:before { content: "\f252"; }
|
|
||||||
.la-jpy:before { content: "\f253"; }
|
|
||||||
.la-jsfiddle:before { content: "\f254"; }
|
|
||||||
.la-key:before { content: "\f255"; }
|
|
||||||
.la-keyboard-o:before { content: "\f256"; }
|
|
||||||
.la-krw:before { content: "\f257"; }
|
|
||||||
.la-language:before { content: "\f258"; }
|
|
||||||
.la-laptop:before { content: "\f259"; }
|
|
||||||
.la-lastfm:before { content: "\f25a"; }
|
|
||||||
.la-lastfm-square:before { content: "\f25b"; }
|
|
||||||
.la-leaf:before { content: "\f25c"; }
|
|
||||||
.la-leanpub:before { content: "\f25d"; }
|
|
||||||
.la-legal:before { content: "\f25e"; }
|
|
||||||
.la-lemon-o:before { content: "\f25f"; }
|
|
||||||
.la-level-down:before { content: "\f260"; }
|
|
||||||
.la-level-up:before { content: "\f261"; }
|
|
||||||
.la-life-bouy:before { content: "\f262"; }
|
|
||||||
.la-life-buoy:before { content: "\f263"; }
|
|
||||||
.la-life-ring:before, .la-support:before { content: "\f264"; }
|
|
||||||
.la-life-saver:before { content: "\f265"; }
|
|
||||||
.la-lightbulb-o:before { content: "\f266"; }
|
|
||||||
.la-line-chart:before { content: "\f267"; }
|
|
||||||
.la-link:before { content: "\f268"; }
|
|
||||||
.la-linkedin:before { content: "\f269"; }
|
|
||||||
.la-linkedin-square:before { content: "\f26a"; }
|
|
||||||
.la-linux:before { content: "\f26b"; }
|
|
||||||
.la-list:before { content: "\f26c"; }
|
|
||||||
.la-list-alt:before { content: "\f26d"; }
|
|
||||||
.la-list-ol:before { content: "\f26e"; }
|
|
||||||
.la-list-ul:before { content: "\f26f"; }
|
|
||||||
.la-location-arrow:before { content: "\f270"; }
|
|
||||||
.la-lock:before { content: "\f271"; }
|
|
||||||
.la-long-arrow-down:before { content: "\f272"; }
|
|
||||||
.la-long-arrow-left:before { content: "\f273"; }
|
|
||||||
.la-long-arrow-right:before { content: "\f274"; }
|
|
||||||
.la-long-arrow-up:before { content: "\f275"; }
|
|
||||||
.la-magic:before { content: "\f276"; }
|
|
||||||
.la-magnet:before { content: "\f277"; }
|
|
||||||
.la-mail-forward:before { content: "\f278"; }
|
|
||||||
.la-mail-reply:before { content: "\f279"; }
|
|
||||||
.la-mail-reply-all:before { content: "\f27a"; }
|
|
||||||
.la-male:before { content: "\f27b"; }
|
|
||||||
.la-map:before { content: "\f27c"; }
|
|
||||||
.la-map-marker:before { content: "\f27d"; }
|
|
||||||
.la-map-o:before { content: "\f27e"; }
|
|
||||||
.la-map-pin:before { content: "\f27f"; }
|
|
||||||
.la-map-signs:before { content: "\f280"; }
|
|
||||||
.la-mars:before { content: "\f281"; }
|
|
||||||
.la-mars-double:before { content: "\f282"; }
|
|
||||||
.la-mars-stroke:before { content: "\f283"; }
|
|
||||||
.la-mars-stroke-h:before { content: "\f284"; }
|
|
||||||
.la-mars-stroke-v:before { content: "\f285"; }
|
|
||||||
.la-maxcdn:before { content: "\f286"; }
|
|
||||||
.la-meanpath:before { content: "\f287"; }
|
|
||||||
.la-medium:before { content: "\f288"; }
|
|
||||||
.la-medkit:before { content: "\f289"; }
|
|
||||||
.la-meh-o:before { content: "\f28a"; }
|
|
||||||
.la-mercury:before { content: "\f28b"; }
|
|
||||||
.la-microphone:before { content: "\f28c"; }
|
|
||||||
.la-microphone-slash:before { content: "\f28d"; }
|
|
||||||
.la-minus:before { content: "\f28e"; }
|
|
||||||
.la-minus-circle:before { content: "\f28f"; }
|
|
||||||
.la-minus-square:before { content: "\f290"; }
|
|
||||||
.la-minus-square-o:before { content: "\f291"; }
|
|
||||||
.la-mobile:before { content: "\f292"; }
|
|
||||||
.la-mobile-phone:before { content: "\f293"; }
|
|
||||||
.la-money:before { content: "\f294"; }
|
|
||||||
.la-moon-o:before { content: "\f295"; }
|
|
||||||
.la-mortar-board:before { content: "\f296"; }
|
|
||||||
.la-motorcycle:before { content: "\f297"; }
|
|
||||||
.la-mouse-pointer:before { content: "\f298"; }
|
|
||||||
.la-music:before { content: "\f299"; }
|
|
||||||
.la-navicon:before { content: "\f29a"; }
|
|
||||||
.la-neuter:before { content: "\f29b"; }
|
|
||||||
.la-newspaper-o:before { content: "\f29c"; }
|
|
||||||
.la-object-group:before { content: "\f29d"; }
|
|
||||||
.la-object-ungroup:before { content: "\f29e"; }
|
|
||||||
.la-odnoklassniki:before { content: "\f29f"; }
|
|
||||||
.la-odnoklassniki-square:before { content: "\f2a0"; }
|
|
||||||
.la-opencart:before { content: "\f2a1"; }
|
|
||||||
.la-openid:before { content: "\f2a2"; }
|
|
||||||
.la-opera:before { content: "\f2a3"; }
|
|
||||||
.la-optin-monster:before { content: "\f2a4"; }
|
|
||||||
.la-outdent:before { content: "\f2a5"; }
|
|
||||||
.la-pagelines:before { content: "\f2a6"; }
|
|
||||||
.la-paint-brush:before { content: "\f2a7"; }
|
|
||||||
.la-paper-plane:before, .la-send:before { content: "\f2a8"; }
|
|
||||||
.la-paper-plane-o:before, .la-send-o:before { content: "\f2a9"; }
|
|
||||||
.la-paperclip:before { content: "\f2aa"; }
|
|
||||||
.la-paragraph:before { content: "\f2ab"; }
|
|
||||||
.la-paste:before { content: "\f2ac"; }
|
|
||||||
.la-pause:before { content: "\f2ad"; }
|
|
||||||
.la-paw:before { content: "\f2ae"; }
|
|
||||||
.la-paypal:before { content: "\f2af"; }
|
|
||||||
.la-pencil:before { content: "\f2b0"; }
|
|
||||||
.la-pencil-square:before { content: "\f2b1"; }
|
|
||||||
.la-pencil-square-o:before { content: "\f2b2"; }
|
|
||||||
.la-phone:before { content: "\f2b3"; }
|
|
||||||
.la-phone-square:before { content: "\f2b4"; }
|
|
||||||
.la-photo:before { content: "\f2b5"; }
|
|
||||||
.la-picture-o:before { content: "\f2b6"; }
|
|
||||||
.la-pie-chart:before { content: "\f2b7"; }
|
|
||||||
.la-pied-piper:before { content: "\f2b8"; }
|
|
||||||
.la-pied-piper-alt:before { content: "\f2b9"; }
|
|
||||||
.la-pinterest:before { content: "\f2ba"; }
|
|
||||||
.la-pinterest-p:before { content: "\f2bb"; }
|
|
||||||
.la-pinterest-square:before { content: "\f2bc"; }
|
|
||||||
.la-plane:before { content: "\f2bd"; }
|
|
||||||
.la-play:before { content: "\f2be"; }
|
|
||||||
.la-play-circle:before { content: "\f2bf"; }
|
|
||||||
.la-play-circle-o:before { content: "\f2c0"; }
|
|
||||||
.la-plug:before { content: "\f2c1"; }
|
|
||||||
.la-plus:before { content: "\f2c2"; }
|
|
||||||
.la-plus-circle:before { content: "\f2c3"; }
|
|
||||||
.la-plus-square:before { content: "\f2c4"; }
|
|
||||||
.la-plus-square-o:before { content: "\f2c5"; }
|
|
||||||
.la-power-off:before { content: "\f2c6"; }
|
|
||||||
.la-print:before { content: "\f2c7"; }
|
|
||||||
.la-puzzle-piece:before { content: "\f2c8"; }
|
|
||||||
.la-qq:before { content: "\f2c9"; }
|
|
||||||
.la-qrcode:before { content: "\f2ca"; }
|
|
||||||
.la-question:before { content: "\f2cb"; }
|
|
||||||
.la-question-circle:before { content: "\f2cc"; }
|
|
||||||
.la-quote-left:before { content: "\f2cd"; }
|
|
||||||
.la-quote-right:before { content: "\f2ce"; }
|
|
||||||
.la-ra:before { content: "\f2cf"; }
|
|
||||||
.la-random:before { content: "\f2d0"; }
|
|
||||||
.la-rebel:before { content: "\f2d1"; }
|
|
||||||
.la-recycle:before { content: "\f2d2"; }
|
|
||||||
.la-reddit:before { content: "\f2d3"; }
|
|
||||||
.la-reddit-square:before { content: "\f2d4"; }
|
|
||||||
.la-refresh:before { content: "\f2d5"; }
|
|
||||||
.la-registered:before { content: "\f2d6"; }
|
|
||||||
.la-renren:before { content: "\f2d7"; }
|
|
||||||
.la-reorder:before { content: "\f2d8"; }
|
|
||||||
.la-repeat:before { content: "\f2d9"; }
|
|
||||||
.la-reply:before { content: "\f2da"; }
|
|
||||||
.la-reply-all:before { content: "\f2db"; }
|
|
||||||
.la-retweet:before { content: "\f2dc"; }
|
|
||||||
.la-rmb:before { content: "\f2dd"; }
|
|
||||||
.la-road:before { content: "\f2de"; }
|
|
||||||
.la-rocket:before { content: "\f2df"; }
|
|
||||||
.la-rotate-left:before { content: "\f2e0"; }
|
|
||||||
.la-rotate-right:before { content: "\f2e1"; }
|
|
||||||
.la-rouble:before { content: "\f2e2"; }
|
|
||||||
.la-rss:before, .la-feed:before { content: "\f2e3"; }
|
|
||||||
.la-rss-square:before { content: "\f2e4"; }
|
|
||||||
.la-rub:before { content: "\f2e5"; }
|
|
||||||
.la-ruble:before { content: "\f2e6"; }
|
|
||||||
.la-rupee:before { content: "\f2e7"; }
|
|
||||||
.la-safari:before { content: "\f2e8"; }
|
|
||||||
.la-save:before { content: "\f2e9"; }
|
|
||||||
.la-scissors:before { content: "\f2ea"; }
|
|
||||||
.la-search:before { content: "\f2eb"; }
|
|
||||||
.la-search-minus:before { content: "\f2ec"; }
|
|
||||||
.la-search-plus:before { content: "\f2ed"; }
|
|
||||||
.la-sellsy:before { content: "\f2ee"; }
|
|
||||||
.la-server:before { content: "\f2ef"; }
|
|
||||||
.la-share:before { content: "\f2f0"; }
|
|
||||||
.la-share-alt:before { content: "\f2f1"; }
|
|
||||||
.la-share-alt-square:before { content: "\f2f2"; }
|
|
||||||
.la-share-square:before { content: "\f2f3"; }
|
|
||||||
.la-share-square-o:before { content: "\f2f4"; }
|
|
||||||
.la-shekel:before { content: "\f2f5"; }
|
|
||||||
.la-sheqel:before { content: "\f2f6"; }
|
|
||||||
.la-shield:before { content: "\f2f7"; }
|
|
||||||
.la-ship:before { content: "\f2f8"; }
|
|
||||||
.la-shirtsinbulk:before { content: "\f2f9"; }
|
|
||||||
.la-shopping-cart:before { content: "\f2fa"; }
|
|
||||||
.la-sign-in:before { content: "\f2fb"; }
|
|
||||||
.la-sign-out:before { content: "\f2fc"; }
|
|
||||||
.la-signal:before { content: "\f2fd"; }
|
|
||||||
.la-simplybuilt:before { content: "\f2fe"; }
|
|
||||||
.la-sitemap:before { content: "\f2ff"; }
|
|
||||||
.la-skyatlas:before { content: "\f300"; }
|
|
||||||
.la-skype:before { content: "\f301"; }
|
|
||||||
.la-slack:before { content: "\f302"; }
|
|
||||||
.la-sliders:before { content: "\f303"; }
|
|
||||||
.la-slideshare:before { content: "\f304"; }
|
|
||||||
.la-smile-o:before { content: "\f305"; }
|
|
||||||
.la-sort:before, .la-unsorted:before { content: "\f306"; }
|
|
||||||
.la-sort-alpha-asc:before { content: "\f307"; }
|
|
||||||
.la-sort-alpha-desc:before { content: "\f308"; }
|
|
||||||
.la-sort-amount-asc:before { content: "\f309"; }
|
|
||||||
.la-sort-amount-desc:before { content: "\f30a"; }
|
|
||||||
.la-sort-asc:before, .la-sort-up:before { content: "\f30b"; }
|
|
||||||
.la-sort-desc:before, .la-sort-down:before { content: "\f30c"; }
|
|
||||||
.la-sort-numeric-asc:before { content: "\f30d"; }
|
|
||||||
.la-sort-numeric-desc:before { content: "\f30e"; }
|
|
||||||
.la-soundcloud:before { content: "\f30f"; }
|
|
||||||
.la-space-shuttle:before { content: "\f310"; }
|
|
||||||
.la-spinner:before { content: "\f311"; }
|
|
||||||
.la-spoon:before { content: "\f312"; }
|
|
||||||
.la-spotify:before { content: "\f313"; }
|
|
||||||
.la-square:before { content: "\f314"; }
|
|
||||||
.la-square-o:before { content: "\f315"; }
|
|
||||||
.la-stack-exchange:before { content: "\f316"; }
|
|
||||||
.la-stack-overflow:before { content: "\f317"; }
|
|
||||||
.la-star:before { content: "\f318"; }
|
|
||||||
.la-star-half:before { content: "\f319"; }
|
|
||||||
.la-star-half-o:before, .la-star-half-full:before, .la-star-half-empty:before { content: "\f31a"; }
|
|
||||||
.la-star-o:before { content: "\f31b"; }
|
|
||||||
.la-steam:before { content: "\f31c"; }
|
|
||||||
.la-steam-square:before { content: "\f31d"; }
|
|
||||||
.la-step-backward:before { content: "\f31e"; }
|
|
||||||
.la-step-forward:before { content: "\f31f"; }
|
|
||||||
.la-stethoscope:before { content: "\f320"; }
|
|
||||||
.la-sticky-note:before { content: "\f321"; }
|
|
||||||
.la-sticky-note-o:before { content: "\f322"; }
|
|
||||||
.la-stop:before { content: "\f323"; }
|
|
||||||
.la-street-view:before { content: "\f324"; }
|
|
||||||
.la-strikethrough:before { content: "\f325"; }
|
|
||||||
.la-stumbleupon:before { content: "\f326"; }
|
|
||||||
.la-stumbleupon-circle:before { content: "\f327"; }
|
|
||||||
.la-subscript:before { content: "\f328"; }
|
|
||||||
.la-subway:before { content: "\f329"; }
|
|
||||||
.la-suitcase:before { content: "\f32a"; }
|
|
||||||
.la-sun-o:before { content: "\f32b"; }
|
|
||||||
.la-superscript:before { content: "\f32c"; }
|
|
||||||
.la-table:before { content: "\f32d"; }
|
|
||||||
.la-tablet:before { content: "\f32e"; }
|
|
||||||
.la-tachometer:before { content: "\f32f"; }
|
|
||||||
.la-tag:before { content: "\f330"; }
|
|
||||||
.la-tags:before { content: "\f331"; }
|
|
||||||
.la-tasks:before { content: "\f332"; }
|
|
||||||
.la-taxi:before { content: "\f333"; }
|
|
||||||
.la-television:before, .la-tv:before { content: "\f334"; }
|
|
||||||
.la-tencent-weibo:before { content: "\f335"; }
|
|
||||||
.la-terminal:before { content: "\f336"; }
|
|
||||||
.la-text-height:before { content: "\f337"; }
|
|
||||||
.la-text-width:before { content: "\f338"; }
|
|
||||||
.la-th:before { content: "\f339"; }
|
|
||||||
.la-th-large:before { content: "\f33a"; }
|
|
||||||
.la-th-list:before { content: "\f33b"; }
|
|
||||||
.la-thumb-tack:before { content: "\f33c"; }
|
|
||||||
.la-thumbs-down:before { content: "\f33d"; }
|
|
||||||
.la-thumbs-o-down:before { content: "\f33e"; }
|
|
||||||
.la-thumbs-o-up:before { content: "\f33f"; }
|
|
||||||
.la-thumbs-up:before { content: "\f340"; }
|
|
||||||
.la-ticket:before { content: "\f341"; }
|
|
||||||
.la-times:before, .la-remove:before { content: "\f342"; }
|
|
||||||
.la-times-circle:before { content: "\f343"; }
|
|
||||||
.la-times-circle-o:before { content: "\f344"; }
|
|
||||||
.la-tint:before { content: "\f345"; }
|
|
||||||
.la-toggle-off:before { content: "\f346"; }
|
|
||||||
.la-toggle-on:before { content: "\f347"; }
|
|
||||||
.la-trademark:before { content: "\f348"; }
|
|
||||||
.la-train:before { content: "\f349"; }
|
|
||||||
.la-transgender:before, .la-intersex:before { content: "\f34a"; }
|
|
||||||
.la-transgender-alt:before { content: "\f34b"; }
|
|
||||||
.la-trash:before { content: "\f34c"; }
|
|
||||||
.la-trash-o:before { content: "\f34d"; }
|
|
||||||
.la-tree:before { content: "\f34e"; }
|
|
||||||
.la-trello:before { content: "\f34f"; }
|
|
||||||
.la-tripadvisor:before { content: "\f350"; }
|
|
||||||
.la-trophy:before { content: "\f351"; }
|
|
||||||
.la-truck:before { content: "\f352"; }
|
|
||||||
.la-try:before { content: "\f353"; }
|
|
||||||
.la-tty:before { content: "\f354"; }
|
|
||||||
.la-tumblr:before { content: "\f355"; }
|
|
||||||
.la-tumblr-square:before { content: "\f356"; }
|
|
||||||
.la-turkish-lira:before { content: "\f357"; }
|
|
||||||
.la-twitch:before { content: "\f358"; }
|
|
||||||
.la-twitter:before { content: "\f359"; }
|
|
||||||
.la-twitter-square:before { content: "\f35a"; }
|
|
||||||
.la-umbrella:before { content: "\f35b"; }
|
|
||||||
.la-underline:before { content: "\f35c"; }
|
|
||||||
.la-undo:before { content: "\f35d"; }
|
|
||||||
.la-university:before { content: "\f35e"; }
|
|
||||||
.la-unlink:before { content: "\f35f"; }
|
|
||||||
.la-unlock:before { content: "\f360"; }
|
|
||||||
.la-unlock-alt:before { content: "\f361"; }
|
|
||||||
.la-upload:before { content: "\f362"; }
|
|
||||||
.la-usd:before { content: "\f363"; }
|
|
||||||
.la-user:before { content: "\f364"; }
|
|
||||||
.la-user-md:before { content: "\f365"; }
|
|
||||||
.la-user-plus:before { content: "\f366"; }
|
|
||||||
.la-user-secret:before { content: "\f367"; }
|
|
||||||
.la-user-times:before { content: "\f368"; }
|
|
||||||
.la-users:before { content: "\f369"; }
|
|
||||||
.la-venus:before { content: "\f36a"; }
|
|
||||||
.la-venus-double:before { content: "\f36b"; }
|
|
||||||
.la-venus-mars:before { content: "\f36c"; }
|
|
||||||
.la-viacoin:before { content: "\f36d"; }
|
|
||||||
.la-video-camera:before { content: "\f36e"; }
|
|
||||||
.la-vimeo:before { content: "\f36f"; }
|
|
||||||
.la-vimeo-square:before { content: "\f370"; }
|
|
||||||
.la-vine:before { content: "\f371"; }
|
|
||||||
.la-vk:before { content: "\f372"; }
|
|
||||||
.la-volume-down:before { content: "\f373"; }
|
|
||||||
.la-volume-off:before { content: "\f374"; }
|
|
||||||
.la-volume-up:before { content: "\f375"; }
|
|
||||||
.la-warning:before { content: "\f376"; }
|
|
||||||
.la-wechat:before { content: "\f377"; }
|
|
||||||
.la-weibo:before { content: "\f378"; }
|
|
||||||
.la-weixin:before { content: "\f379"; }
|
|
||||||
.la-whatsapp:before { content: "\f37a"; }
|
|
||||||
.la-wheelchair:before { content: "\f37b"; }
|
|
||||||
.la-wifi:before { content: "\f37c"; }
|
|
||||||
.la-wikipedia-w:before { content: "\f37d"; }
|
|
||||||
.la-windows:before { content: "\f37e"; }
|
|
||||||
.la-won:before { content: "\f37f"; }
|
|
||||||
.la-wordpress:before { content: "\f380"; }
|
|
||||||
.la-wrench:before { content: "\f381"; }
|
|
||||||
.la-xing:before { content: "\f382"; }
|
|
||||||
.la-xing-square:before { content: "\f383"; }
|
|
||||||
.la-y-combinator:before { content: "\f384"; }
|
|
||||||
.la-y-combinator-square:before { content: "\f385"; }
|
|
||||||
.la-yahoo:before { content: "\f386"; }
|
|
||||||
.la-yc:before { content: "\f387"; }
|
|
||||||
.la-yc-square:before { content: "\f388"; }
|
|
||||||
.la-yelp:before { content: "\f389"; }
|
|
||||||
.la-yen:before { content: "\f38a"; }
|
|
||||||
.la-youtube:before { content: "\f38b"; }
|
|
||||||
.la-youtube-play:before { content: "\f38c"; }
|
|
||||||
.la-youtube-square:before { content: "\f38d"; }
|
|
||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 424 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,5 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
|
||||||
{% block title %}{% trans 'Check e-mail or openid' %}{% endblock title %}
|
{% block title %}{% trans 'Check e-mail or openid' %}{% endblock title %}
|
||||||
@@ -10,20 +9,26 @@
|
|||||||
<h1>{% trans 'Check e-mail or openid' %}</h1>
|
<h1>{% trans 'Check e-mail or openid' %}</h1>
|
||||||
|
|
||||||
<div style="max-width:600px;">
|
<div style="max-width:600px;">
|
||||||
<form method="post" name="check">{% csrf_token %}
|
<form method="post" name="check">
|
||||||
{% bootstrap_form form %}
|
{% csrf_token %}
|
||||||
{% buttons %}
|
<div class="form-group"><label for="id_mail">{% trans 'E-Mail' %}</label>
|
||||||
<button type="submit" class="btn btn-primary">{% trans 'Check' %}</button>
|
<input type="email" name="mail" maxlength="254" minlength="6" class="form-control" placeholder="{% trans 'E-Mail' %}" {% if mailurl %} value="{{ form.mail.value }}" {% endif %} id="id_mail"></div>
|
||||||
<button type="cancel" class="btn btn-danger">{% trans 'Cancel' %}</button>
|
<div class="form-group"><label for="id_openid">{% trans 'OpenID' %}</label>
|
||||||
{% endbuttons %}
|
<input type="text" name="openid" maxlength="255" minlength="11" class="form-control" placeholder="{% trans 'OpenID' %}" {% if openidurl %} value="{{ form.openid.value }}" {% endif %} id="id_openid"></div>
|
||||||
|
<div class="form-group"><label for="id_size">{% trans 'Size' %}</label>
|
||||||
|
<input type="number" name="size" min="5" max="512" class="form-control" placeholder="{% trans 'Size' %}" {% if mailurl or openidurl %} value="{{ form.size.value }}" {% else %} value="100" {% endif %} required id="id_size"></div>
|
||||||
|
<div class="form-group"><label for="id_default_url">{% trans 'Default URL' %}</label>
|
||||||
|
<input type="url" name="default_url" class="form-control" placeholder="{% trans 'Default URL' %}" {% if mailurl or openidurl %} value="{{ form.default_url.value }}" {% endif %} id="id_default_url"></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<button type="submit" class="btn btn-default">{% trans 'Check' %}</button>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if mailurl or openidurl %}
|
{% if mailurl or openidurl %}
|
||||||
|
<hr/>
|
||||||
|
<h2>This is what the avatars will look like depending on the hash and protocol you use:</h2>
|
||||||
<p>
|
<p>
|
||||||
This is what the avatars will look like depending on the hash and protocol you use:<br/>
|
|
||||||
|
|
||||||
<div class="d-none d-lg-block">
|
|
||||||
{% if mail_hash %}
|
{% if mail_hash %}
|
||||||
MD5 hash (mail): {{ mail_hash }}<br/>
|
MD5 hash (mail): {{ mail_hash }}<br/>
|
||||||
SHA256 hash (mail): {{ mail_hash256 }}<br/>
|
SHA256 hash (mail): {{ mail_hash256 }}<br/>
|
||||||
@@ -32,65 +37,45 @@
|
|||||||
{% if openid_hash %}
|
{% if openid_hash %}
|
||||||
SHA256 hash (OpenID): {{ openid_hash }}<br/>
|
SHA256 hash (OpenID): {{ openid_hash }}<br/>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul class="horizontal-list avatar-list centered" style="font-size:smaller;">
|
<div class="row">
|
||||||
{% if mailurl %}
|
{% if mailurl %}
|
||||||
<li>
|
<div class="panel panel-tortin" style="min-width:132px;width:calc({{ size }}px + 32px);float:left;margin-left:30px">
|
||||||
<div style="float:left;">
|
<div class="panel-heading">
|
||||||
<a href="{{ mailurl_secure }}">
|
<h3 class="panel-title">MD5 <i class="fa fa-unlock" title="Secure connection (https)"></i> <i class="fa fa-at" title="mail: {{ form.mail.value }}"></i></h3>
|
||||||
<img src="{{ mailurl_secure }}" style="max-width: {{ size }}px; max-height: {{ size }}px;">
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<a href="{{ mailurl_secure }}">
|
||||||
|
<center><img src="{{ mailurl_secure }}" style="max-width: {{ size }}px; max-height: {{ size }}px;"></center>
|
||||||
</a>
|
</a>
|
||||||
<div style="padding-left:2px; float:inline-end; font-size:{% widthratio size 3 1 %}px;">
|
</div>
|
||||||
<i class="fa fa-unlock" title="Secure connection (https)"></i>
|
</div>
|
||||||
<br/>
|
<div class="panel panel-tortin" style="min-width:132px;width:calc({{ size }}px + 32px);float:left;margin-left:20px">
|
||||||
<i class="fa fa-at" title="mail: {{ form.mail.value }}"></i>
|
<div class="panel-heading">
|
||||||
</div>
|
<h3 class="panel-title">SHA256 <i class="fa fa-unlock" title="Secure connection (https)"></i> <i class="fa fa-at" title="mail: {{ form.mail.value }}"></i></h3>
|
||||||
</div>
|
</div>
|
||||||
<br/>MD5
|
<div class="panel-body">
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<div style="float:left;">
|
|
||||||
<a href="{{ SECURE_BASE_URL }}{{ mail_hash256 }}?s={{ size }}">
|
<a href="{{ SECURE_BASE_URL }}{{ mail_hash256 }}?s={{ size }}">
|
||||||
<img src="{{ SECURE_BASE_URL }}{{ mail_hash256 }}?s={{ size }}" style="max-width: {{ size }}px; max-height: {{ size }}px;">
|
<center><img src="{{ SECURE_BASE_URL }}{{ mail_hash256 }}?s={{ size }}" style="max-width: {{ size }}px; max-height: {{ size }}px;"></center>
|
||||||
</a>
|
</a>
|
||||||
<div style="padding-left:2px; float:inline-end; font-size:{% widthratio size 3 1 %}px;">
|
</div>
|
||||||
<i class="fa fa-unlock" title="Secure connection (https)"></i>
|
</div>
|
||||||
<br/>
|
|
||||||
<i class="fa fa-at" title="mail: {{ form.mail.value }}"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br/>SHA256
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if openidurl %}
|
{% if openidurl %}
|
||||||
<li>
|
<div class="panel panel-tortin" style="min-width:122px;width:calc({{ size }}px + 32px);float:left;margin-left:30px">
|
||||||
<div style="float:left;">
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">SHA256 <i class="fa fa-unlock" title="Secure connection (http)"></i><i class="fa fa-openid" title="openid: {{ form.openid.value }}"></i></h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
<a href="{{ openidurl_secure }}">
|
<a href="{{ openidurl_secure }}">
|
||||||
<img src="{{ openidurl_secure }}" style="max-width: {{ size }}px; max-height: {{ size }}px;">
|
<center><img src="{{ openidurl_secure }}" style="max-width: {{ size }}px; max-height: {{ size }}px;"></center>
|
||||||
</a>
|
</a>
|
||||||
<div style="padding-left:2px; float:inline-end; font-size:{% widthratio size 3 1 %}px">
|
</div>
|
||||||
<i class="fa fa-unlock" title="Secure connection (http)"></i>
|
</div>
|
||||||
<br/>
|
|
||||||
<i class="fa fa-openid" title="openid: {{ form.openid.value }}"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br/>SHA256
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<div style="height:40px"></div>
|
||||||
{# Bad hack in order to have the images for sure inside our "outer" div box #}
|
|
||||||
<!-- Bad hack -->
|
|
||||||
{% if mailurl %}
|
|
||||||
<div style="height: {{ size }}px;"> </div>
|
|
||||||
{% endif %}
|
|
||||||
{% if openidurl %}
|
|
||||||
<div style="height: {{ size }}px;"> </div>
|
|
||||||
{% endif %}
|
|
||||||
<!-- End of bad hack -->
|
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
<ul class="nav navbar-nav" style="flex-direction: row;">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
<li class="nav-item dropdown" id="tab_account">
|
<li class="dropdown" id="tab_account">
|
||||||
<a class="nav-link dropdown-toggle" href="/" id="account_dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<a class="dropdown-toggle" href="#" id="account_dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
{% if request.user.is_authenticated %}
|
{% if request.user.is_authenticated %}
|
||||||
<i class="fa fa-user" aria-hidden="true"></i> {{ request.user }}
|
<i class="fa fa-user" aria-hidden="true"></i> {{ request.user }} ⏷
|
||||||
{% else %}
|
{% else %}
|
||||||
<i class="fa fa-sign-in" aria-hidden="true"></i> Login
|
<i class="fa fa-sign-in" aria-hidden="true"></i> Login ⏷
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-menu dropdown-menu-right" style="position: absolute; right:0; left: auto;" aria-labelledby="navbarDropdownMenuLink">
|
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
|
||||||
{% if request.user.is_authenticated %}
|
{% if request.user.is_authenticated %}
|
||||||
<a class="dropdown-item" href="{% url 'profile' %}"><i class="fa fa-image" aria-hidden="true"></i> {% trans 'Profile' %}</a>
|
<li><a href="{% url 'profile' %}"><i class="fa fa-image" aria-hidden="true"></i> {% trans 'Profile' %}</a></li>
|
||||||
<a class="dropdown-item" href="{% url 'user_preference' %}"><i class="fa fa-cog" aria-hidden="true"></i> {% trans 'Preferences' %}</a>
|
<li><a href="{% url 'user_preference' %}"><i class="fa fa-cog" aria-hidden="true"></i> {% trans 'Preferences' %}</a></li>
|
||||||
<a class="dropdown-item" href="{% url 'import_photo' %}"><i class="fa fa-envelope-square" aria-hidden="true"></i> {% trans 'Import photo via mail address' %}</a>
|
<li><a href="{% url 'import_photo' %}"><i class="fa fa-envelope-square" aria-hidden="true"></i> {% trans 'Import photo via mail address' %}</a></li>
|
||||||
<a class="dropdown-item" href="{% url 'upload_export' %}"><i class="fa fa-file-archive-o" aria-hidden="true"></i> {% trans 'Import libravatar XML export' %}</a>
|
<li><a href="{% url 'upload_export' %}"><i class="fa fa-file-archive-o" aria-hidden="true"></i> {% trans 'Import libravatar XML export' %}</a></li>
|
||||||
<a class="dropdown-item" href="{% url 'logout' %}"><i class="fa fa-sign-out" aria-hidden="true"></i> {% trans 'Logout' %}</a>
|
<li><a href="{% url 'logout' %}"><i class="fa fa-sign-out" aria-hidden="true"></i> {% trans 'Logout' %}</a></li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a class="dropdown-item" href="{% url 'login' %}"><i class="fa fa-sign-in" aria-hidden="true"></i> {% trans 'Local' %}</a>
|
<li><a href="{% url 'login' %}"><i class="fa fa-sign-in" aria-hidden="true"></i> {% trans 'Local' %}</a></li>
|
||||||
<a class="dropdown-item" href="{% url 'new_account' %}"><i class="fa fa-user-plus" aria-hidden="true"></i> {% trans 'Create account' %}</a>
|
<li><a href="{% url 'new_account' %}"><i class="fa fa-user-plus" aria-hidden="true"></i> {% trans 'Create account' %}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% if user.is_staff %}
|
{% if user.is_staff %}
|
||||||
<li class="nav-item" style="margin-left: 5px;">
|
<li>
|
||||||
<a class="nav-link" href="{% url 'admin:index' %}" target="_new"><i class="fa fa-user-secret" aria-hidden="true"></i> {% trans 'Admin' %}</a>
|
<a href="{% url 'admin:index' %}" target="_new"><i class="fa fa-user-secret" aria-hidden="true"></i> {% trans 'Admin' %}</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -1,105 +1,84 @@
|
|||||||
{% extends 'bootstrap.html' %}
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
{% load i18n %}<!DOCTYPE HTML>
|
{% load i18n %}<!DOCTYPE HTML>
|
||||||
|
|
||||||
{% block bootstrap4_extra_head %}
|
|
||||||
{% include 'header.html' %}
|
{% include 'header.html' %}
|
||||||
<title>iVatar :: {% block title %}{% trans 'Freeing the Web, one face at a time!' %}{% endblock title %}</title>
|
<title>iVatar :: {% block title %}{% trans 'Freeing the Web, one face at a time!' %}{% endblock title %}</title>
|
||||||
{% endblock bootstrap4_extra_head %}
|
|
||||||
|
|
||||||
{% spaceless %}{% block bootstrap4_content %}
|
{% spaceless %}
|
||||||
<div id="page">
|
<div id="page">
|
||||||
<div id="header">
|
<div id="header">
|
||||||
{% block topbar_base %}
|
{% block topbar_base %}
|
||||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
<nav class="navbar navbar-tortin">
|
||||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
|
<div class="container-fluid">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<div class="navbar-header">
|
||||||
</button>
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
|
||||||
|
<span class="sr-only">Toggle navigation</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
{% block topbar %}
|
{% block topbar %}
|
||||||
{% block site_brand %}
|
{% block site_brand %}
|
||||||
<div id="logo">
|
{% if user.is_anonymous %}
|
||||||
{% if user.is_anonymous %}
|
<a class="navbar-brand" href="/">
|
||||||
<a class="navbar-brand d-none d-lg-block" href="/">
|
{% else %}
|
||||||
<img src="{% static 'img/logo.png' %}" width="60" height="60" class="d-inline-block align-top"
|
<a class="navbar-brand" href="{% url 'profile' %}">
|
||||||
alt="{% trans 'Home' %}">
|
{% endif %}
|
||||||
|
ivatar
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
</div>
|
||||||
<a class="navbar-brand d-none d-lg-block" href="{% url 'profile' %}">
|
|
||||||
<img src="{% static 'img/logo.png' %}" width="60" height="60" class="d-inline-block align-top"
|
|
||||||
alt="{% trans 'Profile' %}">
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<span class="d-none d-lg-block">
|
|
||||||
<div id="site-branding">
|
|
||||||
<span id="site-name">
|
|
||||||
i<span class="bolder">vatar</span>
|
|
||||||
</span>
|
|
||||||
<br/>
|
|
||||||
freeing the web one face at a time
|
|
||||||
</div>
|
|
||||||
</span>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block nav %}
|
{% block nav %}
|
||||||
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
<div class="collapse navbar-collapse" id="navbar">
|
||||||
<ul class="navbar-nav mr-auto nav">
|
<ul class="nav navbar-nav">
|
||||||
{% if not user.is_anonymous %}
|
{% if not user.is_anonymous %}
|
||||||
<li class="nav-item" style="margin-left: 5px;">
|
<li>
|
||||||
<a class="nav-link" href="/"><i class="fa fa-home" aria-hidden="true"></i>
|
<a href="/"><i class="fa fa-home" aria-hidden="true"></i>
|
||||||
{% trans 'Home' %}
|
{% trans 'Home' %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li class="nav-item" style="margin-left: 5px;">
|
<li>
|
||||||
<a class="nav-link" href="TODO contact"><i class="fa fa-envelope" aria-hidden="true"></i>
|
<a class="nav-link" href="TODO contact"><i class="fa fa-envelope" aria-hidden="true"></i>
|
||||||
{% trans 'Contact' %}
|
{% trans 'Contact' %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item" style="margin-left: 5px;">
|
<li>
|
||||||
<a class="nav-link" href="TODO security"><i class="fa fa-user-secret" aria-hidden="true"></i>
|
<a href="TODO security"><i class="fa fa-user-secret" aria-hidden="true"></i>
|
||||||
{% trans 'Security' %}
|
{% trans 'Security' %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item dropdown" id="tab_tools">
|
<li class="dropdown" id="tab_tools">
|
||||||
<a class="nav-link dropdown-toggle" href="/" id="tools_dropdown"
|
<a class="dropdown-toggle" href="#" id="tools_dropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{% trans 'Tools' %}">
|
||||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{% trans 'Tools' %}">
|
|
||||||
<i class="fa fa-wrench" aria-hidden="true"></i>
|
<i class="fa fa-wrench" aria-hidden="true"></i>
|
||||||
{% trans 'Tools' %}
|
{% trans 'Tools' %} ⏷
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="tools_dropdown">
|
<ul class="dropdown-menu" aria-labelledby="tools_dropdown">
|
||||||
<a id="tools-check" class="dropdown-item"
|
<li><a id="tools-check" href="{% url 'tools_check' %}">
|
||||||
href="{% url 'tools_check' %}">
|
|
||||||
<i class="fa fa-check-square" aria-hidden="true"></i> {% trans 'Check' %}
|
<i class="fa fa-check-square" aria-hidden="true"></i> {% trans 'Check' %}
|
||||||
</a>
|
</a></li>
|
||||||
</div>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
{% block account_bar %}{% include "_account_bar.html" %}{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</div>
|
||||||
{% block account_bar %}{% include "_account_bar.html" %}{% endblock %}
|
</nav>
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</nav>
|
</nav>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% autoescape off %}{% bootstrap_messages %}{% endautoescape %}
|
{% autoescape off %}{% endautoescape %}
|
||||||
|
|
||||||
<div id="outer">
|
<div class="container">
|
||||||
<div id="content">
|
|
||||||
{% block content %}{% endblock content %}
|
{% block content %}{% endblock content %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
{% block footer %}{% include 'footer.html' %}{% endblock footer %}
|
{% block footer %}{% include 'footer.html' %}{% endblock footer %}
|
||||||
</div>
|
</div>
|
||||||
|
{% endspaceless %}
|
||||||
|
|
||||||
{% endblock %}{% endspaceless %}
|
<script src="{% static '/js/bootstrap.min.js' %}"></script>
|
||||||
|
<script src="{% static '/js/ivatar.js' %}"></script>
|
||||||
{% block bootstrap4_after_content %}
|
|
||||||
<script src="{% static '/js/jquery-3.3.1.slim.min.js' %}" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
|
||||||
<script src="{% static '/js/ivatar.js' %}" defer></script>
|
|
||||||
{{ settings }}
|
{{ settings }}
|
||||||
{% endblock bootstrap4_after_content %}
|
|
||||||
|
|||||||
19
templates/base_home.html
Normal file
19
templates/base_home.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{% load static %}
|
||||||
|
{% load i18n %}<!DOCTYPE HTML>
|
||||||
|
{% include 'header.html' %}
|
||||||
|
<title>iVatar :: {% block title %}{% trans 'Freeing the Web, one face at a time!' %}{% endblock title %}</title>
|
||||||
|
|
||||||
|
{% spaceless %}
|
||||||
|
<div id="page">
|
||||||
|
|
||||||
|
{% autoescape off %}{% endautoescape %}
|
||||||
|
|
||||||
|
{% block content %}{% endblock content %}
|
||||||
|
|
||||||
|
{% block footer %}{% include 'footer.html' %}{% endblock footer %}
|
||||||
|
</div>
|
||||||
|
{% endspaceless %}
|
||||||
|
|
||||||
|
<script src="{% static '/js/bootstrap.min.js' %}"></script>
|
||||||
|
<script src="{% static '/js/ivatar.js' %}"></script>
|
||||||
|
{{ settings }}
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
{% extends 'bootstrap4/bootstrap4.html' %}
|
|
||||||
|
|
||||||
{% block bootstrap4_title %}{% block title %}{% endblock %}{% endblock %}
|
|
||||||
@@ -1,7 +1,15 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
<div id="footer">
|
<div class="clipper-footer"></div>
|
||||||
<a rel="license" href="http://www.gnu.org/licenses/agpl-3.0.html" id="agpl-button" title="{% trans 'GNU Affero General Public License' %}"></a> {% blocktrans %}<b>{{ site_name }}</b> is an avatar service running the <a href="https://git.linux-kernel.at/oliver/ivatar">ivatar</a>
|
<footer>
|
||||||
software, version {{ ivatar_version }}{% endblocktrans %}
|
<div class="container">
|
||||||
{% block footer %}{% endblock footer %}
|
<div class="pull-left">
|
||||||
|
<p><b>{% blocktrans %}{{ site_name }}</b> is an service running the <a href="https://launchpad.net/libravatar">ivatar</a> software, version {{ ivatar_version }} under the <a href="http://www.gnu.org/licenses/agpl-3.0.html">AGPLv3.0</a> license.{% endblocktrans %}
|
||||||
|
{% block footer %}{% endblock footer %}</p>
|
||||||
|
</div>
|
||||||
|
<div class="pull-right">
|
||||||
|
<a href="http://vtex.github.io/tortin">Get <strong>Tortin</strong> Theme</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -18,8 +18,11 @@
|
|||||||
<link rel="icon" type="image/png" href="{% static '/img/nobody/128.png' %}" sizes="128x128">
|
<link rel="icon" type="image/png" href="{% static '/img/nobody/128.png' %}" sizes="128x128">
|
||||||
<link rel="icon" type="image/png" href="{% static '/img/nobody/195.png' %}" sizes="195x195">
|
<link rel="icon" type="image/png" href="{% static '/img/nobody/195.png' %}" sizes="195x195">
|
||||||
<link rel="mask-icon" href="{% static '/img/safari-pinned-tab.svg' %}" color="#fa711f">
|
<link rel="mask-icon" href="{% static '/img/safari-pinned-tab.svg' %}" color="#fa711f">
|
||||||
<link rel="stylesheet" href="{% static '/css/ivatar.css' %}" type="text/css">
|
<link rel="stylesheet" href="{% static '/css/bootstrap.min.css' %}" type="text/css">
|
||||||
<link rel="stylesheet" href="{% static 'line-awesome/css/line-awesome-font-awesome.min.css' %}">
|
<link rel="stylesheet" href="{% static '/css/tortin.css' %}" type="text/css">
|
||||||
|
<link rel="stylesheet" href="{% static '/css/fonts.css' %}" type="text/css">
|
||||||
|
<link rel="stylesheet" href="{% static '/css/fontawesome.min.css' %}">
|
||||||
|
<script src="{% static '/js/jquery-3.3.1.slim.min.js' %}"></script>
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
{% if user.userpreference and user.userpreference.theme != 'default' %}
|
{% if user.userpreference and user.userpreference.theme != 'default' %}
|
||||||
<link rel="stylesheet" href="{% static 'css/' %}{{ user.userpreference.theme }}.css" type="text/css">
|
<link rel="stylesheet" href="{% static 'css/' %}{{ user.userpreference.theme }}.css" type="text/css">
|
||||||
@@ -27,8 +30,8 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<link rel="manifest" href="/manifest.json">
|
<link rel="manifest" href="/manifest.json">
|
||||||
<meta name="msapplication-TileImage" content="{% static '/img/nobody/144.png' %}">
|
<meta name="msapplication-TileImage" content="{% static '/img/nobody/144.png' %}">
|
||||||
<meta name="msapplication-TileColor" content="#fa711f">
|
<meta name="msapplication-TileColor" content="#36b7d7">
|
||||||
<meta name="apple-mobile-web-app-title" content="ivatar">
|
<meta name="apple-mobile-web-app-title" content="ivatar">
|
||||||
<meta name="application-name" content="ivatar">
|
<meta name="application-name" content="ivatar">
|
||||||
<meta name="theme-color" content="#fa711f">
|
<meta name="theme-color" content="#36b7d7">
|
||||||
{% block header %}{% endblock header %}
|
{% block header %}{% endblock header %}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base_home.html' %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load bootstrap4 %}
|
|
||||||
|
|
||||||
{% block title %}{% trans 'federated avatar hosting service' %}{% endblock %}
|
{% block title %}{% trans 'federated avatar hosting service' %}{% endblock %}
|
||||||
|
|
||||||
@@ -9,29 +8,54 @@
|
|||||||
|
|
||||||
{% url 'new_account' as new_account_url %}
|
{% url 'new_account' as new_account_url %}
|
||||||
|
|
||||||
<div id="action-panel">
|
<div class="hero">
|
||||||
{% if not user.is_authenticated and not disable_signup %}
|
<div class="container">
|
||||||
<p>{% blocktrans %}Create a <a href="{{ new_account_url }}">free account</a>{% endblocktrans %}</p>
|
<header>
|
||||||
{% endif %}
|
<h1>{% trans 'ivatar' %}</h1>
|
||||||
<p>{% trans 'Download the <a href="https://git.linux-kernel.at/oliver/ivatar">source code</a>' %}</p>
|
<h2>{% trans 'freeing the web one face at a time' %}</h2>
|
||||||
<p>{% trans 'File <a href="https://git.linux-kernel.at/oliver/ivatar/issues">bugs</a>' %}</p>
|
<a href="/accounts/login/" class="btn btn-lg btn-primary">{% trans 'Login' %}</a>
|
||||||
<p>{% trans 'Read our <a href="https://git.linux-kernel.at/oliver/ivatar/wikis">wiki</a>' %}</p>
|
<a href="/accounts/new/" class="btn btn-lg btn-primary">{% trans 'Sign up' %}</a>
|
||||||
<p>{% trans 'Follow us on <a href="https://identi.ca/libravatar">Identica</a>' %} / <a href="https://twitter.com/libravatar">Twitter</a></p>
|
<a href="/tools/check/" class="btn btn-lg btn-primary">{% trans 'Check email' %}</a>
|
||||||
<p id="contribute-button"><a href="https://git.linux-kernel.at/oliver/ivatar/wikis/contribute/">{% trans 'Contribute!' %}</a></p>
|
</header>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>{% blocktrans %}ivatar is a service which delivers your avatar (profile picture) to other websites. If you <a href="{{ new_account_url }}">create an account</a> with us, your photo could start popping up next to forum posts or blog comments on any site where you left your email address.{% endblocktrans %} {% trans '<a href="https://git.linux-kernel.at/oliver/ivatar/wikis">Read more...</a>' %}</p>
|
|
||||||
|
|
||||||
<h2>{% trans 'Federated Open Source Service' %}</h2>
|
|
||||||
|
|
||||||
<p>{% trans 'This service is powered by <a href="https://www.gnu.org/licenses/agpl.html">Free and Open Source software</a> and allows owners of a domain name to <a href="https://git.linux-kernel.at/oliver/ivatar/wikis/running-your-own">run their own instance</a> of ivatar and serve avatars themselves.' %}</p>
|
|
||||||
|
|
||||||
<h2>{% trans 'Simple API for Developers' %}</h2>
|
|
||||||
|
|
||||||
<p>{% trans 'Application developers can easily add support for this service using our <a href="https://git.linux-kernel.at/oliver/ivatar/wikis/api">simple API</a> or one of the <a href="https://git.linux-kernel.at/oliver/ivatar/wikis/libraries">libraries and plugins</a> available for a number of platforms and languages.' %}</p>
|
|
||||||
|
|
||||||
<p>{% trans 'Big thanks to our sponsors without whom none of this would be possible!' %}</p>
|
|
||||||
<div id="sponsors">
|
|
||||||
<a href="https://fedoraprojec.org/"><img src="{% static '/img/Fedora_logo.png' %}" title="Fedora Project" alt="{% trans 'Fedora Logo' %}"></a>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="social"></div>
|
||||||
|
<div class="clipper"></div>
|
||||||
|
<section class="content">
|
||||||
|
<div class="container">
|
||||||
|
<div class="text-center">
|
||||||
|
<h2>{% trans 'The open avatar service' %}</h2>
|
||||||
|
<p class="lead">{% blocktrans %}ivatar is a service which delivers your avatar (profile picture) to other websites. If you create an account with us, your photo could start popping up next to forum posts or blog comments on any site where you left your email address.{% endblocktrans %}<br>
|
||||||
|
<a href="https://wiki.libravatar.org/description/">{% trans 'Read more...' %}</a></p>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
<div class="row">
|
||||||
|
<section class="col-md-8">
|
||||||
|
<h1>{% trans 'Federated Open Source Service' %}</h1>
|
||||||
|
<p class="lead">{% trans 'This service is powered by <a href="https://www.gnu.org/licenses/agpl.html">Free and Open Source software</a> and allows owners of a domain name to <a href="https://wiki.libravatar.org/running_your_own/">run their own instance</a> of ivatar and serve avatars themselves.' %}</p>
|
||||||
|
<hr>
|
||||||
|
<h1>{% trans 'Simple API for Developers' %}</h1>
|
||||||
|
<p class="lead">{% trans 'Application developers can easily add support for this service using our <a href="https://wiki.libravatar.org/api/">simple API</a> or one of the <a href="https://wiki.libravatar.org/libraries/">libraries and plugins</a> available for a number of platforms and languages.' %}</p>
|
||||||
|
<hr/>
|
||||||
|
<a class="btn btn-default btn-lg btn-block" href="https://wiki.libravatar.org/contribute/">{% trans 'Contribute' %}</a>
|
||||||
|
</section>
|
||||||
|
<section class="col-md-4">
|
||||||
|
<h1>Useful links</h1>
|
||||||
|
<a class="btn btn-default" href="https://wiki.libravatar.org/talk_to_us/">{% trans 'Contact us' %}</a><br/>
|
||||||
|
<a class="btn btn-default" href="https://wiki.libravatar.org/security/">{% trans 'Security' %}</a><br/>
|
||||||
|
<a class="btn btn-default" href="https://code.launchpad.net/libravatar">{% trans 'Source code' %}</a><br/>
|
||||||
|
<a class="btn btn-default" href="https://bugs.launchpad.net/libravatar">{% trans 'Report bugs' %}</a><br/>
|
||||||
|
<a class="btn btn-default" href="https://answers.launchpad.net/libravatar">{% trans 'Questions' %}</a><br/>
|
||||||
|
<a class="btn btn-default" href="https://wiki.libravatar.org/">{% trans 'Wiki' %}</a><br/>
|
||||||
|
<a class="btn btn-default" href="http://blog.libravatar.org/">{% trans 'Blog' %}</a><br/>
|
||||||
|
<h3>{% trans 'Social media' %}</h3>
|
||||||
|
<a class="btn btn-default" href="https://identi.ca/libravatar">Identica</a><br/>
|
||||||
|
<a class="btn btn-default" href="https://twitter.com/libravatar">Twitter</a><br/>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<h3>{% trans 'Big thanks to our sponsors without whom none of this would be possible!' %}</h3>
|
||||||
|
<a href="https://fedoraproject.org/"><img src="{% static '/img/Fedora_logo.png' %}" title="Fedora Project" alt="{% trans 'Fedora Logo' %}"></a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user