Inicio de diseño
This commit is contained in:
parent
f55a88b3da
commit
fb230145f3
|
@ -1,6 +1,9 @@
|
||||||
|
import requests
|
||||||
|
import shutil
|
||||||
|
import random
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
class Gender(models.Model):
|
class Gender(models.Model):
|
||||||
|
@ -8,10 +11,10 @@ class Gender(models.Model):
|
||||||
name = models.CharField(max_length=250)
|
name = models.CharField(max_length=250)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ['name']
|
unique_together = ["name"]
|
||||||
ordering = ['name']
|
ordering = ["name"]
|
||||||
verbose_name = 'Género'
|
verbose_name = "Género"
|
||||||
verbose_name_plural = 'Generos'
|
verbose_name_plural = "Generos"
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
@ -19,162 +22,167 @@ class Gender(models.Model):
|
||||||
|
|
||||||
class Country(models.Model):
|
class Country(models.Model):
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
name = models.CharField(max_length=250, verbose_name='País')
|
name = models.CharField(max_length=250, verbose_name="País")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ['name']
|
unique_together = ["name"]
|
||||||
ordering = ['name']
|
ordering = ["name"]
|
||||||
verbose_name = 'País'
|
verbose_name = "País"
|
||||||
verbose_name_plural = 'Paises'
|
verbose_name_plural = "Paises"
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class PersonQuerySet(models.QuerySet):
|
class PersonQuerySet(models.QuerySet):
|
||||||
|
|
||||||
def directors(self):
|
def directors(self):
|
||||||
rows = self.filter(is_director=True).values_list('name', flat=True)
|
rows = self.filter(is_director=True).values_list("name", flat=True)
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
def actors(self):
|
def actors(self):
|
||||||
rows = self.filter(is_actor=True).values_list('name', flat=True)
|
rows = self.filter(is_actor=True).values_list("name", flat=True)
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
|
|
||||||
class Person(models.Model):
|
class Person(models.Model):
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
name = models.CharField('Nombre',
|
name = models.CharField("Nombre", max_length=500)
|
||||||
max_length=500)
|
country = models.ForeignKey(
|
||||||
country = models.ForeignKey(Country,
|
Country, related_name="country", on_delete=models.PROTECT
|
||||||
related_name='country', on_delete=models.PROTECT)
|
)
|
||||||
date_born = models.DateField('Fecha de nacimiento',
|
date_born = models.DateField("Fecha de nacimiento", null=True, blank=True)
|
||||||
null=True, blank=True)
|
is_actor = models.BooleanField("Es Actor", default=False)
|
||||||
is_actor = models.BooleanField('Es Actor',
|
is_director = models.BooleanField("Es Director", default=False)
|
||||||
default=False)
|
is_woman = models.BooleanField("Es mujer", default=False)
|
||||||
is_director = models.BooleanField('Es Director',
|
photo = models.ImageField(
|
||||||
default=False)
|
"Fotografía", upload_to="%Y/%m/%d/", null=True, blank=True
|
||||||
is_woman = models.BooleanField('Es mujer',
|
)
|
||||||
default=False)
|
|
||||||
photo = models.ImageField('Fotografía', upload_to='%Y/%m/%d/',
|
|
||||||
null=True, blank=True)
|
|
||||||
objects = PersonQuerySet.as_manager()
|
objects = PersonQuerySet.as_manager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ['name']
|
unique_together = ["name"]
|
||||||
ordering = ['name']
|
ordering = ["name"]
|
||||||
verbose_name = 'Persona'
|
verbose_name = "Persona"
|
||||||
verbose_name_plural = 'Personas'
|
verbose_name_plural = "Personas"
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class MovieQuerySet(models.QuerySet):
|
class MovieQuerySet(models.QuerySet):
|
||||||
|
|
||||||
def _to_str(self, q):
|
def _to_str(self, q):
|
||||||
return ','.join([r.name for r in q.all()])
|
return ",".join([r.name for r in q.all()])
|
||||||
|
|
||||||
def _to_link(self, file_name):
|
def _to_link(self, file_name):
|
||||||
# ~ folder = file_name[0].upper()
|
# ~ folder = file_name[0].upper()
|
||||||
# ~ if folder.isdigit():
|
# ~ if folder.isdigit():
|
||||||
# ~ folder = '0'
|
# ~ folder = '0'
|
||||||
url = settings.URL_CDN.format(file_name)
|
url = settings.URL_CDN.format(file_name)
|
||||||
return url
|
return url
|
||||||
|
|
||||||
def _to_image(self, img, director=''):
|
def _to_image(self, img, director=""):
|
||||||
data = ''
|
if settings.DEBUG:
|
||||||
if img:
|
path = Path(settings.BASE_DIR + img.url)
|
||||||
url = '../'
|
remote = settings.URL_CDN.format(img.url)
|
||||||
if director:
|
remote = remote.replace("/media/", "")
|
||||||
url = '../../'
|
if not path.exists():
|
||||||
data = url + img.url
|
if not path.parent.exists():
|
||||||
return data
|
path.parent.mkdir()
|
||||||
|
res = requests.get(remote, stream=True)
|
||||||
|
if res.status_code == 200:
|
||||||
|
with open(path, "wb") as f:
|
||||||
|
shutil.copyfileobj(res.raw, f)
|
||||||
|
url = ""
|
||||||
|
if director:
|
||||||
|
url = "../../"
|
||||||
|
return url + img.url
|
||||||
|
|
||||||
def to_dict(self, query='', director='', id=0):
|
def random_pick (self, random_max = 5, **kwargs):
|
||||||
rows = self.all().order_by('-id')[:10]
|
all = list(Movie.objects.filter(**kwargs).values())
|
||||||
if query == 'all':
|
if len(all) > random_max:
|
||||||
rows = self.all()
|
return random.sample(all, random_max)
|
||||||
elif id:
|
|
||||||
rows = self.filter(id=id)
|
|
||||||
director = ' '
|
|
||||||
else:
|
else:
|
||||||
if director:
|
return all
|
||||||
rows = self.filter(directors__name__iexact=director)
|
|
||||||
elif query:
|
|
||||||
rows = self.filter(name__icontains=query)
|
|
||||||
|
|
||||||
movies = []
|
def top_pick (self, key, top_max = 5):
|
||||||
for row in rows:
|
all = list(Movie.objects.order_by(f'-{key}').values())
|
||||||
data = {}
|
return all[:top_max]
|
||||||
data['id'] = row.id
|
|
||||||
data['url'] = self._to_link(row.file_name)
|
|
||||||
data['name'] = row.name
|
|
||||||
data['year'] = row.year
|
|
||||||
data['original_name'] = row.original_name
|
|
||||||
data['duration'] = row.duration
|
|
||||||
data['director'] = self._to_str(row.directors)
|
|
||||||
data['country'] = self._to_str(row.countries)
|
|
||||||
data['count'] = row.count
|
|
||||||
data['image'] = self._to_image(row.cartel, director)
|
|
||||||
movies.append(data)
|
|
||||||
|
|
||||||
matrix = []
|
def top_random_pick(self, key, top_max = 5):
|
||||||
for i in range (0, len(movies), 4):
|
all = list(Movie.objects.order_by(f'-{key}').values())
|
||||||
matrix.append(movies[i:i+4])
|
top = []
|
||||||
return matrix
|
for movie in all:
|
||||||
|
if movie[key] == all[0][key]:
|
||||||
|
top.append(movie)
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
if len(top) > top_max:
|
||||||
|
return random.sample(top, top_max)
|
||||||
|
else:
|
||||||
|
return top
|
||||||
|
|
||||||
|
def home_pick(self):
|
||||||
|
genders = list(Gender.objects.values_list('id', flat = True))
|
||||||
|
sections = {
|
||||||
|
'Novedades': self.top_pick('id'),
|
||||||
|
'Mejor valorados': self.top_random_pick('stars'),
|
||||||
|
'Más descargados': self.top_pick('count'),
|
||||||
|
'genders': {},
|
||||||
|
}
|
||||||
|
for gender in genders:
|
||||||
|
key = Gender.objects.get(pk=gender).name
|
||||||
|
sections['genders'][key] = self.random_pick(genders=gender)
|
||||||
|
return sections
|
||||||
|
|
||||||
def get_directors(self):
|
def get_directors(self):
|
||||||
data = self.distinct().values_list(
|
data = (
|
||||||
'directors__name', flat=True).order_by('directors')
|
self.distinct()
|
||||||
|
.values_list("directors__name", flat=True)
|
||||||
|
.order_by("directors")
|
||||||
|
)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def upload_cartel(instance, filename):
|
def upload_cartel(instance, filename):
|
||||||
first = filename[0].upper()
|
first = filename[0].upper()
|
||||||
if first.isdigit():
|
if first.isdigit():
|
||||||
first = '0'
|
first = "0"
|
||||||
return f'{first}/{filename}'
|
return f"{first}/{filename}"
|
||||||
|
|
||||||
|
|
||||||
class Movie(models.Model):
|
class Movie(models.Model):
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
name = models.CharField('Nombre',
|
name = models.CharField("Nombre", max_length=1000)
|
||||||
max_length=1000)
|
original_name = models.CharField(
|
||||||
original_name = models.CharField('Nombre original',
|
"Nombre original", max_length=1000, default="", blank=True
|
||||||
max_length=1000, default='', blank=True)
|
)
|
||||||
file_name = models.CharField('Nombre archivo',
|
file_name = models.CharField(
|
||||||
max_length=1000, default='', blank=True)
|
"Nombre archivo", max_length=1000, default="", blank=True
|
||||||
year = models.PositiveSmallIntegerField('Año',
|
)
|
||||||
default=1900)
|
year = models.PositiveSmallIntegerField("Año", default=1900)
|
||||||
duration = models.PositiveSmallIntegerField('Duración',
|
duration = models.PositiveSmallIntegerField("Duración", default=0)
|
||||||
default=0)
|
directors = models.ManyToManyField(
|
||||||
directors = models.ManyToManyField(Person, verbose_name='Director',
|
Person, verbose_name="Director", related_name="directors"
|
||||||
related_name='directors')
|
)
|
||||||
actors = models.ManyToManyField(Person,
|
actors = models.ManyToManyField(Person, related_name="actors", blank=True)
|
||||||
related_name='actors', blank=True)
|
countries = models.ManyToManyField(
|
||||||
countries = models.ManyToManyField(Country,
|
Country, related_name="countries", verbose_name="País", blank=True
|
||||||
related_name='countries', verbose_name='País', blank=True)
|
)
|
||||||
genders = models.ManyToManyField(Gender,
|
genders = models.ManyToManyField(
|
||||||
related_name='genders', verbose_name='Género', blank=True)
|
Gender, related_name="genders", verbose_name="Género", blank=True
|
||||||
cartel = models.ImageField('Cartel', upload_to=upload_cartel,
|
)
|
||||||
null=True, blank=True)
|
cartel = models.ImageField("Cartel", upload_to=upload_cartel, null=True, blank=True)
|
||||||
count = models.PositiveIntegerField('Descargas',
|
count = models.PositiveIntegerField("Descargas", default=0)
|
||||||
default=0)
|
stars = models.PositiveSmallIntegerField("Estrellas", default=0)
|
||||||
stars = models.PositiveSmallIntegerField('Estrellas',
|
published = models.BooleanField("¿Publicar?", default=True)
|
||||||
default=0)
|
is_digital = models.BooleanField("Es digital", default=False)
|
||||||
published = models.BooleanField('¿Publicar?',
|
|
||||||
default=True)
|
|
||||||
is_digital = models.BooleanField('Es digital',
|
|
||||||
default=False)
|
|
||||||
objects = MovieQuerySet.as_manager()
|
objects = MovieQuerySet.as_manager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ['name', 'original_name']
|
unique_together = ["name", "original_name"]
|
||||||
ordering = ['name']
|
ordering = ["name"]
|
||||||
verbose_name = 'Película'
|
verbose_name = "Película"
|
||||||
verbose_name_plural = 'Películas'
|
verbose_name_plural = "Películas"
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
.navbar.is-fixed-top {
|
||||||
|
position: sticky;
|
||||||
|
top: -1px;
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
|
@ -0,0 +1,16 @@
|
||||||
|
// Para menú en móviles; cfr: https://bulma.io/documentation/components/navbar/#navbar-burger
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
// Get all "navbar-burger" elements
|
||||||
|
const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
|
||||||
|
// Add a click event on each of them
|
||||||
|
$navbarBurgers.forEach( el => {
|
||||||
|
el.addEventListener('click', () => {
|
||||||
|
// Get the target from the "data-target" attribute
|
||||||
|
const target = el.dataset.target;
|
||||||
|
const $target = document.getElementById(target);
|
||||||
|
// Toggle the "is-active" class on both the "navbar-burger" and the "navbar-menu"
|
||||||
|
el.classList.toggle('is-active');
|
||||||
|
$target.classList.toggle('is-active');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -7,58 +7,9 @@ from .models import Movie, Person
|
||||||
|
|
||||||
|
|
||||||
def home(request):
|
def home(request):
|
||||||
context = {}
|
context = {'sections': Movie.objects.home_pick()}
|
||||||
return render(request, 'home.html', context)
|
return render(request, 'home.html', context)
|
||||||
|
|
||||||
|
def search (request):
|
||||||
def movies(request, args=''):
|
context = {}
|
||||||
if args:
|
return render(request, 'search.html', context)
|
||||||
try:
|
|
||||||
id = int(args)
|
|
||||||
return by_id(request, id)
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
count = 0
|
|
||||||
data = Movie.objects.to_dict(args.strip())
|
|
||||||
directors = Person.objects.directors()
|
|
||||||
if data:
|
|
||||||
count = (len(data) - 1) * 4 + (len(data[-1]))
|
|
||||||
context = {'movies': data, 'args': args, 'count': count,
|
|
||||||
'directors': directors, 'selected_director': ''}
|
|
||||||
return render(request, 'movies.html', context)
|
|
||||||
|
|
||||||
|
|
||||||
def by_id(request, id):
|
|
||||||
count = 0
|
|
||||||
data = Movie.objects.to_dict(id=id)
|
|
||||||
directors = Person.objects.directors()
|
|
||||||
if data:
|
|
||||||
count = (len(data) - 1) * 4 + (len(data[-1]))
|
|
||||||
context = {'movies': data, 'args': id, 'count': count,
|
|
||||||
'directors': directors, 'selected_director': ''}
|
|
||||||
return render(request, 'movies.html', context)
|
|
||||||
|
|
||||||
|
|
||||||
def by_director(request, name):
|
|
||||||
data = Movie.objects.to_dict(director=name)
|
|
||||||
directors = Person.objects.directors()
|
|
||||||
count = (len(data) - 1) * 4 + (len(data[-1]))
|
|
||||||
context = {'movies': data, 'args': 'by_director', 'count': count,
|
|
||||||
'directors': directors, 'selected_director': name}
|
|
||||||
return render(request, 'movies.html', context)
|
|
||||||
|
|
||||||
|
|
||||||
def addcount(request, id):
|
|
||||||
response = ''
|
|
||||||
if id:
|
|
||||||
try:
|
|
||||||
movie = Movie.objects.get(id=id)
|
|
||||||
count = movie.count
|
|
||||||
movie.count = F('count') + 1
|
|
||||||
movie.save()
|
|
||||||
response = count + 1
|
|
||||||
except Movie.DoesNotExist:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return HttpResponse(response)
|
|
||||||
|
|
|
@ -18,12 +18,10 @@ v1_api.register(ResourceMovies())
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.home, name='home'),
|
path('', views.home, name='home'),
|
||||||
path('movies/', views.movies, name='movies'),
|
path('search/', views.search, name='search'),
|
||||||
path('movies/<str:args>', views.movies, name='movies'),
|
#path('movies/<str:args>', views.movies, name='movies'),
|
||||||
path('movies/director/<str:name>', views.by_director, name='by_director'),
|
|
||||||
path('addcount/<int:id>/', views.addcount, name='addcount'),
|
|
||||||
path('ultimas/rss/', LatestMoviesFeed()),
|
path('ultimas/rss/', LatestMoviesFeed()),
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
path('api/', include(v1_api.urls)),
|
#path('api/', include(v1_api.urls)),
|
||||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ select.admin-autocomplete {
|
||||||
|
|
||||||
.select2-container--admin-autocomplete.select2-container--focus .select2-selection,
|
.select2-container--admin-autocomplete.select2-container--focus .select2-selection,
|
||||||
.select2-container--admin-autocomplete.select2-container--open .select2-selection {
|
.select2-container--admin-autocomplete.select2-container--open .select2-selection {
|
||||||
border-color: #999;
|
border-color: var(--body-quiet-color);
|
||||||
min-height: 30px;
|
min-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,13 +29,13 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--single {
|
.select2-container--admin-autocomplete .select2-selection--single {
|
||||||
background-color: #fff;
|
background-color: var(--body-bg);
|
||||||
border: 1px solid #ccc;
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered {
|
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered {
|
||||||
color: #444;
|
color: var(--body-fg);
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder {
|
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder {
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow {
|
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow {
|
||||||
|
@ -80,7 +80,7 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single {
|
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single {
|
||||||
background-color: #eee;
|
background-color: var(--darkened-bg);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,8 +94,8 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--multiple {
|
.select2-container--admin-autocomplete .select2-selection--multiple {
|
||||||
background-color: white;
|
background-color: var(--body-bg);
|
||||||
border: 1px solid #ccc;
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
cursor: text;
|
cursor: text;
|
||||||
}
|
}
|
||||||
|
@ -104,8 +104,10 @@ select.admin-autocomplete {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0 5px;
|
padding: 0 10px 5px 5px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li {
|
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li {
|
||||||
|
@ -113,7 +115,7 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder {
|
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder {
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
@ -123,11 +125,13 @@ select.admin-autocomplete {
|
||||||
float: right;
|
float: right;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice {
|
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice {
|
||||||
background-color: #e4e4e4;
|
background-color: var(--darkened-bg);
|
||||||
border: 1px solid #ccc;
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -137,7 +141,7 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove {
|
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -145,7 +149,7 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover {
|
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||||
|
@ -163,12 +167,12 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple {
|
.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple {
|
||||||
border: solid #999 1px;
|
border: solid var(--body-quiet-color) 1px;
|
||||||
outline: 0;
|
outline: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple {
|
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple {
|
||||||
background-color: #eee;
|
background-color: var(--darkened-bg);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,12 +190,20 @@ select.admin-autocomplete {
|
||||||
border-bottom-right-radius: 0;
|
border-bottom-right-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-container--admin-autocomplete .select2-search--dropdown {
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field {
|
.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field {
|
||||||
border: 1px solid #ccc;
|
background: var(--body-bg);
|
||||||
|
color: var(--body-fg);
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-search--inline .select2-search__field {
|
.select2-container--admin-autocomplete .select2-search--inline .select2-search__field {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
|
color: var(--body-fg);
|
||||||
border: none;
|
border: none;
|
||||||
outline: 0;
|
outline: 0;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
|
@ -201,6 +213,8 @@ select.admin-autocomplete {
|
||||||
.select2-container--admin-autocomplete .select2-results > .select2-results__options {
|
.select2-container--admin-autocomplete .select2-results > .select2-results__options {
|
||||||
max-height: 200px;
|
max-height: 200px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
color: var(--body-fg);
|
||||||
|
background: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-results__option[role=group] {
|
.select2-container--admin-autocomplete .select2-results__option[role=group] {
|
||||||
|
@ -208,11 +222,12 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] {
|
.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] {
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] {
|
.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] {
|
||||||
background-color: #ddd;
|
background-color: var(--selected-bg);
|
||||||
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-results__option .select2-results__option {
|
.select2-container--admin-autocomplete .select2-results__option .select2-results__option {
|
||||||
|
@ -249,8 +264,8 @@ select.admin-autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
|
.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
|
||||||
background-color: #79aec8;
|
background-color: var(--primary);
|
||||||
color: white;
|
color: var(--primary-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--admin-autocomplete .select2-results__group {
|
.select2-container--admin-autocomplete .select2-results__group {
|
||||||
|
|
|
@ -4,6 +4,93 @@
|
||||||
|
|
||||||
@import url(fonts.css);
|
@import url(fonts.css);
|
||||||
|
|
||||||
|
/* VARIABLE DEFINITIONS */
|
||||||
|
:root {
|
||||||
|
--primary: #79aec8;
|
||||||
|
--secondary: #417690;
|
||||||
|
--accent: #f5dd5d;
|
||||||
|
--primary-fg: #fff;
|
||||||
|
|
||||||
|
--body-fg: #333;
|
||||||
|
--body-bg: #fff;
|
||||||
|
--body-quiet-color: #666;
|
||||||
|
--body-loud-color: #000;
|
||||||
|
|
||||||
|
--header-color: #ffc;
|
||||||
|
--header-branding-color: var(--accent);
|
||||||
|
--header-bg: var(--secondary);
|
||||||
|
--header-link-color: var(--primary-fg);
|
||||||
|
|
||||||
|
--breadcrumbs-fg: #c4dce8;
|
||||||
|
--breadcrumbs-link-fg: var(--body-bg);
|
||||||
|
--breadcrumbs-bg: var(--primary);
|
||||||
|
|
||||||
|
--link-fg: #447e9b;
|
||||||
|
--link-hover-color: #036;
|
||||||
|
--link-selected-fg: #5b80b2;
|
||||||
|
|
||||||
|
--hairline-color: #e8e8e8;
|
||||||
|
--border-color: #ccc;
|
||||||
|
|
||||||
|
--error-fg: #ba2121;
|
||||||
|
|
||||||
|
--message-success-bg: #dfd;
|
||||||
|
--message-warning-bg: #ffc;
|
||||||
|
--message-error-bg: #ffefef;
|
||||||
|
|
||||||
|
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
||||||
|
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
||||||
|
--selected-row: #ffc;
|
||||||
|
|
||||||
|
--button-fg: #fff;
|
||||||
|
--button-bg: var(--primary);
|
||||||
|
--button-hover-bg: #609ab6;
|
||||||
|
--default-button-bg: var(--secondary);
|
||||||
|
--default-button-hover-bg: #205067;
|
||||||
|
--close-button-bg: #888; /* Previously #bbb, contrast 1.92 */
|
||||||
|
--close-button-hover-bg: #747474;
|
||||||
|
--delete-button-bg: #ba2121;
|
||||||
|
--delete-button-hover-bg: #a41515;
|
||||||
|
|
||||||
|
--object-tools-fg: var(--button-fg);
|
||||||
|
--object-tools-bg: var(--close-button-bg);
|
||||||
|
--object-tools-hover-bg: var(--close-button-hover-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--primary: #264b5d;
|
||||||
|
--primary-fg: #eee;
|
||||||
|
|
||||||
|
--body-fg: #eeeeee;
|
||||||
|
--body-bg: #121212;
|
||||||
|
--body-quiet-color: #e0e0e0;
|
||||||
|
--body-loud-color: #ffffff;
|
||||||
|
|
||||||
|
--breadcrumbs-link-fg: #e0e0e0;
|
||||||
|
--breadcrumbs-bg: var(--primary);
|
||||||
|
|
||||||
|
--link-fg: #81d4fa;
|
||||||
|
--link-hover-color: #4ac1f7;
|
||||||
|
--link-selected-fg: #6f94c6;
|
||||||
|
|
||||||
|
--hairline-color: #272727;
|
||||||
|
--border-color: #353535;
|
||||||
|
|
||||||
|
--error-fg: #e35f5f;
|
||||||
|
--message-success-bg: #006b1b;
|
||||||
|
--message-warning-bg: #583305;
|
||||||
|
--message-error-bg: #570808;
|
||||||
|
|
||||||
|
--darkened-bg: #212121;
|
||||||
|
--selected-bg: #1b1b1b;
|
||||||
|
--selected-row: #00363a;
|
||||||
|
|
||||||
|
--close-button-bg: #333333;
|
||||||
|
--close-button-hover-bg: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
html, body {
|
html, body {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
@ -13,19 +100,20 @@ body {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
|
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LINKS */
|
/* LINKS */
|
||||||
|
|
||||||
a:link, a:visited {
|
a:link, a:visited {
|
||||||
color: #447e9b;
|
color: var(--link-fg);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
transition: color 0.15s, background 0.15s;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:focus, a:hover {
|
a:focus, a:hover {
|
||||||
color: #036;
|
color: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
a:focus {
|
a:focus {
|
||||||
|
@ -37,7 +125,7 @@ a img {
|
||||||
}
|
}
|
||||||
|
|
||||||
a.section:link, a.section:visited {
|
a.section:link, a.section:visited {
|
||||||
color: #fff;
|
color: var(--header-link-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +152,7 @@ h1 {
|
||||||
margin: 0 0 20px;
|
margin: 0 0 20px;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
|
@ -80,7 +168,7 @@ h2.subhead {
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin: .8em 0 .3em 0;
|
margin: .8em 0 .3em 0;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +181,7 @@ h4 {
|
||||||
h5 {
|
h5 {
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
margin: 1.5em 0 .5em 0;
|
margin: 1.5em 0 .5em 0;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +219,7 @@ fieldset {
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: none;
|
border: none;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
|
@ -144,14 +232,14 @@ blockquote {
|
||||||
|
|
||||||
code, pre {
|
code, pre {
|
||||||
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
|
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre.literal-block {
|
pre.literal-block {
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
background: #eee;
|
background: var(--darkened-bg);
|
||||||
padding: 6px 8px;
|
padding: 6px 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,8 +249,8 @@ code strong {
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
clear: both;
|
clear: both;
|
||||||
color: #eee;
|
color: var(--hairline-color);
|
||||||
background-color: #eee;
|
background-color: var(--hairline-color);
|
||||||
height: 1px;
|
height: 1px;
|
||||||
border: none;
|
border: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -183,7 +271,7 @@ hr {
|
||||||
|
|
||||||
.help, p.help, form p.help, div.help, form div.help, div.help li {
|
.help, p.help, form p.help, div.help, form div.help, div.help li {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
div.help ul {
|
div.help ul {
|
||||||
|
@ -199,7 +287,7 @@ p img, h1 img, h2 img, h3 img, h4 img, td img {
|
||||||
}
|
}
|
||||||
|
|
||||||
.quiet, a.quiet:link, a.quiet:visited {
|
.quiet, a.quiet:link, a.quiet:visited {
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,20 +299,23 @@ p img, h1 img, h2 img, h3 img, h4 img, td img {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
/* TABLES */
|
/* TABLES */
|
||||||
|
|
||||||
table {
|
table {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
border-color: #ccc;
|
border-color: var(--border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
td, th {
|
td, th {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
th {
|
th {
|
||||||
|
@ -234,37 +325,37 @@ th {
|
||||||
|
|
||||||
thead th,
|
thead th,
|
||||||
tfoot td {
|
tfoot td {
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
border: none;
|
border: none;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid var(--hairline-color);
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
tfoot td {
|
tfoot td {
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
thead th.required {
|
thead th.required {
|
||||||
color: #000;
|
color: var(--body-loud-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.alt {
|
tr.alt {
|
||||||
background: #f6f6f6;
|
background: var(--darkened-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
tr:nth-child(odd), .row-form-errors {
|
tr:nth-child(odd), .row-form-errors {
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
tr:nth-child(even),
|
tr:nth-child(even),
|
||||||
tr:nth-child(even) .errorlist,
|
tr:nth-child(even) .errorlist,
|
||||||
tr:nth-child(odd) + .row-form-errors,
|
tr:nth-child(odd) + .row-form-errors,
|
||||||
tr:nth-child(odd) + .row-form-errors .errorlist {
|
tr:nth-child(odd) + .row-form-errors .errorlist {
|
||||||
background: #f9f9f9;
|
background: var(--darkened-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SORTABLE TABLES */
|
/* SORTABLE TABLES */
|
||||||
|
@ -273,15 +364,15 @@ thead th {
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: #f6f6f6;
|
background: var(--darkened-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
thead th a:link, thead th a:visited {
|
thead th a:link, thead th a:visited {
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
thead th.sorted {
|
thead th.sorted {
|
||||||
background: #eee;
|
background: var(--selected-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
thead th.sorted .text {
|
thead th.sorted .text {
|
||||||
|
@ -300,7 +391,7 @@ table thead th .text a {
|
||||||
}
|
}
|
||||||
|
|
||||||
table thead th .text a:focus, table thead th .text a:hover {
|
table thead th .text a:focus, table thead th .text a:hover {
|
||||||
background: #eee;
|
background: var(--selected-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
thead th.sorted a.sortremove {
|
thead th.sorted a.sortremove {
|
||||||
|
@ -347,12 +438,12 @@ table thead th.sorted .sortoptions a.sortremove:after {
|
||||||
left: 3px;
|
left: 3px;
|
||||||
font-weight: 200;
|
font-weight: 200;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
table thead th.sorted .sortoptions a.sortremove:focus:after,
|
table thead th.sorted .sortoptions a.sortremove:focus:after,
|
||||||
table thead th.sorted .sortoptions a.sortremove:hover:after {
|
table thead th.sorted .sortoptions a.sortremove:hover:after {
|
||||||
color: #447e9b;
|
color: var(--link-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
table thead th.sorted .sortoptions a.sortremove:focus,
|
table thead th.sorted .sortoptions a.sortremove:focus,
|
||||||
|
@ -399,16 +490,18 @@ textarea {
|
||||||
|
|
||||||
input[type=text], input[type=password], input[type=email], input[type=url],
|
input[type=text], input[type=password], input[type=email], input[type=url],
|
||||||
input[type=number], input[type=tel], textarea, select, .vTextField {
|
input[type=number], input[type=tel], textarea, select, .vTextField {
|
||||||
border: 1px solid #ccc;
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 5px 6px;
|
padding: 5px 6px;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
|
color: var(--body-fg);
|
||||||
|
background-color: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=text]:focus, input[type=password]:focus, input[type=email]:focus,
|
input[type=text]:focus, input[type=password]:focus, input[type=email]:focus,
|
||||||
input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus,
|
input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus,
|
||||||
textarea:focus, select:focus, .vTextField:focus {
|
textarea:focus, select:focus, .vTextField:focus {
|
||||||
border-color: #999;
|
border-color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
|
@ -424,12 +517,13 @@ select[multiple] {
|
||||||
/* FORM BUTTONS */
|
/* FORM BUTTONS */
|
||||||
|
|
||||||
.button, input[type=submit], input[type=button], .submit-row input, a.button {
|
.button, input[type=submit], input[type=button], .submit-row input, a.button {
|
||||||
background: #79aec8;
|
background: var(--button-bg);
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
color: #fff;
|
color: var(--button-fg);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
transition: background 0.15s;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.button {
|
a.button {
|
||||||
|
@ -439,7 +533,7 @@ a.button {
|
||||||
.button:active, input[type=submit]:active, input[type=button]:active,
|
.button:active, input[type=submit]:active, input[type=button]:active,
|
||||||
.button:focus, input[type=submit]:focus, input[type=button]:focus,
|
.button:focus, input[type=submit]:focus, input[type=button]:focus,
|
||||||
.button:hover, input[type=submit]:hover, input[type=button]:hover {
|
.button:hover, input[type=submit]:hover, input[type=button]:hover {
|
||||||
background: #609ab6;
|
background: var(--button-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.button[disabled], input[type=submit][disabled], input[type=button][disabled] {
|
.button[disabled], input[type=submit][disabled], input[type=button][disabled] {
|
||||||
|
@ -450,13 +544,13 @@ a.button {
|
||||||
float: right;
|
float: right;
|
||||||
border: none;
|
border: none;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
background: #417690;
|
background: var(--default-button-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.button.default:active, input[type=submit].default:active,
|
.button.default:active, input[type=submit].default:active,
|
||||||
.button.default:focus, input[type=submit].default:focus,
|
.button.default:focus, input[type=submit].default:focus,
|
||||||
.button.default:hover, input[type=submit].default:hover {
|
.button.default:hover, input[type=submit].default:hover {
|
||||||
background: #205067;
|
background: var(--default-button-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.button[disabled].default,
|
.button[disabled].default,
|
||||||
|
@ -471,7 +565,7 @@ input[type=button][disabled].default {
|
||||||
.module {
|
.module {
|
||||||
border: none;
|
border: none;
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
|
.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
|
||||||
|
@ -497,8 +591,8 @@ input[type=button][disabled].default {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
background: #79aec8;
|
background: var(--primary);
|
||||||
color: #fff;
|
color: var(--header-link-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.module caption,
|
.module caption,
|
||||||
|
@ -525,18 +619,18 @@ ul.messagelist li {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
padding: 10px 10px 10px 65px;
|
padding: 10px 10px 10px 65px;
|
||||||
margin: 0 0 10px 0;
|
margin: 0 0 10px 0;
|
||||||
background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat;
|
background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat;
|
||||||
background-size: 16px auto;
|
background-size: 16px auto;
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.messagelist li.warning {
|
ul.messagelist li.warning {
|
||||||
background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat;
|
background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat;
|
||||||
background-size: 14px auto;
|
background-size: 14px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.messagelist li.error {
|
ul.messagelist li.error {
|
||||||
background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat;
|
background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat;
|
||||||
background-size: 16px auto;
|
background-size: 16px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -546,24 +640,26 @@ ul.messagelist li.error {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 10px 12px;
|
padding: 10px 12px;
|
||||||
margin: 0 0 10px 0;
|
margin: 0 0 10px 0;
|
||||||
color: #ba2121;
|
color: var(--error-fg);
|
||||||
border: 1px solid #ba2121;
|
border: 1px solid var(--error-fg);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background-color: #fff;
|
background-color: var(--body-bg);
|
||||||
background-position: 5px 12px;
|
background-position: 5px 12px;
|
||||||
|
overflow-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.errorlist {
|
ul.errorlist {
|
||||||
margin: 0 0 4px;
|
margin: 0 0 4px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
color: #ba2121;
|
color: var(--error-fg);
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.errorlist li {
|
ul.errorlist li {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
display: block;
|
display: block;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
|
overflow-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.errorlist li:first-child {
|
ul.errorlist li:first-child {
|
||||||
|
@ -587,7 +683,7 @@ td ul.errorlist li {
|
||||||
.form-row.errors {
|
.form-row.errors {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border: none;
|
border: none;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
background: none;
|
background: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -597,7 +693,7 @@ td ul.errorlist li {
|
||||||
|
|
||||||
.errors input, .errors select, .errors textarea,
|
.errors input, .errors select, .errors textarea,
|
||||||
td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea {
|
td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea {
|
||||||
border: 1px solid #ba2121;
|
border: 1px solid var(--error-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.description {
|
.description {
|
||||||
|
@ -608,20 +704,19 @@ td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea {
|
||||||
/* BREADCRUMBS */
|
/* BREADCRUMBS */
|
||||||
|
|
||||||
div.breadcrumbs {
|
div.breadcrumbs {
|
||||||
background: #79aec8;
|
background: var(--breadcrumbs-bg);
|
||||||
padding: 10px 40px;
|
padding: 10px 40px;
|
||||||
border: none;
|
border: none;
|
||||||
font-size: 14px;
|
color: var(--breadcrumbs-fg);
|
||||||
color: #c4dce8;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.breadcrumbs a {
|
div.breadcrumbs a {
|
||||||
color: #fff;
|
color: var(--breadcrumbs-link-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
div.breadcrumbs a:focus, div.breadcrumbs a:hover {
|
div.breadcrumbs a:focus, div.breadcrumbs a:hover {
|
||||||
color: #c4dce8;
|
color: var(--breadcrumbs-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ACTION ICONS */
|
/* ACTION ICONS */
|
||||||
|
@ -647,11 +742,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover {
|
||||||
}
|
}
|
||||||
|
|
||||||
a.deletelink:link, a.deletelink:visited {
|
a.deletelink:link, a.deletelink:visited {
|
||||||
color: #CC3434;
|
color: #CC3434; /* XXX Probably unused? */
|
||||||
}
|
}
|
||||||
|
|
||||||
a.deletelink:focus, a.deletelink:hover {
|
a.deletelink:focus, a.deletelink:hover {
|
||||||
color: #993333;
|
color: #993333; /* XXX Probably unused? */
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -666,14 +761,6 @@ a.deletelink:focus, a.deletelink:hover {
|
||||||
margin-top: -48px;
|
margin-top: -48px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-row .object-tools {
|
|
||||||
margin-top: 5px;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
float: none;
|
|
||||||
height: 2em;
|
|
||||||
padding-left: 3.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.object-tools li {
|
.object-tools li {
|
||||||
display: block;
|
display: block;
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -689,29 +776,29 @@ a.deletelink:focus, a.deletelink:hover {
|
||||||
display: block;
|
display: block;
|
||||||
float: left;
|
float: left;
|
||||||
padding: 3px 12px;
|
padding: 3px 12px;
|
||||||
background: #999;
|
background: var(--object-tools-bg);
|
||||||
|
color: var(--object-tools-fg);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.5px;
|
letter-spacing: 0.5px;
|
||||||
color: #fff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.object-tools a:focus, .object-tools a:hover {
|
.object-tools a:focus, .object-tools a:hover {
|
||||||
background-color: #417690;
|
background-color: var(--object-tools-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.object-tools a:focus{
|
.object-tools a:focus{
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink {
|
.object-tools a.viewsitelink, .object-tools a.addlink {
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: right 7px center;
|
background-position: right 7px center;
|
||||||
padding-right: 26px;
|
padding-right: 26px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.object-tools a.viewsitelink, .object-tools a.golink {
|
.object-tools a.viewsitelink {
|
||||||
background-image: url(../img/tooltag-arrowright.svg);
|
background-image: url(../img/tooltag-arrowright.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -813,13 +900,13 @@ table#change-history tbody th {
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 10px 40px;
|
padding: 10px 40px;
|
||||||
background: #417690;
|
background: var(--header-bg);
|
||||||
color: #ffc;
|
color: var(--header-color);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header a:link, #header a:visited {
|
#header a:link, #header a:visited {
|
||||||
color: #fff;
|
color: var(--header-link-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#header a:focus , #header a:hover {
|
#header a:focus , #header a:hover {
|
||||||
|
@ -835,11 +922,11 @@ table#change-history tbody th {
|
||||||
margin: 0 20px 0 0;
|
margin: 0 20px 0 0;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
color: #f5dd5d;
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1, #branding h1 a:link, #branding h1 a:visited {
|
#branding h1, #branding h1 a:link, #branding h1 a:visited {
|
||||||
color: #f5dd5d;
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h2 {
|
#branding h2 {
|
||||||
|
@ -847,7 +934,7 @@ table#change-history tbody th {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin: -8px 0 8px 0;
|
margin: -8px 0 8px 0;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #ffc;
|
color: var(--header-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding a:hover {
|
#branding a:hover {
|
||||||
|
@ -871,14 +958,14 @@ table#change-history tbody th {
|
||||||
|
|
||||||
#user-tools a:focus, #user-tools a:hover {
|
#user-tools a:focus, #user-tools a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border-bottom-color: #79aec8;
|
border-bottom-color: var(--primary);
|
||||||
color: #79aec8;
|
color: var(--primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SIDEBAR */
|
/* SIDEBAR */
|
||||||
|
|
||||||
#content-related {
|
#content-related {
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#content-related .module {
|
#content-related .module {
|
||||||
|
@ -886,8 +973,7 @@ table#change-history tbody th {
|
||||||
}
|
}
|
||||||
|
|
||||||
#content-related h3 {
|
#content-related h3 {
|
||||||
font-size: 14px;
|
color: var(--body-quiet-color);
|
||||||
color: #666;
|
|
||||||
padding: 0 16px;
|
padding: 0 16px;
|
||||||
margin: 0 0 16px;
|
margin: 0 0 16px;
|
||||||
}
|
}
|
||||||
|
@ -916,22 +1002,22 @@ table#change-history tbody th {
|
||||||
background: none;
|
background: none;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
border-bottom: 1px solid #eaeaea;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.delete-confirmation form input[type="submit"] {
|
.delete-confirmation form input[type="submit"] {
|
||||||
background: #ba2121;
|
background: var(--delete-button-bg);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
color: #fff;
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.delete-confirmation form input[type="submit"]:active,
|
.delete-confirmation form input[type="submit"]:active,
|
||||||
.delete-confirmation form input[type="submit"]:focus,
|
.delete-confirmation form input[type="submit"]:focus,
|
||||||
.delete-confirmation form input[type="submit"]:hover {
|
.delete-confirmation form input[type="submit"]:hover {
|
||||||
background: #a41515;
|
background: var(--delete-button-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.delete-confirmation form .cancel-link {
|
.delete-confirmation form .cancel-link {
|
||||||
|
@ -939,17 +1025,17 @@ table#change-history tbody th {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
line-height: 15px;
|
line-height: 15px;
|
||||||
background: #ddd;
|
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
color: #333;
|
color: var(--button-fg);
|
||||||
|
background: var(--close-button-bg);
|
||||||
margin: 0 0 0 10px;
|
margin: 0 0 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.delete-confirmation form .cancel-link:active,
|
.delete-confirmation form .cancel-link:active,
|
||||||
.delete-confirmation form .cancel-link:focus,
|
.delete-confirmation form .cancel-link:focus,
|
||||||
.delete-confirmation form .cancel-link:hover {
|
.delete-confirmation form .cancel-link:hover {
|
||||||
background: #ccc;
|
background: var(--close-button-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* POPUP */
|
/* POPUP */
|
||||||
|
|
|
@ -40,13 +40,13 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .toplinks {
|
#changelist .toplinks {
|
||||||
border-bottom: 1px solid #ddd;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .paginator {
|
#changelist .paginator {
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist table tfoot {
|
#changelist table tfoot {
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TOOLBAR */
|
/* TOOLBAR */
|
||||||
|
@ -76,22 +76,22 @@
|
||||||
#toolbar {
|
#toolbar {
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid var(--hairline-color);
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#toolbar form input {
|
#toolbar form input {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#toolbar #searchbar {
|
#toolbar #searchbar {
|
||||||
height: 19px;
|
height: 19px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid var(--border-color);
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
|
@ -100,24 +100,24 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#toolbar #searchbar:focus {
|
#toolbar #searchbar:focus {
|
||||||
border-color: #999;
|
border-color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#toolbar form input[type="submit"] {
|
#toolbar form input[type="submit"] {
|
||||||
border: 1px solid #ccc;
|
border: 1px solid var(--border-color);
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#toolbar form input[type="submit"]:focus,
|
#toolbar form input[type="submit"]:focus,
|
||||||
#toolbar form input[type="submit"]:hover {
|
#toolbar form input[type="submit"]:hover {
|
||||||
border-color: #999;
|
border-color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-search img {
|
#changelist-search img {
|
||||||
|
@ -128,9 +128,9 @@
|
||||||
/* FILTER COLUMN */
|
/* FILTER COLUMN */
|
||||||
|
|
||||||
#changelist-filter {
|
#changelist-filter {
|
||||||
|
flex: 0 0 240px;
|
||||||
order: 1;
|
order: 1;
|
||||||
width: 240px;
|
background: var(--darkened-bg);
|
||||||
background: #f8f8f8;
|
|
||||||
border-left: none;
|
border-left: none;
|
||||||
margin: 0 0 0 30px;
|
margin: 0 0 0 30px;
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,6 @@
|
||||||
|
|
||||||
#changelist-filter h3 {
|
#changelist-filter h3 {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +153,7 @@
|
||||||
#changelist-filter ul {
|
#changelist-filter ul {
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
padding: 0 15px 15px;
|
padding: 0 15px 15px;
|
||||||
border-bottom: 1px solid #eaeaea;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter ul:last-child {
|
#changelist-filter ul:last-child {
|
||||||
|
@ -169,31 +168,31 @@
|
||||||
|
|
||||||
#changelist-filter a {
|
#changelist-filter a {
|
||||||
display: block;
|
display: block;
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter li.selected {
|
#changelist-filter li.selected {
|
||||||
border-left: 5px solid #eaeaea;
|
border-left: 5px solid var(--hairline-color);
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
margin-left: -15px;
|
margin-left: -15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter li.selected a {
|
#changelist-filter li.selected a {
|
||||||
color: #5b80b2;
|
color: var(--link-selected-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter a:focus, #changelist-filter a:hover,
|
#changelist-filter a:focus, #changelist-filter a:hover,
|
||||||
#changelist-filter li.selected a:focus,
|
#changelist-filter li.selected a:focus,
|
||||||
#changelist-filter li.selected a:hover {
|
#changelist-filter li.selected a:hover {
|
||||||
color: #036;
|
color: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter #changelist-filter-clear a {
|
#changelist-filter #changelist-filter-clear a {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
border-bottom: 1px solid #eaeaea;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DATE DRILLDOWN */
|
/* DATE DRILLDOWN */
|
||||||
|
@ -214,12 +213,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.change-list ul.toplinks .date-back a {
|
.change-list ul.toplinks .date-back a {
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.change-list ul.toplinks .date-back a:focus,
|
.change-list ul.toplinks .date-back a:focus,
|
||||||
.change-list ul.toplinks .date-back a:hover {
|
.change-list ul.toplinks .date-back a:hover {
|
||||||
color: #036;
|
color: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PAGINATOR */
|
/* PAGINATOR */
|
||||||
|
@ -230,26 +229,26 @@
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border-top: 1px solid #ddd;
|
border-top: 1px solid var(--hairline-color);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.paginator a:link, .paginator a:visited {
|
.paginator a:link, .paginator a:visited {
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
background: #79aec8;
|
background: var(--button-bg);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #fff;
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.paginator a.showall {
|
.paginator a.showall {
|
||||||
border: none;
|
border: none;
|
||||||
background: none;
|
background: none;
|
||||||
color: #5b80b2;
|
color: var(--link-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.paginator a.showall:focus, .paginator a.showall:hover {
|
.paginator a.showall:focus, .paginator a.showall:hover {
|
||||||
background: none;
|
background: none;
|
||||||
color: #036;
|
color: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.paginator .end {
|
.paginator .end {
|
||||||
|
@ -265,7 +264,7 @@
|
||||||
|
|
||||||
.paginator a:focus, .paginator a:hover {
|
.paginator a:focus, .paginator a:hover {
|
||||||
color: white;
|
color: white;
|
||||||
background: #036;
|
background: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ACTIONS */
|
/* ACTIONS */
|
||||||
|
@ -280,22 +279,22 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist table tbody tr.selected {
|
#changelist table tbody tr.selected {
|
||||||
background-color: #FFFFCC;
|
background-color: var(--selected-row);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions {
|
#changelist .actions {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
border-top: none;
|
border-top: none;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions.selected {
|
#changelist .actions.selected { /* XXX Probably unused? */
|
||||||
background: #fffccf;
|
background: var(--body-bg);
|
||||||
border-top: 1px solid #fffee8;
|
border-top: 1px solid var(--body-bg);
|
||||||
border-bottom: 1px solid #edecd6;
|
border-bottom: 1px solid #edecd6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,7 +304,6 @@
|
||||||
#changelist .actions span.question {
|
#changelist .actions span.question {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
margin: 0 0.5em;
|
margin: 0 0.5em;
|
||||||
display: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions:last-child {
|
#changelist .actions:last-child {
|
||||||
|
@ -315,9 +313,8 @@
|
||||||
#changelist .actions select {
|
#changelist .actions select {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
height: 24px;
|
height: 24px;
|
||||||
background: none;
|
color: var(--body-fg);
|
||||||
color: #000;
|
border: 1px solid var(--border-color);
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
padding: 0 0 0 4px;
|
padding: 0 0 0 4px;
|
||||||
|
@ -326,7 +323,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions select:focus {
|
#changelist .actions select:focus {
|
||||||
border-color: #999;
|
border-color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions label {
|
#changelist .actions label {
|
||||||
|
@ -337,18 +334,18 @@
|
||||||
|
|
||||||
#changelist .actions .button {
|
#changelist .actions .button {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
height: 24px;
|
height: 24px;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions .button:focus, #changelist .actions .button:hover {
|
#changelist .actions .button:focus, #changelist .actions .button:hover {
|
||||||
border-color: #999;
|
border-color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-row img, .form-row input {
|
.form-row img, .form-row input {
|
||||||
|
@ -22,21 +22,17 @@ form .form-row p {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FORM LABELS */
|
/* FORM LABELS */
|
||||||
|
|
||||||
label {
|
label {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.required label, label.required {
|
.required label, label.required {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RADIO BUTTONS */
|
/* RADIO BUTTONS */
|
||||||
|
@ -219,24 +215,24 @@ fieldset.collapsed h2, fieldset.collapsed {
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset.collapsed {
|
fieldset.collapsed {
|
||||||
border: 1px solid #eee;
|
border: 1px solid var(--hairline-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset.collapsed h2 {
|
fieldset.collapsed h2 {
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset .collapse-toggle {
|
fieldset .collapse-toggle {
|
||||||
color: #fff;
|
color: var(--header-link-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset.collapsed .collapse-toggle {
|
fieldset.collapsed .collapse-toggle {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
display: inline;
|
display: inline;
|
||||||
color: #447e9b;
|
color: var(--link-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MONOSPACE TEXTAREAS */
|
/* MONOSPACE TEXTAREAS */
|
||||||
|
@ -250,8 +246,8 @@ fieldset.monospace textarea {
|
||||||
.submit-row {
|
.submit-row {
|
||||||
padding: 12px 14px;
|
padding: 12px 14px;
|
||||||
margin: 0 0 20px;
|
margin: 0 0 20px;
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
border: 1px solid #eee;
|
border: 1px solid var(--hairline-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -283,35 +279,35 @@ body.popup .submit-row {
|
||||||
|
|
||||||
.submit-row a.deletelink {
|
.submit-row a.deletelink {
|
||||||
display: block;
|
display: block;
|
||||||
background: #ba2121;
|
background: var(--delete-button-bg);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
line-height: 15px;
|
line-height: 15px;
|
||||||
color: #fff;
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row a.closelink {
|
.submit-row a.closelink {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background: #bbbbbb;
|
background: var(--close-button-bg);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
line-height: 15px;
|
line-height: 15px;
|
||||||
margin: 0 0 0 5px;
|
margin: 0 0 0 5px;
|
||||||
color: #fff;
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row a.deletelink:focus,
|
.submit-row a.deletelink:focus,
|
||||||
.submit-row a.deletelink:hover,
|
.submit-row a.deletelink:hover,
|
||||||
.submit-row a.deletelink:active {
|
.submit-row a.deletelink:active {
|
||||||
background: #a41515;
|
background: var(--delete-button-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row a.closelink:focus,
|
.submit-row a.closelink:focus,
|
||||||
.submit-row a.closelink:hover,
|
.submit-row a.closelink:hover,
|
||||||
.submit-row a.closelink:active {
|
.submit-row a.closelink:active {
|
||||||
background: #aaaaaa;
|
background: var(--close-button-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CUSTOM FORM FIELDS */
|
/* CUSTOM FORM FIELDS */
|
||||||
|
@ -390,12 +386,12 @@ body.popup .submit-row {
|
||||||
|
|
||||||
.inline-related h3 {
|
.inline-related h3 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid var(--hairline-color);
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-related h3 span.delete {
|
.inline-related h3 span.delete {
|
||||||
|
@ -409,7 +405,7 @@ body.popup .submit-row {
|
||||||
|
|
||||||
.inline-related fieldset {
|
.inline-related fieldset {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
border: none;
|
border: none;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
@ -421,7 +417,7 @@ body.popup .submit-row {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background: #bcd;
|
background: #bcd;
|
||||||
color: #fff;
|
color: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group .tabular fieldset.module {
|
.inline-group .tabular fieldset.module {
|
||||||
|
@ -460,7 +456,7 @@ body.popup .submit-row {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
font-size: 9px;
|
font-size: 9px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
_width: 700px;
|
_width: 700px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,15 +473,15 @@ body.popup .submit-row {
|
||||||
|
|
||||||
.inline-group div.add-row,
|
.inline-group div.add-row,
|
||||||
.inline-group .tabular tr.add-row td {
|
.inline-group .tabular tr.add-row td {
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group .tabular tr.add-row td {
|
.inline-group .tabular tr.add-row td {
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group ul.tools a.add,
|
.inline-group ul.tools a.add,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* LOGIN FORM */
|
/* LOGIN FORM */
|
||||||
|
|
||||||
.login {
|
.login {
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.login #header h1 a {
|
.login #header h1 a {
|
||||||
color: #fff;
|
color: var(--header-link-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.login #content {
|
.login #content {
|
||||||
|
@ -24,8 +24,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.login #container {
|
.login #container {
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
border: 1px solid #eaeaea;
|
border: 1px solid var(--hairline-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 28em;
|
width: 28em;
|
||||||
|
@ -34,44 +34,25 @@
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login #content-main {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login .form-row {
|
.login .form-row {
|
||||||
padding: 4px 0;
|
padding: 4px 0;
|
||||||
float: left;
|
|
||||||
width: 100%;
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.login .form-row label {
|
.login .form-row label {
|
||||||
padding-right: 0.5em;
|
display: block;
|
||||||
line-height: 2em;
|
line-height: 2em;
|
||||||
font-size: 1em;
|
|
||||||
clear: both;
|
|
||||||
color: #333;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.login .form-row #id_username, .login .form-row #id_password {
|
.login .form-row #id_username, .login .form-row #id_password {
|
||||||
clear: both;
|
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login span.help {
|
|
||||||
font-size: 10px;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login .submit-row {
|
.login .submit-row {
|
||||||
clear: both;
|
padding: 1em 0 0 0;
|
||||||
padding: 1em 0 0 9.4em;
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border: none;
|
text-align: center;
|
||||||
background: none;
|
|
||||||
text-align: left;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.login .password-reset-link {
|
.login .password-reset-link {
|
||||||
|
|
|
@ -12,22 +12,23 @@
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex: 0 0 23px;
|
flex: 0 0 23px;
|
||||||
width: 23px;
|
width: 23px;
|
||||||
border-right: 1px solid #eaeaea;
|
border: 0;
|
||||||
background-color: #ffffff;
|
border-right: 1px solid var(--hairline-color);
|
||||||
|
background-color: var(--body-bg);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
color: #447e9b;
|
color: var(--link-fg);
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
[dir="rtl"] .toggle-nav-sidebar {
|
[dir="rtl"] .toggle-nav-sidebar {
|
||||||
border-left: 1px solid #eaeaea;
|
border-left: 1px solid var(--hairline-color);
|
||||||
border-right: 0;
|
border-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-nav-sidebar:hover,
|
.toggle-nav-sidebar:hover,
|
||||||
.toggle-nav-sidebar:focus {
|
.toggle-nav-sidebar:focus {
|
||||||
background-color: #f6f6f6;
|
background-color: var(--darkened-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#nav-sidebar {
|
#nav-sidebar {
|
||||||
|
@ -36,13 +37,13 @@
|
||||||
left: -276px;
|
left: -276px;
|
||||||
margin-left: -276px;
|
margin-left: -276px;
|
||||||
border-top: 1px solid transparent;
|
border-top: 1px solid transparent;
|
||||||
border-right: 1px solid #eaeaea;
|
border-right: 1px solid var(--hairline-color);
|
||||||
background-color: #ffffff;
|
background-color: var(--body-bg);
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
[dir="rtl"] #nav-sidebar {
|
[dir="rtl"] #nav-sidebar {
|
||||||
border-left: 1px solid #eaeaea;
|
border-left: 1px solid var(--hairline-color);
|
||||||
border-right: 0;
|
border-right: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
|
@ -91,12 +92,12 @@
|
||||||
|
|
||||||
#nav-sidebar .current-app .section:link,
|
#nav-sidebar .current-app .section:link,
|
||||||
#nav-sidebar .current-app .section:visited {
|
#nav-sidebar .current-app .section:visited {
|
||||||
color: #ffc;
|
color: var(--header-color);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
#nav-sidebar .current-model {
|
#nav-sidebar .current-model {
|
||||||
background: #ffc;
|
background: var(--selected-row);
|
||||||
}
|
}
|
||||||
|
|
||||||
.main > #nav-sidebar + .content {
|
.main > #nav-sidebar + .content {
|
||||||
|
|
|
@ -140,7 +140,7 @@ input[type="submit"], button {
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions select {
|
#changelist .actions select {
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions .button {
|
#changelist .actions .button {
|
||||||
|
@ -157,7 +157,7 @@ input[type="submit"], button {
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter {
|
#changelist-filter {
|
||||||
width: 200px;
|
flex-basis: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.change-list .filtered .results,
|
.change-list .filtered .results,
|
||||||
|
@ -166,7 +166,7 @@ input[type="submit"], button {
|
||||||
.filtered .actions,
|
.filtered .actions,
|
||||||
|
|
||||||
#changelist .paginator {
|
#changelist .paginator {
|
||||||
border-top-color: #eee;
|
border-top-color: var(--hairline-color); /* XXX Is this used at all? */
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .results + .paginator {
|
#changelist .results + .paginator {
|
||||||
|
@ -213,7 +213,7 @@ input[type="submit"], button {
|
||||||
fieldset .fieldBox + .fieldBox {
|
fieldset .fieldBox + .fieldBox {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
|
@ -399,11 +399,11 @@ input[type="submit"], button {
|
||||||
.datetime .timezonewarning {
|
.datetime .timezonewarning {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.datetimeshortcuts {
|
.datetimeshortcuts {
|
||||||
color: #ccc;
|
color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
|
.form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
|
||||||
|
@ -655,7 +655,7 @@ input[type="submit"], button {
|
||||||
margin-bottom: -3px;
|
margin-bottom: -3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form .aligned ul.radiolist li + li {
|
form .aligned ul.radiolist:not(.inline) li + li {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -740,7 +740,7 @@ input[type="submit"], button {
|
||||||
/* Inlines */
|
/* Inlines */
|
||||||
|
|
||||||
.inline-group[data-inline-type="stacked"] .inline-related {
|
.inline-group[data-inline-type="stacked"] .inline-related {
|
||||||
border: 2px solid #eee;
|
border: 1px solid var(--hairline-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
@ -750,18 +750,19 @@ input[type="submit"], button {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group[data-inline-type="stacked"] .inline-related + .inline-related {
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.inline-group[data-inline-type="stacked"] .inline-related .module {
|
.inline-group[data-inline-type="stacked"] .inline-related .module {
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group[data-inline-type="stacked"] .inline-related .module .form-row:last-child {
|
.inline-group[data-inline-type="stacked"] .inline-related .module .form-row {
|
||||||
|
border-top: 1px solid var(--hairline-color);
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
.inline-group[data-inline-type="stacked"] .inline-related h3 {
|
.inline-group[data-inline-type="stacked"] .inline-related h3 {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-top-width: 0;
|
border-top-width: 0;
|
||||||
|
@ -791,7 +792,7 @@ input[type="submit"], button {
|
||||||
|
|
||||||
.inline-group[data-inline-type="stacked"] div.add-row {
|
.inline-group[data-inline-type="stacked"] div.add-row {
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
border: 1px solid #eee;
|
border: 1px solid var(--hairline-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -885,9 +886,7 @@ input[type="submit"], button {
|
||||||
}
|
}
|
||||||
|
|
||||||
.login .form-row label {
|
.login .form-row label {
|
||||||
display: block;
|
|
||||||
margin: 0 0 5px;
|
margin: 0 0 5px;
|
||||||
padding: 0;
|
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,7 +894,7 @@ input[type="submit"], button {
|
||||||
padding: 15px 0 0;
|
padding: 15px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login br, .login .submit-row label {
|
.login br {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -963,7 +962,7 @@ input[type="submit"], button {
|
||||||
}
|
}
|
||||||
|
|
||||||
.timelist a {
|
.timelist a {
|
||||||
background: #fff;
|
background: var(--body-bg);
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,3 @@
|
||||||
body {
|
|
||||||
direction: rtl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LOGIN */
|
|
||||||
|
|
||||||
.login .form-row {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login .form-row label {
|
|
||||||
float: right;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
padding-right: 0;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login .submit-row {
|
|
||||||
clear: both;
|
|
||||||
padding: 1em 9.4em 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* GLOBAL */
|
/* GLOBAL */
|
||||||
|
|
||||||
th {
|
th {
|
||||||
|
@ -119,7 +97,7 @@ thead th.sorted .text {
|
||||||
border-left: none;
|
border-left: none;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
border-right: 5px solid #eaeaea;
|
border-right: 5px solid var(--hairline-color);
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
margin-right: -15px;
|
margin-right: -15px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,26 +22,25 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-available h2, .selector-chosen h2 {
|
.selector-available h2, .selector-chosen h2 {
|
||||||
border: 1px solid #ccc;
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px 4px 0 0;
|
border-radius: 4px 4px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-chosen h2 {
|
.selector-chosen h2 {
|
||||||
background: #79aec8;
|
background: var(--primary);
|
||||||
color: #fff;
|
color: var(--header-link-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-available h2 {
|
.selector .selector-available h2 {
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-filter {
|
.selector .selector-filter {
|
||||||
background: white;
|
border: 1px solid var(--border-color);
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-width: 0 1px;
|
border-width: 0 1px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
@ -66,7 +65,7 @@
|
||||||
.selector ul.selector-chooser {
|
.selector ul.selector-chooser {
|
||||||
float: left;
|
float: left;
|
||||||
width: 22px;
|
width: 22px;
|
||||||
background-color: #eee;
|
background-color: var(--selected-bg);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
margin: 10em 5px 0 5px;
|
margin: 10em 5px 0 5px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -91,7 +90,7 @@
|
||||||
text-indent: -3000px;
|
text-indent: -3000px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
opacity: 0.3;
|
opacity: 0.55;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active.selector-add, .active.selector-remove {
|
.active.selector-add, .active.selector-remove {
|
||||||
|
@ -126,14 +125,14 @@ a.selector-chooseall, a.selector-clearall {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
opacity: 0.3;
|
opacity: 0.55;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.active.selector-chooseall:focus, a.active.selector-clearall:focus,
|
a.active.selector-chooseall:focus, a.active.selector-clearall:focus,
|
||||||
a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
|
a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
|
||||||
color: #447e9b;
|
color: var(--link-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
a.active.selector-chooseall, a.active.selector-clearall {
|
a.active.selector-chooseall, a.active.selector-clearall {
|
||||||
|
@ -261,7 +260,7 @@ p.datetime {
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,7 +268,7 @@ p.datetime {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: #ccc;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
|
.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
|
||||||
|
@ -313,7 +312,7 @@ table p.datetime {
|
||||||
|
|
||||||
.timezonewarning {
|
.timezonewarning {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* URL */
|
/* URL */
|
||||||
|
@ -322,7 +321,7 @@ p.url {
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
@ -337,7 +336,7 @@ p.file-upload {
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
@ -355,7 +354,7 @@ p.file-upload {
|
||||||
}
|
}
|
||||||
|
|
||||||
span.clearable-file-input label {
|
span.clearable-file-input label {
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
display: inline;
|
display: inline;
|
||||||
float: none;
|
float: none;
|
||||||
|
@ -368,8 +367,9 @@ span.clearable-file-input label {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
width: 19em;
|
width: 19em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background: white;
|
background: var(--body-bg);
|
||||||
border: 1px solid #ddd;
|
color: var(--body-fg);
|
||||||
|
border: 1px solid var(--hairline-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -397,20 +397,20 @@ span.clearable-file-input label {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
background: #f5dd5d;
|
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: #333;
|
color: #333;
|
||||||
|
background: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar th {
|
.calendar th {
|
||||||
padding: 8px 5px;
|
padding: 8px 5px;
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
border-bottom: 1px solid #ddd;
|
border-bottom: 1px solid var(--border-color);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #666;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar td {
|
.calendar td {
|
||||||
|
@ -418,17 +418,17 @@ span.clearable-file-input label {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid var(--hairline-color);
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar td.selected a {
|
.calendar td.selected a {
|
||||||
background: #79aec8;
|
background: var(--primary);
|
||||||
color: #fff;
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar td.nonday {
|
.calendar td.nonday {
|
||||||
background: #f8f8f8;
|
background: var(--darkened-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar td.today a {
|
.calendar td.today a {
|
||||||
|
@ -440,17 +440,17 @@ span.clearable-file-input label {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #444;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar td a:focus, .timelist a:focus,
|
.calendar td a:focus, .timelist a:focus,
|
||||||
.calendar td a:hover, .timelist a:hover {
|
.calendar td a:hover, .timelist a:hover {
|
||||||
background: #79aec8;
|
background: var(--primary);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar td a:active, .timelist a:active {
|
.calendar td a:active, .timelist a:active {
|
||||||
background: #417690;
|
background: var(--header-bg);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -464,16 +464,16 @@ span.clearable-file-input label {
|
||||||
|
|
||||||
.calendarnav a:link, #calendarnav a:visited,
|
.calendarnav a:link, #calendarnav a:visited,
|
||||||
#calendarnav a:focus, #calendarnav a:hover {
|
#calendarnav a:focus, #calendarnav a:hover {
|
||||||
color: #999;
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-shortcuts {
|
.calendar-shortcuts {
|
||||||
background: white;
|
background: var(--body-bg);
|
||||||
|
color: var(--body-quiet-color);
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
line-height: 11px;
|
line-height: 11px;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid var(--hairline-color);
|
||||||
padding: 8px 0;
|
padding: 8px 0;
|
||||||
color: #ccc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
|
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
|
||||||
|
@ -511,8 +511,8 @@ span.clearable-file-input label {
|
||||||
padding: 4px 0;
|
padding: 4px 0;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
background: #eee;
|
background: #eee;
|
||||||
border-top: 1px solid #ddd;
|
border-top: 1px solid var(--border-color);
|
||||||
color: #333;
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-cancel:focus, .calendar-cancel:hover {
|
.calendar-cancel:focus, .calendar-cancel:hover {
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
redisplay: function(id) {
|
redisplay: function(id) {
|
||||||
// Repopulate HTML select box from cache
|
// Repopulate HTML select box from cache
|
||||||
const box = document.getElementById(id);
|
const box = document.getElementById(id);
|
||||||
|
const scroll_value_from_top = box.scrollTop;
|
||||||
box.innerHTML = '';
|
box.innerHTML = '';
|
||||||
for (const node of SelectBox.cache[id]) {
|
for (const node of SelectBox.cache[id]) {
|
||||||
if (node.displayed) {
|
if (node.displayed) {
|
||||||
|
@ -22,6 +23,7 @@
|
||||||
box.appendChild(new_option);
|
box.appendChild(new_option);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
box.scrollTop = scroll_value_from_top;
|
||||||
},
|
},
|
||||||
filter: function(id, text) {
|
filter: function(id, text) {
|
||||||
// Redisplay the HTML select box, displaying only the choices containing ALL
|
// Redisplay the HTML select box, displaying only the choices containing ALL
|
||||||
|
@ -31,7 +33,7 @@
|
||||||
node.displayed = 1;
|
node.displayed = 1;
|
||||||
const node_text = node.text.toLowerCase();
|
const node_text = node.text.toLowerCase();
|
||||||
for (const token of tokens) {
|
for (const token of tokens) {
|
||||||
if (node_text.indexOf(token) === -1) {
|
if (!node_text.includes(token)) {
|
||||||
node.displayed = 0;
|
node.displayed = 0;
|
||||||
break; // Once the first token isn't found we're done
|
break; // Once the first token isn't found we're done
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,154 +1,201 @@
|
||||||
/*global gettext, interpolate, ngettext*/
|
/*global gettext, interpolate, ngettext*/
|
||||||
'use strict';
|
'use strict';
|
||||||
{
|
{
|
||||||
const $ = django.jQuery;
|
function show(selector) {
|
||||||
let lastChecked;
|
document.querySelectorAll(selector).forEach(function(el) {
|
||||||
|
el.classList.remove('hidden');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$.fn.actions = function(opts) {
|
function hide(selector) {
|
||||||
const options = $.extend({}, $.fn.actions.defaults, opts);
|
document.querySelectorAll(selector).forEach(function(el) {
|
||||||
const actionCheckboxes = $(this);
|
el.classList.add('hidden');
|
||||||
let list_editable_changed = false;
|
|
||||||
const showQuestion = function() {
|
|
||||||
$(options.acrossClears).hide();
|
|
||||||
$(options.acrossQuestions).show();
|
|
||||||
$(options.allContainer).hide();
|
|
||||||
},
|
|
||||||
showClear = function() {
|
|
||||||
$(options.acrossClears).show();
|
|
||||||
$(options.acrossQuestions).hide();
|
|
||||||
$(options.actionContainer).toggleClass(options.selectedClass);
|
|
||||||
$(options.allContainer).show();
|
|
||||||
$(options.counterContainer).hide();
|
|
||||||
},
|
|
||||||
reset = function() {
|
|
||||||
$(options.acrossClears).hide();
|
|
||||||
$(options.acrossQuestions).hide();
|
|
||||||
$(options.allContainer).hide();
|
|
||||||
$(options.counterContainer).show();
|
|
||||||
},
|
|
||||||
clearAcross = function() {
|
|
||||||
reset();
|
|
||||||
$(options.acrossInput).val(0);
|
|
||||||
$(options.actionContainer).removeClass(options.selectedClass);
|
|
||||||
},
|
|
||||||
checker = function(checked) {
|
|
||||||
if (checked) {
|
|
||||||
showQuestion();
|
|
||||||
} else {
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
$(actionCheckboxes).prop("checked", checked)
|
|
||||||
.parent().parent().toggleClass(options.selectedClass, checked);
|
|
||||||
},
|
|
||||||
updateCounter = function() {
|
|
||||||
const sel = $(actionCheckboxes).filter(":checked").length;
|
|
||||||
// data-actions-icnt is defined in the generated HTML
|
|
||||||
// and contains the total amount of objects in the queryset
|
|
||||||
const actions_icnt = $('.action-counter').data('actionsIcnt');
|
|
||||||
$(options.counterContainer).html(interpolate(
|
|
||||||
ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
|
|
||||||
sel: sel,
|
|
||||||
cnt: actions_icnt
|
|
||||||
}, true));
|
|
||||||
$(options.allToggle).prop("checked", function() {
|
|
||||||
let value;
|
|
||||||
if (sel === actionCheckboxes.length) {
|
|
||||||
value = true;
|
|
||||||
showQuestion();
|
|
||||||
} else {
|
|
||||||
value = false;
|
|
||||||
clearAcross();
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
// Show counter by default
|
|
||||||
$(options.counterContainer).show();
|
|
||||||
// Check state of checkboxes and reinit state if needed
|
|
||||||
$(this).filter(":checked").each(function(i) {
|
|
||||||
$(this).parent().parent().toggleClass(options.selectedClass);
|
|
||||||
updateCounter();
|
|
||||||
if ($(options.acrossInput).val() === 1) {
|
|
||||||
showClear();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
$(options.allToggle).show().on('click', function() {
|
}
|
||||||
checker($(this).prop("checked"));
|
|
||||||
updateCounter();
|
function showQuestion(options) {
|
||||||
|
hide(options.acrossClears);
|
||||||
|
show(options.acrossQuestions);
|
||||||
|
hide(options.allContainer);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showClear(options) {
|
||||||
|
show(options.acrossClears);
|
||||||
|
hide(options.acrossQuestions);
|
||||||
|
document.querySelector(options.actionContainer).classList.remove(options.selectedClass);
|
||||||
|
show(options.allContainer);
|
||||||
|
hide(options.counterContainer);
|
||||||
|
}
|
||||||
|
|
||||||
|
function reset(options) {
|
||||||
|
hide(options.acrossClears);
|
||||||
|
hide(options.acrossQuestions);
|
||||||
|
hide(options.allContainer);
|
||||||
|
show(options.counterContainer);
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearAcross(options) {
|
||||||
|
reset(options);
|
||||||
|
const acrossInputs = document.querySelectorAll(options.acrossInput);
|
||||||
|
acrossInputs.forEach(function(acrossInput) {
|
||||||
|
acrossInput.value = 0;
|
||||||
});
|
});
|
||||||
$("a", options.acrossQuestions).on('click', function(event) {
|
document.querySelector(options.actionContainer).classList.remove(options.selectedClass);
|
||||||
event.preventDefault();
|
}
|
||||||
$(options.acrossInput).val(1);
|
|
||||||
showClear();
|
function checker(actionCheckboxes, options, checked) {
|
||||||
|
if (checked) {
|
||||||
|
showQuestion(options);
|
||||||
|
} else {
|
||||||
|
reset(options);
|
||||||
|
}
|
||||||
|
actionCheckboxes.forEach(function(el) {
|
||||||
|
el.checked = checked;
|
||||||
|
el.closest('tr').classList.toggle(options.selectedClass, checked);
|
||||||
});
|
});
|
||||||
$("a", options.acrossClears).on('click', function(event) {
|
}
|
||||||
event.preventDefault();
|
|
||||||
$(options.allToggle).prop("checked", false);
|
function updateCounter(actionCheckboxes, options) {
|
||||||
clearAcross();
|
const sel = Array.from(actionCheckboxes).filter(function(el) {
|
||||||
checker(0);
|
return el.checked;
|
||||||
updateCounter();
|
}).length;
|
||||||
});
|
const counter = document.querySelector(options.counterContainer);
|
||||||
lastChecked = null;
|
// data-actions-icnt is defined in the generated HTML
|
||||||
$(actionCheckboxes).on('click', function(event) {
|
// and contains the total amount of objects in the queryset
|
||||||
if (!event) { event = window.event; }
|
const actions_icnt = Number(counter.dataset.actionsIcnt);
|
||||||
const target = event.target ? event.target : event.srcElement;
|
counter.textContent = interpolate(
|
||||||
if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) {
|
ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
|
||||||
let inrange = false;
|
sel: sel,
|
||||||
$(lastChecked).prop("checked", target.checked)
|
cnt: actions_icnt
|
||||||
.parent().parent().toggleClass(options.selectedClass, target.checked);
|
}, true);
|
||||||
$(actionCheckboxes).each(function() {
|
const allToggle = document.getElementById(options.allToggleId);
|
||||||
if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) {
|
allToggle.checked = sel === actionCheckboxes.length;
|
||||||
inrange = (inrange) ? false : true;
|
if (allToggle.checked) {
|
||||||
}
|
showQuestion(options);
|
||||||
if (inrange) {
|
} else {
|
||||||
$(this).prop("checked", target.checked)
|
clearAcross(options);
|
||||||
.parent().parent().toggleClass(options.selectedClass, target.checked);
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
const defaults = {
|
||||||
$(target).parent().parent().toggleClass(options.selectedClass, target.checked);
|
|
||||||
lastChecked = target;
|
|
||||||
updateCounter();
|
|
||||||
});
|
|
||||||
$('form#changelist-form table#result_list tr').on('change', 'td:gt(0) :input', function() {
|
|
||||||
list_editable_changed = true;
|
|
||||||
});
|
|
||||||
$('form#changelist-form button[name="index"]').on('click', function(event) {
|
|
||||||
if (list_editable_changed) {
|
|
||||||
return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('form#changelist-form input[name="_save"]').on('click', function(event) {
|
|
||||||
let action_changed = false;
|
|
||||||
$('select option:selected', options.actionContainer).each(function() {
|
|
||||||
if ($(this).val()) {
|
|
||||||
action_changed = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (action_changed) {
|
|
||||||
if (list_editable_changed) {
|
|
||||||
return confirm(gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action."));
|
|
||||||
} else {
|
|
||||||
return confirm(gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button."));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
/* Setup plugin defaults */
|
|
||||||
$.fn.actions.defaults = {
|
|
||||||
actionContainer: "div.actions",
|
actionContainer: "div.actions",
|
||||||
counterContainer: "span.action-counter",
|
counterContainer: "span.action-counter",
|
||||||
allContainer: "div.actions span.all",
|
allContainer: "div.actions span.all",
|
||||||
acrossInput: "div.actions input.select-across",
|
acrossInput: "div.actions input.select-across",
|
||||||
acrossQuestions: "div.actions span.question",
|
acrossQuestions: "div.actions span.question",
|
||||||
acrossClears: "div.actions span.clear",
|
acrossClears: "div.actions span.clear",
|
||||||
allToggle: "#action-toggle",
|
allToggleId: "action-toggle",
|
||||||
selectedClass: "selected"
|
selectedClass: "selected"
|
||||||
};
|
};
|
||||||
$(document).ready(function() {
|
|
||||||
const $actionsEls = $('tr input.action-select');
|
window.Actions = function(actionCheckboxes, options) {
|
||||||
if ($actionsEls.length > 0) {
|
options = Object.assign({}, defaults, options);
|
||||||
$actionsEls.actions();
|
let list_editable_changed = false;
|
||||||
|
let lastChecked = null;
|
||||||
|
let shiftPressed = false;
|
||||||
|
|
||||||
|
document.addEventListener('keydown', (event) => {
|
||||||
|
shiftPressed = event.shiftKey;
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('keyup', (event) => {
|
||||||
|
shiftPressed = event.shiftKey;
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById(options.allToggleId).addEventListener('click', function(event) {
|
||||||
|
checker(actionCheckboxes, options, this.checked);
|
||||||
|
updateCounter(actionCheckboxes, options);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) {
|
||||||
|
el.addEventListener('click', function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
const acrossInputs = document.querySelectorAll(options.acrossInput);
|
||||||
|
acrossInputs.forEach(function(acrossInput) {
|
||||||
|
acrossInput.value = 1;
|
||||||
|
});
|
||||||
|
showClear(options);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelectorAll(options.acrossClears + " a").forEach(function(el) {
|
||||||
|
el.addEventListener('click', function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
document.getElementById(options.allToggleId).checked = false;
|
||||||
|
clearAcross(options);
|
||||||
|
checker(actionCheckboxes, options, false);
|
||||||
|
updateCounter(actionCheckboxes, options);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function affectedCheckboxes(target, withModifier) {
|
||||||
|
const multiSelect = (lastChecked && withModifier && lastChecked !== target);
|
||||||
|
if (!multiSelect) {
|
||||||
|
return [target];
|
||||||
|
}
|
||||||
|
const checkboxes = Array.from(actionCheckboxes);
|
||||||
|
const targetIndex = checkboxes.findIndex(el => el === target);
|
||||||
|
const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked);
|
||||||
|
const startIndex = Math.min(targetIndex, lastCheckedIndex);
|
||||||
|
const endIndex = Math.max(targetIndex, lastCheckedIndex);
|
||||||
|
const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex));
|
||||||
|
return filtered;
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.from(document.getElementById('result_list').tBodies).forEach(function(el) {
|
||||||
|
el.addEventListener('change', function(event) {
|
||||||
|
const target = event.target;
|
||||||
|
if (target.classList.contains('action-select')) {
|
||||||
|
const checkboxes = affectedCheckboxes(target, shiftPressed);
|
||||||
|
checker(checkboxes, options, target.checked);
|
||||||
|
updateCounter(actionCheckboxes, options);
|
||||||
|
lastChecked = target;
|
||||||
|
} else {
|
||||||
|
list_editable_changed = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector('#changelist-form button[name=index]').addEventListener('click', function() {
|
||||||
|
if (list_editable_changed) {
|
||||||
|
const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
|
||||||
|
if (!confirmed) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const el = document.querySelector('#changelist-form input[name=_save]');
|
||||||
|
// The button does not exist if no fields are editable.
|
||||||
|
if (el) {
|
||||||
|
el.addEventListener('click', function(event) {
|
||||||
|
if (document.querySelector('[name=action]').value) {
|
||||||
|
const text = list_editable_changed
|
||||||
|
? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.")
|
||||||
|
: gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button.");
|
||||||
|
if (!confirm(text)) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Call function fn when the DOM is loaded and ready. If it is already
|
||||||
|
// loaded, call the function now.
|
||||||
|
// http://youmightnotneedjquery.com/#ready
|
||||||
|
function ready(fn) {
|
||||||
|
if (document.readyState !== 'loading') {
|
||||||
|
fn();
|
||||||
|
} else {
|
||||||
|
document.addEventListener('DOMContentLoaded', fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ready(function() {
|
||||||
|
const actionsEls = document.querySelectorAll('tr input.action-select');
|
||||||
|
if (actionsEls.length > 0) {
|
||||||
|
Actions(actionsEls);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,8 +28,7 @@
|
||||||
timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
|
timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
|
||||||
timezoneOffset: 0,
|
timezoneOffset: 0,
|
||||||
init: function() {
|
init: function() {
|
||||||
const body = document.getElementsByTagName('body')[0];
|
const serverOffset = document.body.dataset.adminUtcOffset;
|
||||||
const serverOffset = body.dataset.adminUtcOffset;
|
|
||||||
if (serverOffset) {
|
if (serverOffset) {
|
||||||
const localOffset = new Date().getTimezoneOffset() * -60;
|
const localOffset = new Date().getTimezoneOffset() * -60;
|
||||||
DateTimeShortcuts.timezoneOffset = localOffset - serverOffset;
|
DateTimeShortcuts.timezoneOffset = localOffset - serverOffset;
|
||||||
|
@ -48,8 +47,7 @@
|
||||||
},
|
},
|
||||||
// Return the current time while accounting for the server timezone.
|
// Return the current time while accounting for the server timezone.
|
||||||
now: function() {
|
now: function() {
|
||||||
const body = document.getElementsByTagName('body')[0];
|
const serverOffset = document.body.dataset.adminUtcOffset;
|
||||||
const serverOffset = body.dataset.adminUtcOffset;
|
|
||||||
if (serverOffset) {
|
if (serverOffset) {
|
||||||
const localNow = new Date();
|
const localNow = new Date();
|
||||||
const localOffset = localNow.getTimezoneOffset() * -60;
|
const localOffset = localNow.getTimezoneOffset() * -60;
|
||||||
|
|
|
@ -7,13 +7,9 @@
|
||||||
|
|
||||||
function showAdminPopup(triggeringLink, name_regexp, add_popup) {
|
function showAdminPopup(triggeringLink, name_regexp, add_popup) {
|
||||||
const name = triggeringLink.id.replace(name_regexp, '');
|
const name = triggeringLink.id.replace(name_regexp, '');
|
||||||
let href = triggeringLink.href;
|
const href = new URL(triggeringLink.href);
|
||||||
if (add_popup) {
|
if (add_popup) {
|
||||||
if (href.indexOf('?') === -1) {
|
href.searchParams.set('_popup', 1);
|
||||||
href += '?_popup=1';
|
|
||||||
} else {
|
|
||||||
href += '&_popup=1';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
||||||
win.focus();
|
win.focus();
|
||||||
|
|
|
@ -7,7 +7,10 @@
|
||||||
data: function(params) {
|
data: function(params) {
|
||||||
return {
|
return {
|
||||||
term: params.term,
|
term: params.term,
|
||||||
page: params.page
|
page: params.page,
|
||||||
|
app_label: $element.data('app-label'),
|
||||||
|
model_name: $element.data('model-name'),
|
||||||
|
field_name: $element.data('field-name')
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,20 @@ depends on core.js for utility functions like removeChildren or quickElement
|
||||||
gettext('November'),
|
gettext('November'),
|
||||||
gettext('December')
|
gettext('December')
|
||||||
],
|
],
|
||||||
|
monthsOfYearAbbrev: [
|
||||||
|
pgettext('abbrev. month January', 'Jan'),
|
||||||
|
pgettext('abbrev. month February', 'Feb'),
|
||||||
|
pgettext('abbrev. month March', 'Mar'),
|
||||||
|
pgettext('abbrev. month April', 'Apr'),
|
||||||
|
pgettext('abbrev. month May', 'May'),
|
||||||
|
pgettext('abbrev. month June', 'Jun'),
|
||||||
|
pgettext('abbrev. month July', 'Jul'),
|
||||||
|
pgettext('abbrev. month August', 'Aug'),
|
||||||
|
pgettext('abbrev. month September', 'Sep'),
|
||||||
|
pgettext('abbrev. month October', 'Oct'),
|
||||||
|
pgettext('abbrev. month November', 'Nov'),
|
||||||
|
pgettext('abbrev. month December', 'Dec')
|
||||||
|
],
|
||||||
daysOfWeek: [
|
daysOfWeek: [
|
||||||
pgettext('one letter Sunday', 'S'),
|
pgettext('one letter Sunday', 'S'),
|
||||||
pgettext('one letter Monday', 'M'),
|
pgettext('one letter Monday', 'M'),
|
||||||
|
|
|
@ -14,10 +14,11 @@
|
||||||
ready(function() {
|
ready(function() {
|
||||||
function handleClick(event) {
|
function handleClick(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
if (window.location.search.indexOf('&_popup=1') === -1) {
|
const params = new URLSearchParams(window.location.search);
|
||||||
window.history.back(); // Go back if not a popup.
|
if (params.has('_popup')) {
|
||||||
|
window.close(); // Close the popup.
|
||||||
} else {
|
} else {
|
||||||
window.close(); // Otherwise, close the popup.
|
window.history.back(); // Otherwise, go back.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -85,6 +85,12 @@ function findPosY(obj) {
|
||||||
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
|
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Date.prototype.getAbbrevMonthName = function() {
|
||||||
|
return typeof window.CalendarNamespace === "undefined"
|
||||||
|
? this.getTwoDigitMonth()
|
||||||
|
: window.CalendarNamespace.monthsOfYearAbbrev[this.getMonth()];
|
||||||
|
};
|
||||||
|
|
||||||
Date.prototype.getFullMonthName = function() {
|
Date.prototype.getFullMonthName = function() {
|
||||||
return typeof window.CalendarNamespace === "undefined"
|
return typeof window.CalendarNamespace === "undefined"
|
||||||
? this.getTwoDigitMonth()
|
? this.getTwoDigitMonth()
|
||||||
|
@ -93,6 +99,7 @@ function findPosY(obj) {
|
||||||
|
|
||||||
Date.prototype.strftime = function(format) {
|
Date.prototype.strftime = function(format) {
|
||||||
const fields = {
|
const fields = {
|
||||||
|
b: this.getAbbrevMonthName(),
|
||||||
B: this.getFullMonthName(),
|
B: this.getFullMonthName(),
|
||||||
c: this.toString(),
|
c: this.toString(),
|
||||||
d: this.getTwoDigitDate(),
|
d: this.getTwoDigitDate(),
|
||||||
|
|
|
@ -134,8 +134,7 @@
|
||||||
for (const lookup of ALL_DOWNCODE_MAPS) {
|
for (const lookup of ALL_DOWNCODE_MAPS) {
|
||||||
Object.assign(Downcoder.map, lookup);
|
Object.assign(Downcoder.map, lookup);
|
||||||
}
|
}
|
||||||
Downcoder.chars = Object.keys(Downcoder.map);
|
Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g');
|
||||||
Downcoder.regex = new RegExp(Downcoder.chars.join('|'), 'g');
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -149,23 +148,9 @@
|
||||||
|
|
||||||
function URLify(s, num_chars, allowUnicode) {
|
function URLify(s, num_chars, allowUnicode) {
|
||||||
// changes, e.g., "Petty theft" to "petty-theft"
|
// changes, e.g., "Petty theft" to "petty-theft"
|
||||||
// remove all these words from the string before urlifying
|
|
||||||
if (!allowUnicode) {
|
if (!allowUnicode) {
|
||||||
s = downcode(s);
|
s = downcode(s);
|
||||||
}
|
}
|
||||||
const hasUnicodeChars = /[^\u0000-\u007f]/.test(s);
|
|
||||||
// Remove English words only if the string contains ASCII (English)
|
|
||||||
// characters.
|
|
||||||
if (!hasUnicodeChars) {
|
|
||||||
const removeList = [
|
|
||||||
"a", "an", "as", "at", "before", "but", "by", "for", "from",
|
|
||||||
"is", "in", "into", "like", "of", "off", "on", "onto", "per",
|
|
||||||
"since", "than", "the", "this", "that", "to", "up", "via",
|
|
||||||
"with"
|
|
||||||
];
|
|
||||||
const r = new RegExp('\\b(' + removeList.join('|') + ')\\b', 'gi');
|
|
||||||
s = s.replace(r, '');
|
|
||||||
}
|
|
||||||
s = s.toLowerCase(); // convert to lowercase
|
s = s.toLowerCase(); // convert to lowercase
|
||||||
// if downcode doesn't hit, the char will be stripped here
|
// if downcode doesn't hit, the char will be stripped here
|
||||||
if (allowUnicode) {
|
if (allowUnicode) {
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,9 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
.custom-article {
|
|
||||||
border-style: solid;
|
|
||||||
border-color: gray;
|
|
||||||
border-width: 1px;
|
|
||||||
padding: 5px;
|
|
||||||
border-left: 3px solid SteelBlue;
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 754 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M19.07,4.93C17.22,3 14.66,1.96 12,2C9.34,1.96 6.79,3 4.94,4.93C3,6.78 1.96,9.34 2,12C1.96,14.66 3,17.21 4.93,19.06C6.78,21 9.34,22.04 12,22C14.66,22.04 17.21,21 19.06,19.07C21,17.22 22.04,14.66 22,12C22.04,9.34 21,6.78 19.07,4.93M17,12V18H13.5V13H10.5V18H7V12H5L12,5L19.5,12H17Z" /></svg>
|
|
Before Width: | Height: | Size: 573 B |
File diff suppressed because one or more lines are too long
|
@ -1,48 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
$('.downmovie').click(function(event) {
|
|
||||||
var id = $(this).attr('id')
|
|
||||||
var href = $(this).attr('href')
|
|
||||||
var hc = window.location.href
|
|
||||||
var url = '../addcount/' + id
|
|
||||||
|
|
||||||
if(hc.search('director')){
|
|
||||||
url = '../../addcount/' + id
|
|
||||||
}
|
|
||||||
|
|
||||||
event.preventDefault();
|
|
||||||
$.ajax({
|
|
||||||
url: url,
|
|
||||||
success : function(data){
|
|
||||||
$('#down' + id).text(data);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
var msg = 'Gracias al "honorable" poder legislativo de mi país, ya no es posible compartir nada, contactanos en nuestro canal de Telegram si tienes dudas: @mauflix'
|
|
||||||
alert(msg);
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
function director_change(){
|
|
||||||
var directors = document.getElementById('directors')
|
|
||||||
if(directors.selectedIndex){
|
|
||||||
name = directors.options[directors.selectedIndex].value
|
|
||||||
window.location.href = '/movies/director/' + name
|
|
||||||
}else{
|
|
||||||
window.location.href = '/movies'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function search_movie(){
|
|
||||||
var search = document.getElementById('search')
|
|
||||||
window.location.href = '/movies/' + search.value
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function search_key_press(ev){
|
|
||||||
alert(ev.keyCode)
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 434 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,6 +0,0 @@
|
||||||
/*!
|
|
||||||
Autosize 3.0.15
|
|
||||||
license: MIT
|
|
||||||
http://www.jacklmoore.com/autosize
|
|
||||||
*/
|
|
||||||
!function(e,t){if("function"==typeof define&&define.amd)define(["exports","module"],t);else if("undefined"!=typeof exports&&"undefined"!=typeof module)t(exports,module);else{var n={exports:{}};t(n.exports,n),e.autosize=n.exports}}(this,function(e,t){"use strict";function n(e){function t(){var t=window.getComputedStyle(e,null);p=t.overflowY,"vertical"===t.resize?e.style.resize="none":"both"===t.resize&&(e.style.resize="horizontal"),c="content-box"===t.boxSizing?-(parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)):parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),isNaN(c)&&(c=0),i()}function n(t){var n=e.style.width;e.style.width="0px",e.offsetWidth,e.style.width=n,p=t,f&&(e.style.overflowY=t),o()}function o(){var t=window.pageYOffset,n=document.body.scrollTop,o=e.style.height;e.style.height="auto";var i=e.scrollHeight+c;return 0===e.scrollHeight?void(e.style.height=o):(e.style.height=i+"px",v=e.clientWidth,document.documentElement.scrollTop=t,void(document.body.scrollTop=n))}function i(){var t=e.style.height;o();var i=window.getComputedStyle(e,null);if(i.height!==e.style.height?"visible"!==p&&n("visible"):"hidden"!==p&&n("hidden"),t!==e.style.height){var r=d("autosize:resized");e.dispatchEvent(r)}}var s=void 0===arguments[1]?{}:arguments[1],a=s.setOverflowX,l=void 0===a?!0:a,u=s.setOverflowY,f=void 0===u?!0:u;if(e&&e.nodeName&&"TEXTAREA"===e.nodeName&&!r.has(e)){var c=null,p=null,v=e.clientWidth,h=function(){e.clientWidth!==v&&i()},y=function(t){window.removeEventListener("resize",h,!1),e.removeEventListener("input",i,!1),e.removeEventListener("keyup",i,!1),e.removeEventListener("autosize:destroy",y,!1),e.removeEventListener("autosize:update",i,!1),r["delete"](e),Object.keys(t).forEach(function(n){e.style[n]=t[n]})}.bind(e,{height:e.style.height,resize:e.style.resize,overflowY:e.style.overflowY,overflowX:e.style.overflowX,wordWrap:e.style.wordWrap});e.addEventListener("autosize:destroy",y,!1),"onpropertychange"in e&&"oninput"in e&&e.addEventListener("keyup",i,!1),window.addEventListener("resize",h,!1),e.addEventListener("input",i,!1),e.addEventListener("autosize:update",i,!1),r.add(e),l&&(e.style.overflowX="hidden",e.style.wordWrap="break-word"),t()}}function o(e){if(e&&e.nodeName&&"TEXTAREA"===e.nodeName){var t=d("autosize:destroy");e.dispatchEvent(t)}}function i(e){if(e&&e.nodeName&&"TEXTAREA"===e.nodeName){var t=d("autosize:update");e.dispatchEvent(t)}}var r="function"==typeof Set?new Set:function(){var e=[];return{has:function(t){return Boolean(e.indexOf(t)>-1)},add:function(t){e.push(t)},"delete":function(t){e.splice(e.indexOf(t),1)}}}(),d=function(e){return new Event(e)};try{new Event("test")}catch(s){d=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!1),t}}var a=null;"undefined"==typeof window||"function"!=typeof window.getComputedStyle?(a=function(e){return e},a.destroy=function(e){return e},a.update=function(e){return e}):(a=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return n(e,t)}),e},a.destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],o),e},a.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],i),e}),t.exports=a});
|
|
|
@ -1,250 +0,0 @@
|
||||||
Suit = {};
|
|
||||||
window.Suit = Suit;
|
|
||||||
|
|
||||||
(function ($) {
|
|
||||||
if (!$)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Suit.$ = $;
|
|
||||||
|
|
||||||
// Register callbacks to perform after inline has been added
|
|
||||||
Suit.after_inline = function () {
|
|
||||||
var functions = {};
|
|
||||||
var register = function (fn_name, fn_callback) {
|
|
||||||
functions[fn_name] = fn_callback;
|
|
||||||
};
|
|
||||||
|
|
||||||
var run = function (inline_prefix, row) {
|
|
||||||
for (var fn_name in functions) {
|
|
||||||
functions[fn_name](inline_prefix, row);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
register: register,
|
|
||||||
run: run
|
|
||||||
};
|
|
||||||
}();
|
|
||||||
|
|
||||||
Suit.ListActionsToggle = function () {
|
|
||||||
var $topActions;
|
|
||||||
|
|
||||||
var init = function () {
|
|
||||||
$(document).ready(function () {
|
|
||||||
$topActions = $('.results').parent().find('.actions').eq(0);
|
|
||||||
if (!$topActions.length)
|
|
||||||
return;
|
|
||||||
|
|
||||||
$("tr input.action-select, #action-toggle").on('click', checkIfSelected);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var checkIfSelected = function () {
|
|
||||||
if ($('tr.selected').length) {
|
|
||||||
$topActions.slideDown('fast');
|
|
||||||
} else {
|
|
||||||
$topActions.slideUp('fast');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
init: init
|
|
||||||
}
|
|
||||||
|
|
||||||
}();
|
|
||||||
|
|
||||||
|
|
||||||
Suit.FixedBar = function () {
|
|
||||||
var didScroll = false, $fixedItem, $fixedItemParent, $win, $body,
|
|
||||||
itemOffset,
|
|
||||||
extraOffset = 0,
|
|
||||||
fixed = false;
|
|
||||||
|
|
||||||
function init(selector) {
|
|
||||||
$fixedItem = $(selector || '.submit-row');
|
|
||||||
if (!$fixedItem.length)
|
|
||||||
return;
|
|
||||||
|
|
||||||
$fixedItemParent = $fixedItem.parents('form');
|
|
||||||
itemOffset = $fixedItem.offset();
|
|
||||||
$win = $(window);
|
|
||||||
window.onscroll = onScroll;
|
|
||||||
window.onresize = onScroll;
|
|
||||||
onScroll();
|
|
||||||
|
|
||||||
setInterval(function () {
|
|
||||||
if (didScroll) {
|
|
||||||
didScroll = false;
|
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onScroll() {
|
|
||||||
didScroll = true;
|
|
||||||
|
|
||||||
var itemHeight = $fixedItem.height(),
|
|
||||||
scrollTop = $win.scrollTop();
|
|
||||||
|
|
||||||
if (scrollTop + $win.height() - itemHeight - extraOffset < itemOffset.top) {
|
|
||||||
if (!fixed) {
|
|
||||||
$fixedItem.addClass('fixed');
|
|
||||||
$fixedItemParent.addClass('fixed').css('padding-bottom', itemHeight + 'px');
|
|
||||||
fixed = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (fixed) {
|
|
||||||
$fixedItem.removeClass('fixed');
|
|
||||||
$fixedItemParent.removeClass('fixed').css('padding-bottom', '');
|
|
||||||
fixed = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
init: init
|
|
||||||
};
|
|
||||||
}();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Avoids double-submit issues in the change_form.
|
|
||||||
*/
|
|
||||||
$.fn.suitFormDebounce = function () {
|
|
||||||
var $form = $(this),
|
|
||||||
$saveButtons = $form.find('.submit-row button, .submit-row input[type=button], .submit-row input[type=submit]'),
|
|
||||||
submitting = false;
|
|
||||||
|
|
||||||
$form.submit(function () {
|
|
||||||
if (submitting) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
submitting = true;
|
|
||||||
$saveButtons.addClass('disabled');
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
$saveButtons.removeClass('disabled');
|
|
||||||
submitting = false;
|
|
||||||
}, 5000);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Content tabs
|
|
||||||
*/
|
|
||||||
$.fn.suitFormTabs = function () {
|
|
||||||
|
|
||||||
var $tabs = $(this);
|
|
||||||
var tabPrefix = $tabs.data('tab-prefix');
|
|
||||||
if (!tabPrefix)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var $tabLinks = $tabs.find('a');
|
|
||||||
|
|
||||||
function tabContents($link) {
|
|
||||||
return $('.' + tabPrefix + '-' + $link.attr('href').replace('#', ''));
|
|
||||||
}
|
|
||||||
|
|
||||||
function activateTabs() {
|
|
||||||
// Init tab by error, by url hash or init first tab
|
|
||||||
if (window.location.hash) {
|
|
||||||
var foundError;
|
|
||||||
$tabLinks.each(function () {
|
|
||||||
var $link = $(this);
|
|
||||||
if (tabContents($link).find('.error, .errorlist').length != 0) {
|
|
||||||
$link.addClass('has-error');
|
|
||||||
$link.trigger('click');
|
|
||||||
foundError = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
!foundError && $($tabs).find('a[href=\\' + window.location.hash + ']').click();
|
|
||||||
} else {
|
|
||||||
$tabLinks.first().trigger('click');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$tabLinks.click(function () {
|
|
||||||
var $link = $(this),
|
|
||||||
showEvent = $.Event('shown.suit.tab', {
|
|
||||||
relatedTarget: $link,
|
|
||||||
tab: $link.attr('href').replace('#', '')
|
|
||||||
});
|
|
||||||
$link.parent().parent().find('.active').removeClass('active');
|
|
||||||
$link.addClass('active');
|
|
||||||
$('.' + tabPrefix).removeClass('show').addClass('hidden-xs-up');
|
|
||||||
tabContents($link).removeClass('hidden-xs-up').addClass('show');
|
|
||||||
$link.trigger(showEvent);
|
|
||||||
});
|
|
||||||
|
|
||||||
activateTabs();
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Characters count for CharacterCountTextarea */
|
|
||||||
$.fn.suitCharactersCount = function () {
|
|
||||||
var $elements = $(this);
|
|
||||||
|
|
||||||
if (!$elements.length)
|
|
||||||
return;
|
|
||||||
|
|
||||||
$elements.each(function () {
|
|
||||||
var $el = $(this),
|
|
||||||
$countEl = $('<div class="suit-char-count"></div>');
|
|
||||||
$el.after($countEl);
|
|
||||||
$el.on('keyup', function (e) {
|
|
||||||
updateCount($(e.currentTarget));
|
|
||||||
});
|
|
||||||
updateCount($el);
|
|
||||||
});
|
|
||||||
|
|
||||||
function updateCount($el) {
|
|
||||||
var maxCount = $el.data('suit-maxcount'),
|
|
||||||
twitterCount = $el.data('suit-twitter-count'),
|
|
||||||
value = $el.val(),
|
|
||||||
len = twitterCount ? getTweetLength(value) : value.length,
|
|
||||||
count = maxCount ? maxCount - len : len;
|
|
||||||
if (count < 0)
|
|
||||||
count = '<span class="text-danger">' + count + '</span>';
|
|
||||||
|
|
||||||
$el.next().first().html(count);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getTweetLength(input) {
|
|
||||||
var tmp = "";
|
|
||||||
for (var i = 0; i < 23; i++) {
|
|
||||||
tmp += "o"
|
|
||||||
}
|
|
||||||
return input.replace(/(http:\/\/[\S]*)/g, tmp).length;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Search filters - submit only changed fields
|
|
||||||
*/
|
|
||||||
$.fn.suitSearchFilters = function () {
|
|
||||||
$(this).change(function () {
|
|
||||||
var $field = $(this);
|
|
||||||
var $option = $field.find('option:selected');
|
|
||||||
var select_name = $option.data('name');
|
|
||||||
if (select_name) {
|
|
||||||
$field.attr('name', select_name);
|
|
||||||
} else {
|
|
||||||
$field.removeAttr('name');
|
|
||||||
}
|
|
||||||
// Handle additional values for date filters
|
|
||||||
var additional = $option.data('additional');
|
|
||||||
console.log($field, additional)
|
|
||||||
if (additional) {
|
|
||||||
var hiddenId = $field.data('name') + '_add';
|
|
||||||
var $hidden = $('#' + hiddenId);
|
|
||||||
if (!$hidden.length) {
|
|
||||||
$hidden = $('<input/>').attr('type', 'hidden').attr('id', hiddenId);
|
|
||||||
$field.after($hidden);
|
|
||||||
}
|
|
||||||
additional = additional.split('=');
|
|
||||||
$hidden.attr('name', additional[0]).val(additional[1])
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$(this).trigger('change');
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
})(typeof django !== 'undefined' ? django.jQuery : undefined);
|
|
|
@ -1,183 +0,0 @@
|
||||||
/**
|
|
||||||
* List sortables
|
|
||||||
*/
|
|
||||||
(function ($) {
|
|
||||||
$.fn.suit_list_sortable = function () {
|
|
||||||
var $inputs = $(this);
|
|
||||||
if (!$inputs.length)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Detect if this is normal or mptt table
|
|
||||||
var mptt_table = $inputs.first().closest('table').hasClass('table-mptt');
|
|
||||||
|
|
||||||
function performMove($arrow, $row) {
|
|
||||||
var $next, $prev;
|
|
||||||
|
|
||||||
$row.closest('table').find('tr.selected').removeClass('selected');
|
|
||||||
if (mptt_table) {
|
|
||||||
function getPadding($tr) {
|
|
||||||
return parseInt($tr.find('th:first').css('padding-left'));
|
|
||||||
}
|
|
||||||
|
|
||||||
function findWithChildren($tr) {
|
|
||||||
var padding = getPadding($tr);
|
|
||||||
return $tr.nextUntil(function () {
|
|
||||||
return getPadding($(this)) <= padding
|
|
||||||
}).andSelf();
|
|
||||||
}
|
|
||||||
|
|
||||||
var padding = getPadding($row);
|
|
||||||
var $rows_to_move = findWithChildren($row);
|
|
||||||
if ($arrow.data('dir') === 'down') {
|
|
||||||
$next = $rows_to_move.last().next();
|
|
||||||
if ($next.length && getPadding($next) === padding) {
|
|
||||||
var $after = findWithChildren($next).last();
|
|
||||||
if ($after.length) {
|
|
||||||
$rows_to_move.insertAfter($after).addClass('selected');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$prev = $row.prevUntil(function () {
|
|
||||||
return getPadding($(this)) <= padding
|
|
||||||
}).andSelf().first().prev();
|
|
||||||
if ($prev.length && getPadding($prev) === padding) {
|
|
||||||
$rows_to_move.insertBefore($prev).addClass('selected')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ($arrow.data('dir') === 'down') {
|
|
||||||
$next = $row.next();
|
|
||||||
if ($next.is(':visible') && $next.length) {
|
|
||||||
$row.insertAfter($next).addClass('selected')
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$prev = $row.prev();
|
|
||||||
if ($prev.is(':visible') && $prev.length) {
|
|
||||||
$row.insertBefore($prev).addClass('selected')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
markLastInline($row.parent());
|
|
||||||
}
|
|
||||||
|
|
||||||
function onArrowClick(e) {
|
|
||||||
var $sortable = $(this);
|
|
||||||
var $row = $sortable.closest(
|
|
||||||
$sortable.hasClass('sortable-stacked') ? 'div.inline-related' : 'tr'
|
|
||||||
);
|
|
||||||
performMove($sortable, $row);
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
function createLink(text, direction, on_click_func, is_stacked) {
|
|
||||||
return $('<a/>').attr('href', '#')
|
|
||||||
.addClass('sortable sortable-' + direction +
|
|
||||||
(is_stacked ? ' sortable-stacked' : ''))
|
|
||||||
.attr('data-dir', direction).html(text)
|
|
||||||
.on('click', on_click_func);
|
|
||||||
}
|
|
||||||
|
|
||||||
function markLastInline($rowParent) {
|
|
||||||
$rowParent.find(' > .last-sortable').removeClass('last-sortable');
|
|
||||||
$rowParent.find('tr.form-row:visible:last').addClass('last-sortable');
|
|
||||||
}
|
|
||||||
|
|
||||||
var $lastSortable;
|
|
||||||
$inputs.each(function () {
|
|
||||||
var $inline_sortable = $('<div class="inline-sortable"/>'),
|
|
||||||
icon = '<span class="fa fa-lg fa-arrow-up"></span>',
|
|
||||||
$sortable = $(this),
|
|
||||||
is_stacked = $sortable.hasClass('suit-sortable-stacked');
|
|
||||||
|
|
||||||
var $up_link = createLink(icon, 'up', onArrowClick, is_stacked),
|
|
||||||
$down_link = createLink(icon.replace('-up', '-down'), 'down', onArrowClick, is_stacked);
|
|
||||||
|
|
||||||
if (is_stacked) {
|
|
||||||
var $sortable_row = $sortable.closest('div.form-group'),
|
|
||||||
$stacked_block = $sortable.closest('div.inline-related'),
|
|
||||||
$links_span = $('<span/>').attr('class', 'stacked-inline-sortable');
|
|
||||||
|
|
||||||
// Add arrows to header h3, move order input and remove order field row
|
|
||||||
$links_span.append($up_link).append($down_link);
|
|
||||||
$links_span.insertAfter($stacked_block.find('.inline_label'));
|
|
||||||
$stacked_block.append($sortable);
|
|
||||||
$sortable_row.remove();
|
|
||||||
} else {
|
|
||||||
$sortable.parent().append($inline_sortable);
|
|
||||||
$inline_sortable.append($up_link);
|
|
||||||
$inline_sortable.append($down_link);
|
|
||||||
$lastSortable = $sortable;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$lastSortable && markLastInline($lastSortable.closest('.form-row').parent());
|
|
||||||
|
|
||||||
// Filters out unchanged checkboxes, selects and sortable field itself
|
|
||||||
function filter_unchanged(i, input) {
|
|
||||||
if (input.type == 'checkbox') {
|
|
||||||
if (input.defaultChecked == input.checked) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (input.type == 'select-one' || input.type == 'select-multiple') {
|
|
||||||
var options = input.options, option;
|
|
||||||
for (var j = 0; j < options.length; j++) {
|
|
||||||
option = options[j];
|
|
||||||
if (option.selected && option.selected == option.defaultSelected) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if ($(input).hasClass('suit-sortable')) {
|
|
||||||
if (input.defaultValue == input.value && input.value == 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update input count right before submit
|
|
||||||
if ($inputs && $inputs.length) {
|
|
||||||
var $last_input = $inputs.last();
|
|
||||||
var selector = $(this).selector;
|
|
||||||
$($last_input[0].form).submit(function (e) {
|
|
||||||
var i = 0, value;
|
|
||||||
// e.preventDefault();
|
|
||||||
$(selector).each(function () {
|
|
||||||
var $input = $(this);
|
|
||||||
var fieldset_id = $input.attr('name').split(/-\d+-/)[0];
|
|
||||||
// Check if any of new dynamic block values has been added
|
|
||||||
var $set_block = $input.closest('.dynamic-' + fieldset_id);
|
|
||||||
var $changed_fields = $set_block.find(":input[type!='hidden']:not(.suit-sortable)").filter(
|
|
||||||
function () {
|
|
||||||
return $(this).val() != "";
|
|
||||||
}).filter(filter_unchanged);
|
|
||||||
// console.log($changed_fields.length, $changed_fields);
|
|
||||||
var is_changelist = !$set_block.length;
|
|
||||||
if (is_changelist
|
|
||||||
|| $set_block.hasClass('has_original')
|
|
||||||
|| $changed_fields.serializeArray().length
|
|
||||||
// Since jQuery serialize() doesn't include type=file do additional check
|
|
||||||
|| $changed_fields.find(":input[type='file']").addBack().length) {
|
|
||||||
value = i++;
|
|
||||||
$input.val(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Suit.after_inline.register('bind_sortable_arrows', function (prefix, row) {
|
|
||||||
$(row).find('.suit-sortable').on('click', onArrowClick);
|
|
||||||
markLastInline($(row).parent());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
$(function () {
|
|
||||||
$('.suit-sortable').suit_list_sortable();
|
|
||||||
});
|
|
||||||
|
|
||||||
}(django.jQuery));
|
|
||||||
|
|
||||||
// Call Suit.after_inline
|
|
||||||
django.jQuery(document).on('formset:added', function (e, row, prefix) {
|
|
||||||
Suit.after_inline.run(prefix, row);
|
|
||||||
});
|
|
|
@ -1,57 +1,79 @@
|
||||||
<!DOCTYPE HTML>
|
<!DOCTYPE HTML>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>MauFlix</title>
|
||||||
<title>MauFlix</title>
|
{% load static %}
|
||||||
|
<link rel="shortcut icon" href="{% static 'img/favicon.png' %}">
|
||||||
{% load static %}
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
|
||||||
<link rel="shortcut icon" href="{% static 'img/favicon.png' %}">
|
<link rel="stylesheet" href="https://jenil.github.io/bulmaswatch/darkly/bulmaswatch.min.css">
|
||||||
<link rel="stylesheet" href="{% static 'css/bulma.min.css' %}" type="text/css">
|
<link rel="stylesheet" href="{% static 'css/main.css' %}">
|
||||||
<link rel="stylesheet" href="{% static 'css/main.css' %}" type="text/css">
|
<script type="text/javascript" src="{% static 'js/main.js' %}"></script>
|
||||||
<script type="text/javascript" src="{% static 'js/jquery-3.4.1.min.js' %}" ></script>
|
|
||||||
<script type="text/javascript" src="{% static 'js/main.js' %}" ></script>
|
|
||||||
{% block media %}{% endblock %}
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).ready(function() {
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
<section class="hero is-small is-info">
|
||||||
<section class="hero is-light">
|
<div class="hero-body has-text-centered">
|
||||||
<div class="hero-body">
|
<p>Otras plataformas tienen todas las películas, excepto las que nos gustan :)</p>
|
||||||
<div class="container">
|
</div>
|
||||||
<h2 class="title"> MauFlix </h1>
|
</section>
|
||||||
<p class="subtitle">
|
<nav class="navbar is-fixed-top" role="navigation" aria-label="main navigation">
|
||||||
Otras plataformas tienen todas las películas, excepto las que nos gustan :)
|
<div class="navbar-brand">
|
||||||
</p>
|
<a class="navbar-item" href="{% url 'home' %}">
|
||||||
|
<img src="{% static 'img/logo-mauflix.png' %}" width="112" height="28">
|
||||||
|
</a>
|
||||||
|
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="menu">
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div id="menu" class="navbar-menu">
|
||||||
|
<div class="navbar-start">
|
||||||
|
{% if request.get_full_path == "/" %}
|
||||||
|
<a class="navbar-item" href="{% url 'search' %}">Buscar</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="navbar-item" href="{% url 'home' %}">Inicio</a>
|
||||||
|
{% endif %}
|
||||||
|
<div class="navbar-item has-dropdown is-hoverable">
|
||||||
|
<a class="navbar-link">Más</a>
|
||||||
|
<div class="navbar-dropdown">
|
||||||
|
<a class="navbar-item">Acerca</a>
|
||||||
|
<hr class="navbar-divider">
|
||||||
|
<a class="navbar-item">Reporta un problema</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="navbar-end">
|
||||||
|
<div class="navbar-item">
|
||||||
|
<div class="buttons">
|
||||||
|
<a class="button is-primary">Ingresa</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
|
||||||
|
|
||||||
<div id="movies">
|
|
||||||
{% block content %}{% endblock %}
|
|
||||||
</div>
|
</div>
|
||||||
|
</nav>
|
||||||
<footer class="footer">
|
<section id="main">
|
||||||
<div class="content has-text-centered">
|
{% block content %}{% endblock %}
|
||||||
<p>
|
</section>
|
||||||
Site develop thanks to:
|
<footer class="footer">
|
||||||
<a href="https://python.org" target='_blank'>Python</a>,
|
<div class="content">
|
||||||
<a href="https://djangoproject.com/" target='_blank'>Django</a>,
|
<p><b>BCH</b>: <code>qztd3l00xle5tffdqvh2snvadkuau2ml0uqm4n875d</code></p>
|
||||||
<a href="https://bulma.io/" target='_blank'>Bulma</a>.
|
<p><b>BTC</b>: <code>3FhiXcXmAesmQzrNEngjHFnvaJRhU1AGWV</code></p>
|
||||||
The website content is licensed <a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" target='_blank'>CC BY NC SA 4.0</a>.
|
<p><b>LTC</b>: <code>MBcgQ3LQJA4W2wsXknTdm2fxRSysLaBJHS</code></p>
|
||||||
</p>
|
<p><b>ETH</b>: <code>0x61a4f614a30ff686445751ed8328b82b77ecfc69</code></p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
<div class="content has-text-centered">
|
||||||
|
<p>Te recomendamos <a href="https://www.videolan.org/vlc/" target="_blank">VLC</a> para ver tus películas.</p>
|
||||||
|
</div>
|
||||||
|
<div class="content has-text-centered">
|
||||||
|
<p>
|
||||||
|
Sitio desarrollado con
|
||||||
|
<a href="https://python.org" target='_blank'>Python</a>,
|
||||||
|
<a href="https://djangoproject.com/" target='_blank'>Django</a> y
|
||||||
|
<a href="https://bulma.io/" target='_blank'>Bulma</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,31 +1,12 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% for section, content in sections.items %}
|
||||||
<section class="section">
|
{% if section != "genders"%}
|
||||||
<div class="container">
|
{% include 'section.html' with section=section content=content %}
|
||||||
<p class="subtitle">
|
{% else %}
|
||||||
Te recomendamos usar <a href="https://www.videolan.org/vlc/" target="_blank">VLC</a>
|
{% for gender, val in content.items %}
|
||||||
para ver tus <a href="/movies">películas</a>.
|
{% include 'section.html' with section=gender content=val %}
|
||||||
</p>
|
{% endfor %}
|
||||||
</div>
|
{% endif %}
|
||||||
</section>
|
{% endfor %}
|
||||||
|
|
||||||
<section class="section">
|
|
||||||
<div class="container">
|
|
||||||
<p class="">
|
|
||||||
<b>BCH</b>: <code>qztd3l00xle5tffdqvh2snvadkuau2ml0uqm4n875d</code>
|
|
||||||
</p>
|
|
||||||
<p class="">
|
|
||||||
<b>BTC</b>: <code>3FhiXcXmAesmQzrNEngjHFnvaJRhU1AGWV</code>
|
|
||||||
</p>
|
|
||||||
<p class="">
|
|
||||||
<b>LTC</b>: <code>MBcgQ3LQJA4W2wsXknTdm2fxRSysLaBJHS</code>
|
|
||||||
</p>
|
|
||||||
<p class="">
|
|
||||||
<b>ETH</b>: <code>0x61a4f614a30ff686445751ed8328b82b77ecfc69</code>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
{% extends "base.html" %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<script type='text/javascript' charset='utf-8'>
|
|
||||||
|
|
||||||
webix.ready(function(){
|
|
||||||
webix.ui(ui_main)
|
|
||||||
})
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
|
@ -1,87 +0,0 @@
|
||||||
{% extends "base.html" %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<BR>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Main container -->
|
|
||||||
<nav class="level">
|
|
||||||
<!-- Left side -->
|
|
||||||
<div class="level-left">
|
|
||||||
<div class="level-item">
|
|
||||||
<p class="subtitle is-6">
|
|
||||||
Mostrando <strong>{{count}}</strong> películas
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="level-item">
|
|
||||||
<div class="field has-addons">
|
|
||||||
<p class="control">
|
|
||||||
<input class="input" id='search' type="text" placeholder="Buscar por nombre">
|
|
||||||
</p>
|
|
||||||
<p class="control">
|
|
||||||
<button class="button is-info is-light" onclick='search_movie();'>Buscar</button>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="level-item">
|
|
||||||
<div class="select is-info">
|
|
||||||
<select id='directors' onChange='director_change()'>
|
|
||||||
<option>Por director</option>
|
|
||||||
{% for director in directors %}
|
|
||||||
{% ifequal selected_director director %}
|
|
||||||
<option selected>{{director}}</option>
|
|
||||||
{% else %}
|
|
||||||
<option>{{director}}</option>
|
|
||||||
{% endifequal %}
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Right side -->
|
|
||||||
<div class="level-right">
|
|
||||||
<p class="level-item">
|
|
||||||
{% if args %}
|
|
||||||
<button class="button is-info is-light"><a href="/movies/">Ultimas</a></button>
|
|
||||||
{% else %}
|
|
||||||
<button class="button is-info is-light"><a href="/movies/all">Ver Todas</a></button>
|
|
||||||
{% endif %}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
{% for row in movies %}
|
|
||||||
<div class="columns is-desktop is-variable is-1">
|
|
||||||
{% for cell in row %}
|
|
||||||
<div class="column" style="padding: 0.5rem;">
|
|
||||||
<article class="media has-background-light custom-article">
|
|
||||||
<figure class="media-left" style="padding-top: 0.75rem;">
|
|
||||||
<img src='{{ cell.image }}' height='150' width='100'>
|
|
||||||
</figure>
|
|
||||||
<div class="media-content">
|
|
||||||
<div class="content">
|
|
||||||
<p>
|
|
||||||
<strong><a class='downmovie' href='{{ cell.url }}' id={{ cell.id }}>{{ cell.name }}</a></strong>
|
|
||||||
<BR>
|
|
||||||
({{ cell.original_name }})
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<strong>Director</strong>: {{ cell.director }} <br>
|
|
||||||
<strong>País</strong>: {{ cell.country }} <br>
|
|
||||||
<strong>Año</strong>: {{ cell.year }}, <strong>Duración</strong>: {{ cell.duration }} <br>
|
|
||||||
<strong>Descargas</strong>: <span id='down{{cell.id}}'>{{ cell.count }}</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<BR>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<b>TODO: Búsqueda</b>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<section class="hero">
|
||||||
|
<div class="hero-body">
|
||||||
|
<p class="title">{{ section }}</p>
|
||||||
|
<div class="columns is-desktop">
|
||||||
|
{% for movie in content %}
|
||||||
|
<div class="column">
|
||||||
|
<figure class="image is-3by4">
|
||||||
|
<img src="../media/{{ movie.cartel }}">
|
||||||
|
</figure>
|
||||||
|
{{ movie }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
Loading…
Reference in New Issue