Fix pagination controls, move mixin to common app, fix pagination invocation on all views, and other random bug fixes
This commit is contained in:
parent
7edefe23c3
commit
6a61b79bbe
425 changed files with 51656 additions and 243 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.shortcuts import redirect, get_object_or_404
|
from django.shortcuts import redirect, get_object_or_404, render
|
||||||
from django.views.generic import ListView, CreateView, DeleteView, View, TemplateView, UpdateView
|
from django.views.generic import ListView, CreateView, DeleteView, View, TemplateView, UpdateView
|
||||||
from accounts.models import FriendCode, CustomUser
|
from accounts.models import FriendCode, CustomUser
|
||||||
from accounts.forms import FriendCodeForm, UserSettingsForm
|
from accounts.forms import FriendCodeForm, UserSettingsForm
|
||||||
|
|
@ -9,6 +9,7 @@ from django.db.models import Case, When, Value, BooleanField
|
||||||
from trades.models import TradeOffer, TradeAcceptance
|
from trades.models import TradeOffer, TradeAcceptance
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from trades.mixins import FriendCodeRequiredMixin
|
from trades.mixins import FriendCodeRequiredMixin
|
||||||
|
from common.mixins import ReusablePaginationMixin
|
||||||
|
|
||||||
class ListFriendCodesView(LoginRequiredMixin, ListView):
|
class ListFriendCodesView(LoginRequiredMixin, ListView):
|
||||||
"""
|
"""
|
||||||
|
|
@ -150,7 +151,7 @@ class EditFriendCodeView(LoginRequiredMixin, UpdateView):
|
||||||
messages.success(self.request, "Friend code updated successfully.")
|
messages.success(self.request, "Friend code updated successfully.")
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
class DashboardView(LoginRequiredMixin, FriendCodeRequiredMixin, TemplateView):
|
class DashboardView(LoginRequiredMixin, FriendCodeRequiredMixin, ReusablePaginationMixin, TemplateView):
|
||||||
template_name = "account/dashboard.html"
|
template_name = "account/dashboard.html"
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
|
|
@ -179,10 +180,10 @@ class DashboardView(LoginRequiredMixin, FriendCodeRequiredMixin, TemplateView):
|
||||||
return selected_friend_code
|
return selected_friend_code
|
||||||
|
|
||||||
def get_dashboard_offers_paginated(self, page_param):
|
def get_dashboard_offers_paginated(self, page_param):
|
||||||
from django.core.paginator import Paginator
|
|
||||||
selected_friend_code = self.get_selected_friend_code()
|
selected_friend_code = self.get_selected_friend_code()
|
||||||
queryset = TradeOffer.objects.filter(initiated_by=selected_friend_code, is_closed=False)
|
queryset = TradeOffer.objects.filter(initiated_by=selected_friend_code, is_closed=False)
|
||||||
return Paginator(queryset, 10).get_page(page_param)
|
object_list, pagination_context = self.paginate_data(queryset, int(page_param))
|
||||||
|
return {"object_list": object_list, "page_obj": pagination_context}
|
||||||
|
|
||||||
def get_involved_acceptances(self, selected_friend_code):
|
def get_involved_acceptances(self, selected_friend_code):
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
@ -209,8 +210,8 @@ class DashboardView(LoginRequiredMixin, FriendCodeRequiredMixin, TemplateView):
|
||||||
]) |
|
]) |
|
||||||
Q(accepted_by=selected_friend_code, state__in=[TradeAcceptance.AcceptanceState.SENT])
|
Q(accepted_by=selected_friend_code, state__in=[TradeAcceptance.AcceptanceState.SENT])
|
||||||
)
|
)
|
||||||
from django.core.paginator import Paginator
|
object_list, pagination_context = self.paginate_data(waiting, int(page_param))
|
||||||
return Paginator(waiting, 10).get_page(page_param)
|
return {"object_list": object_list, "page_obj": pagination_context}
|
||||||
|
|
||||||
def get_other_party_trade_acceptances_paginated(self, page_param):
|
def get_other_party_trade_acceptances_paginated(self, page_param):
|
||||||
selected_friend_code = self.get_selected_friend_code()
|
selected_friend_code = self.get_selected_friend_code()
|
||||||
|
|
@ -224,18 +225,17 @@ class DashboardView(LoginRequiredMixin, FriendCodeRequiredMixin, TemplateView):
|
||||||
Q(accepted_by=selected_friend_code, state__in=[TradeAcceptance.AcceptanceState.SENT])
|
Q(accepted_by=selected_friend_code, state__in=[TradeAcceptance.AcceptanceState.SENT])
|
||||||
)
|
)
|
||||||
others = involved.exclude(pk__in=waiting.values("pk"))
|
others = involved.exclude(pk__in=waiting.values("pk"))
|
||||||
from django.core.paginator import Paginator
|
object_list, pagination_context = self.paginate_data(others, int(page_param))
|
||||||
return Paginator(others, 10).get_page(page_param)
|
return {"object_list": object_list, "page_obj": pagination_context}
|
||||||
|
|
||||||
def get_closed_offers_paginated(self, page_param):
|
def get_closed_offers_paginated(self, page_param):
|
||||||
from django.core.paginator import Paginator
|
|
||||||
selected_friend_code = self.get_selected_friend_code()
|
selected_friend_code = self.get_selected_friend_code()
|
||||||
queryset = TradeOffer.objects.filter(initiated_by=selected_friend_code, is_closed=True)
|
queryset = TradeOffer.objects.filter(initiated_by=selected_friend_code, is_closed=True)
|
||||||
return Paginator(queryset, 10).get_page(page_param)
|
object_list, pagination_context = self.paginate_data(queryset, int(page_param))
|
||||||
|
return {"object_list": object_list, "page_obj": pagination_context}
|
||||||
|
|
||||||
def get_closed_acceptances_paginated(self, page_param):
|
def get_closed_acceptances_paginated(self, page_param):
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.core.paginator import Paginator
|
|
||||||
selected_friend_code = self.get_selected_friend_code()
|
selected_friend_code = self.get_selected_friend_code()
|
||||||
terminal_success_states = [
|
terminal_success_states = [
|
||||||
TradeAcceptance.AcceptanceState.THANKED_BY_INITIATOR,
|
TradeAcceptance.AcceptanceState.THANKED_BY_INITIATOR,
|
||||||
|
|
@ -246,41 +246,83 @@ class DashboardView(LoginRequiredMixin, FriendCodeRequiredMixin, TemplateView):
|
||||||
Q(trade_offer__initiated_by=selected_friend_code) | Q(accepted_by=selected_friend_code),
|
Q(trade_offer__initiated_by=selected_friend_code) | Q(accepted_by=selected_friend_code),
|
||||||
state__in=terminal_success_states
|
state__in=terminal_success_states
|
||||||
).order_by("-updated_at")
|
).order_by("-updated_at")
|
||||||
return Paginator(acceptance_qs, 10).get_page(page_param)
|
object_list, pagination_context = self.paginate_data(acceptance_qs, int(page_param))
|
||||||
|
return {"object_list": object_list, "page_obj": pagination_context}
|
||||||
|
|
||||||
def get_rejected_by_me_paginated(self, page_param):
|
def get_rejected_by_me_paginated(self, page_param):
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.core.paginator import Paginator
|
|
||||||
selected_friend_code = self.get_selected_friend_code()
|
selected_friend_code = self.get_selected_friend_code()
|
||||||
rejection = TradeAcceptance.objects.filter(
|
rejection = TradeAcceptance.objects.filter(
|
||||||
Q(trade_offer__initiated_by=selected_friend_code, state=TradeAcceptance.AcceptanceState.REJECTED_BY_INITIATOR) |
|
Q(trade_offer__initiated_by=selected_friend_code, state=TradeAcceptance.AcceptanceState.REJECTED_BY_INITIATOR) |
|
||||||
Q(accepted_by=selected_friend_code, state=TradeAcceptance.AcceptanceState.REJECTED_BY_ACCEPTOR)
|
Q(accepted_by=selected_friend_code, state=TradeAcceptance.AcceptanceState.REJECTED_BY_ACCEPTOR)
|
||||||
).order_by("-updated_at")
|
).order_by("-updated_at")
|
||||||
return Paginator(rejection, 10).get_page(page_param)
|
object_list, pagination_context = self.paginate_data(rejection, int(page_param))
|
||||||
|
return {"object_list": object_list, "page_obj": pagination_context}
|
||||||
|
|
||||||
def get_rejected_by_them_paginated(self, page_param):
|
def get_rejected_by_them_paginated(self, page_param):
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.core.paginator import Paginator
|
|
||||||
selected_friend_code = self.get_selected_friend_code()
|
selected_friend_code = self.get_selected_friend_code()
|
||||||
rejection = TradeAcceptance.objects.filter(
|
rejection = TradeAcceptance.objects.filter(
|
||||||
Q(trade_offer__initiated_by=selected_friend_code, state=TradeAcceptance.AcceptanceState.REJECTED_BY_ACCEPTOR) |
|
Q(trade_offer__initiated_by=selected_friend_code, state=TradeAcceptance.AcceptanceState.REJECTED_BY_ACCEPTOR) |
|
||||||
Q(accepted_by=selected_friend_code, state=TradeAcceptance.AcceptanceState.REJECTED_BY_INITIATOR)
|
Q(accepted_by=selected_friend_code, state=TradeAcceptance.AcceptanceState.REJECTED_BY_INITIATOR)
|
||||||
).order_by("-updated_at")
|
).order_by("-updated_at")
|
||||||
return Paginator(rejection, 10).get_page(page_param)
|
object_list, pagination_context = self.paginate_data(rejection, int(page_param))
|
||||||
|
return {"object_list": object_list, "page_obj": pagination_context}
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
request = self.request
|
request = self.request
|
||||||
selected_friend_code = self.get_selected_friend_code()
|
selected_friend_code = self.get_selected_friend_code()
|
||||||
context["selected_friend_code"] = selected_friend_code
|
context["selected_friend_code"] = selected_friend_code
|
||||||
context["friend_codes"] = request.user.friend_codes.all()
|
|
||||||
offers_page = request.GET.get("offers_page", 1)
|
# Get the default friend code's primary key if it exists
|
||||||
waiting_page = request.GET.get("waiting_page", 1)
|
default_pk = getattr(request.user.default_friend_code, "pk", None)
|
||||||
other_page = request.GET.get("other_page", 1)
|
|
||||||
closed_offers_page = request.GET.get("closed_offers_page", 1)
|
# Annotate friend codes with is_default flag
|
||||||
closed_acceptances_page = request.GET.get("closed_acceptances_page", 1)
|
context["friend_codes"] = request.user.friend_codes.all().annotate(
|
||||||
rejected_by_me_page = request.GET.get("rejected_by_me_page", 1)
|
is_default=Case(
|
||||||
rejected_by_them_page = request.GET.get("rejected_by_them_page", 1)
|
When(pk=default_pk, then=Value(True)),
|
||||||
|
default=Value(False),
|
||||||
|
output_field=BooleanField()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
ajax_section = request.GET.get("ajax_section")
|
||||||
|
if ajax_section == "dashboard_offers":
|
||||||
|
offers_page = request.GET.get("page", 1)
|
||||||
|
else:
|
||||||
|
offers_page = request.GET.get("offers_page", 1)
|
||||||
|
|
||||||
|
if ajax_section == "waiting_acceptances":
|
||||||
|
waiting_page = request.GET.get("page", 1)
|
||||||
|
else:
|
||||||
|
waiting_page = request.GET.get("waiting_page", 1)
|
||||||
|
|
||||||
|
if ajax_section == "other_party_acceptances":
|
||||||
|
other_page = request.GET.get("page", 1)
|
||||||
|
else:
|
||||||
|
other_page = request.GET.get("other_page", 1)
|
||||||
|
|
||||||
|
if ajax_section == "closed_offers":
|
||||||
|
closed_offers_page = request.GET.get("page", 1)
|
||||||
|
else:
|
||||||
|
closed_offers_page = request.GET.get("closed_offers_page", 1)
|
||||||
|
|
||||||
|
if ajax_section == "closed_acceptances":
|
||||||
|
closed_acceptances_page = request.GET.get("page", 1)
|
||||||
|
else:
|
||||||
|
closed_acceptances_page = request.GET.get("closed_acceptances_page", 1)
|
||||||
|
|
||||||
|
if ajax_section == "rejected_by_me":
|
||||||
|
rejected_by_me_page = request.GET.get("page", 1)
|
||||||
|
else:
|
||||||
|
rejected_by_me_page = request.GET.get("rejected_by_me_page", 1)
|
||||||
|
|
||||||
|
if ajax_section == "rejected_by_them":
|
||||||
|
rejected_by_them_page = request.GET.get("page", 1)
|
||||||
|
else:
|
||||||
|
rejected_by_them_page = request.GET.get("rejected_by_them_page", 1)
|
||||||
|
|
||||||
context["dashboard_offers_paginated"] = self.get_dashboard_offers_paginated(offers_page)
|
context["dashboard_offers_paginated"] = self.get_dashboard_offers_paginated(offers_page)
|
||||||
context["trade_acceptances_waiting_paginated"] = self.get_trade_acceptances_waiting_paginated(waiting_page)
|
context["trade_acceptances_waiting_paginated"] = self.get_trade_acceptances_waiting_paginated(waiting_page)
|
||||||
context["other_party_trade_acceptances_paginated"] = self.get_other_party_trade_acceptances_paginated(other_page)
|
context["other_party_trade_acceptances_paginated"] = self.get_other_party_trade_acceptances_paginated(other_page)
|
||||||
|
|
@ -291,4 +333,33 @@ class DashboardView(LoginRequiredMixin, FriendCodeRequiredMixin, TemplateView):
|
||||||
from accounts.forms import UserSettingsForm
|
from accounts.forms import UserSettingsForm
|
||||||
context["settings_form"] = UserSettingsForm(instance=request.user)
|
context["settings_form"] = UserSettingsForm(instance=request.user)
|
||||||
context["active_tab"] = request.GET.get("tab", "dash")
|
context["active_tab"] = request.GET.get("tab", "dash")
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
# Handle AJAX requests to return only the trade offer list fragment
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
context = self.get_context_data(**kwargs)
|
||||||
|
ajax_section = request.GET.get("ajax_section")
|
||||||
|
if request.headers.get("X-Requested-With") == "XMLHttpRequest" and ajax_section:
|
||||||
|
if ajax_section == "dashboard_offers":
|
||||||
|
fragment_context = context.get("dashboard_offers_paginated", {})
|
||||||
|
elif ajax_section == "waiting_acceptances":
|
||||||
|
fragment_context = context.get("trade_acceptances_waiting_paginated", {})
|
||||||
|
elif ajax_section == "other_party_acceptances":
|
||||||
|
fragment_context = context.get("other_party_trade_acceptances_paginated", {})
|
||||||
|
elif ajax_section == "closed_offers":
|
||||||
|
fragment_context = context.get("closed_offers_paginated", {})
|
||||||
|
elif ajax_section == "closed_acceptances":
|
||||||
|
fragment_context = context.get("closed_acceptances_paginated", {})
|
||||||
|
elif ajax_section == "rejected_by_me":
|
||||||
|
fragment_context = context.get("rejected_by_me_paginated", {})
|
||||||
|
elif ajax_section == "rejected_by_them":
|
||||||
|
fragment_context = context.get("rejected_by_them_paginated", {})
|
||||||
|
else:
|
||||||
|
fragment_context = {}
|
||||||
|
|
||||||
|
if fragment_context:
|
||||||
|
return render(request, "trades/_trade_offer_list.html", {
|
||||||
|
"offers": fragment_context.get("object_list", []),
|
||||||
|
"page_obj": fragment_context.get("page_obj")
|
||||||
|
})
|
||||||
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
@ -3,7 +3,7 @@ from django.urls import reverse_lazy
|
||||||
from django.views.generic import UpdateView, DeleteView, CreateView, ListView, DetailView
|
from django.views.generic import UpdateView, DeleteView, CreateView, ListView, DetailView
|
||||||
from cards.models import Card
|
from cards.models import Card
|
||||||
from trades.models import TradeOffer
|
from trades.models import TradeOffer
|
||||||
from cards.mixins import ReusablePaginationMixin
|
from common.mixins import ReusablePaginationMixin
|
||||||
|
|
||||||
class CardDetailView(DetailView):
|
class CardDetailView(DetailView):
|
||||||
model = Card
|
model = Card
|
||||||
|
|
@ -65,7 +65,7 @@ class TradeOfferWantCardListView(ListView):
|
||||||
|
|
||||||
class CardListView(ReusablePaginationMixin, ListView):
|
class CardListView(ReusablePaginationMixin, ListView):
|
||||||
model = Card
|
model = Card
|
||||||
paginate_by = 36 # For non-grouped mode; grouping mode will override default pagination.
|
# Removed built-in pagination; using custom mixin instead
|
||||||
context_object_name = "cards"
|
context_object_name = "cards"
|
||||||
|
|
||||||
def get_template_names(self):
|
def get_template_names(self):
|
||||||
|
|
@ -88,13 +88,6 @@ class CardListView(ReusablePaginationMixin, ListView):
|
||||||
qs = qs.order_by(ordering)
|
qs = qs.order_by(ordering)
|
||||||
return qs.prefetch_related("decks").distinct()
|
return qs.prefetch_related("decks").distinct()
|
||||||
|
|
||||||
def get_paginate_by(self, queryset):
|
|
||||||
group_by = self.request.GET.get("group_by")
|
|
||||||
if group_by in ("deck", "cardset", "rarity"):
|
|
||||||
# When grouping is enabled, we want to paginate manually so disable default pagination.
|
|
||||||
return None
|
|
||||||
return self.paginate_by
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
order = self.request.GET.get("order", "absolute")
|
order = self.request.GET.get("order", "absolute")
|
||||||
|
|
@ -106,7 +99,6 @@ class CardListView(ReusablePaginationMixin, ListView):
|
||||||
full_qs = self.get_queryset()
|
full_qs = self.get_queryset()
|
||||||
all_cards = list(full_qs)
|
all_cards = list(full_qs)
|
||||||
flat_cards = []
|
flat_cards = []
|
||||||
|
|
||||||
if group_by == "deck":
|
if group_by == "deck":
|
||||||
for card in all_cards:
|
for card in all_cards:
|
||||||
for deck in card.decks.all():
|
for deck in card.decks.all():
|
||||||
|
|
@ -121,16 +113,10 @@ class CardListView(ReusablePaginationMixin, ListView):
|
||||||
flat_cards.append({"group": card.rarity_icon, "sort_group": card.rarity_level, "card": card})
|
flat_cards.append({"group": card.rarity_icon, "sort_group": card.rarity_level, "card": card})
|
||||||
flat_cards.sort(key=lambda x: x["sort_group"], reverse=True)
|
flat_cards.sort(key=lambda x: x["sort_group"], reverse=True)
|
||||||
|
|
||||||
try:
|
page_number = self.get_page_number()
|
||||||
page_number = int(self.request.GET.get("page", 1))
|
|
||||||
except ValueError:
|
|
||||||
page_number = 1
|
|
||||||
|
|
||||||
# Use our custom mixin logic here
|
|
||||||
self.per_page = 36
|
self.per_page = 36
|
||||||
page_flat_cards, pagination_context = self.paginate_data(flat_cards, page_number)
|
page_flat_cards, pagination_context = self.paginate_data(flat_cards, page_number)
|
||||||
|
|
||||||
# Reassemble the flat list into groups for the current page.
|
|
||||||
page_groups = []
|
page_groups = []
|
||||||
for item in page_flat_cards:
|
for item in page_flat_cards:
|
||||||
group_value = item["group"]
|
group_value = item["group"]
|
||||||
|
|
@ -143,19 +129,11 @@ class CardListView(ReusablePaginationMixin, ListView):
|
||||||
context["page_obj"] = pagination_context
|
context["page_obj"] = pagination_context
|
||||||
context["total_cards"] = len(flat_cards)
|
context["total_cards"] = len(flat_cards)
|
||||||
context["object_list"] = full_qs
|
context["object_list"] = full_qs
|
||||||
return context
|
|
||||||
else:
|
else:
|
||||||
# For non-grouped mode, transform the built-in paginator page
|
page_number = self.get_page_number()
|
||||||
if "page_obj" in context:
|
self.per_page = 36
|
||||||
page = context["page_obj"]
|
paginated_cards, pagination_context = self.paginate_data(self.get_queryset(), page_number)
|
||||||
# Create a unified pagination context dict with updated keys
|
context["cards"] = paginated_cards
|
||||||
custom_page_obj = {
|
context["page_obj"] = pagination_context
|
||||||
"number": page.number,
|
context["object_list"] = self.get_queryset()
|
||||||
"has_previous": page.has_previous(),
|
return context
|
||||||
"has_next": page.has_next(),
|
|
||||||
"previous_page_number": page.previous_page_number() if page.has_previous() else 1,
|
|
||||||
"next_page_number": page.next_page_number() if page.has_next() else page.paginator.num_pages,
|
|
||||||
"paginator": {"num_pages": page.paginator.num_pages},
|
|
||||||
}
|
|
||||||
context["page_obj"] = custom_page_obj
|
|
||||||
return context
|
|
||||||
34
common/mixins.py
Normal file
34
common/mixins.py
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||||
|
|
||||||
|
|
||||||
|
class ReusablePaginationMixin:
|
||||||
|
per_page = 10
|
||||||
|
|
||||||
|
def get_page_number(self):
|
||||||
|
try:
|
||||||
|
return int(self.request.GET.get("page", 1))
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
return 1
|
||||||
|
|
||||||
|
def paginate_data(self, data, page_number):
|
||||||
|
"""
|
||||||
|
Paginates data (a QuerySet or list) and returns a tuple: (page_data, pagination_context).
|
||||||
|
"""
|
||||||
|
paginator = Paginator(data, self.per_page)
|
||||||
|
try:
|
||||||
|
page = paginator.page(page_number)
|
||||||
|
except PageNotAnInteger:
|
||||||
|
page = paginator.page(1)
|
||||||
|
except EmptyPage:
|
||||||
|
page = paginator.page(paginator.num_pages)
|
||||||
|
|
||||||
|
pagination_context = {
|
||||||
|
"number": page.number,
|
||||||
|
"has_previous": page.has_previous(),
|
||||||
|
"has_next": page.has_next(),
|
||||||
|
"previous_page_number": page.previous_page_number() if page.has_previous() else 1,
|
||||||
|
"next_page_number": page.next_page_number() if page.has_next() else paginator.num_pages,
|
||||||
|
"paginator": {"num_pages": paginator.num_pages},
|
||||||
|
"count": paginator.count
|
||||||
|
}
|
||||||
|
return page.object_list, pagination_context
|
||||||
|
|
@ -54,4 +54,40 @@ select.card-multiselect {
|
||||||
}
|
}
|
||||||
.choices__input {
|
.choices__input {
|
||||||
background-color: var(--color-base-100);
|
background-color: var(--color-base-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__inner {
|
||||||
|
background-color: var(--color-base-100) !important;
|
||||||
|
border-color: var(--color-base-300) !important;
|
||||||
|
color: var(--color-base-content) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__inner,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__header-image,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__header,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__avatar-link,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__avatar,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__personal-info-plink,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__name,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__job,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__location,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__body,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__description,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__social-links,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__buttons,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__button,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__button:hover,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__footer,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__profile-url,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__profile-link,
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__profile-color {
|
||||||
|
color: var(--color-base-content) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gravatar-hovercard .gravatar-hovercard__location {
|
||||||
|
color: var(--color-base-content) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .gravatar-hovercard .gravatar-hovercard__social-icon {
|
||||||
|
filter: invert(1) !important;
|
||||||
}
|
}
|
||||||
1
static/css/choices.min.css
vendored
Normal file
1
static/css/choices.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
3
static/css/hovercards.min.css
vendored
Normal file
3
static/css/hovercards.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
static/js/alpinejs.collapse@3.14.8.min.js
vendored
Normal file
1
static/js/alpinejs.collapse@3.14.8.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
(()=>{function g(n){n.directive("collapse",e),e.inline=(t,{modifiers:i})=>{i.includes("min")&&(t._x_doShow=()=>{},t._x_doHide=()=>{})};function e(t,{modifiers:i}){let r=l(i,"duration",250)/1e3,h=l(i,"min",0),u=!i.includes("min");t._x_isShown||(t.style.height=`${h}px`),!t._x_isShown&&u&&(t.hidden=!0),t._x_isShown||(t.style.overflow="hidden");let c=(d,s)=>{let o=n.setStyles(d,s);return s.height?()=>{}:o},f={transitionProperty:"height",transitionDuration:`${r}s`,transitionTimingFunction:"cubic-bezier(0.4, 0.0, 0.2, 1)"};t._x_transition={in(d=()=>{},s=()=>{}){u&&(t.hidden=!1),u&&(t.style.display=null);let o=t.getBoundingClientRect().height;t.style.height="auto";let a=t.getBoundingClientRect().height;o===a&&(o=h),n.transition(t,n.setStyles,{during:f,start:{height:o+"px"},end:{height:a+"px"}},()=>t._x_isShown=!0,()=>{Math.abs(t.getBoundingClientRect().height-a)<1&&(t.style.overflow=null)})},out(d=()=>{},s=()=>{}){let o=t.getBoundingClientRect().height;n.transition(t,c,{during:f,start:{height:o+"px"},end:{height:h+"px"}},()=>t.style.overflow="hidden",()=>{t._x_isShown=!1,t.style.height==`${h}px`&&u&&(t.style.display="none",t.hidden=!0)})}}}}function l(n,e,t){if(n.indexOf(e)===-1)return t;let i=n[n.indexOf(e)+1];if(!i)return t;if(e==="duration"){let r=i.match(/([0-9]+)ms/);if(r)return r[1]}if(e==="min"){let r=i.match(/([0-9]+)px/);if(r)return r[1]}return i}document.addEventListener("alpine:init",()=>{window.Alpine.plugin(g)});})();
|
||||||
5
static/js/alpinejs@3.14.8.min.js
vendored
Normal file
5
static/js/alpinejs@3.14.8.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
static/js/choices.min.js
vendored
Normal file
2
static/js/choices.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
static/js/floating-ui_core@1.6.9.9.min.js
vendored
Normal file
1
static/js/floating-ui_core@1.6.9.9.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
static/js/floating-ui_dom@1.6.13.13.min.js
vendored
Normal file
1
static/js/floating-ui_dom@1.6.13.13.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
static/js/hovercards.min.js
vendored
Normal file
2
static/js/hovercards.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
260
staticfiles/admin/css/autocomplete.css
Normal file
260
staticfiles/admin/css/autocomplete.css
Normal file
|
|
@ -0,0 +1,260 @@
|
||||||
|
select.admin-autocomplete {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container {*/
|
||||||
|
/* min-height: 30px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--single,*/
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple {*/
|
||||||
|
/* min-height: 30px;*/
|
||||||
|
/* padding: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--focus .select2-selection,*/
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--open .select2-selection {*/
|
||||||
|
/* border-color: #999;*/
|
||||||
|
/* min-height: 30px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single,*/
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single {*/
|
||||||
|
/* padding: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple,*/
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple {*/
|
||||||
|
/* padding: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--single {*/
|
||||||
|
/* background-color: #fff;*/
|
||||||
|
/* border: 1px solid #ccc;*/
|
||||||
|
/* border-radius: 4px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered {*/
|
||||||
|
/* color: #444;*/
|
||||||
|
/* line-height: 30px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear {*/
|
||||||
|
/* cursor: pointer;*/
|
||||||
|
/* float: right;*/
|
||||||
|
/* font-weight: bold;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder {*/
|
||||||
|
/* color: #999;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow {*/
|
||||||
|
/* height: 26px;*/
|
||||||
|
/* position: absolute;*/
|
||||||
|
/* top: 1px;*/
|
||||||
|
/* right: 1px;*/
|
||||||
|
/* width: 20px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b {*/
|
||||||
|
/* border-color: #888 transparent transparent transparent;*/
|
||||||
|
/* border-style: solid;*/
|
||||||
|
/* border-width: 5px 4px 0 4px;*/
|
||||||
|
/* height: 0;*/
|
||||||
|
/* left: 50%;*/
|
||||||
|
/* margin-left: -4px;*/
|
||||||
|
/* margin-top: -2px;*/
|
||||||
|
/* position: absolute;*/
|
||||||
|
/* top: 50%;*/
|
||||||
|
/* width: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear {*/
|
||||||
|
/* float: left;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow {*/
|
||||||
|
/* left: 1px;*/
|
||||||
|
/* right: auto;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single {*/
|
||||||
|
/* background-color: #eee;*/
|
||||||
|
/* cursor: default;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear {*/
|
||||||
|
/* display: none;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b {*/
|
||||||
|
/* border-color: transparent transparent #888 transparent;*/
|
||||||
|
/* border-width: 0 4px 5px 4px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple {*/
|
||||||
|
/* background-color: white;*/
|
||||||
|
/* border: 1px solid #ccc;*/
|
||||||
|
/* border-radius: 4px;*/
|
||||||
|
/* cursor: text;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered {*/
|
||||||
|
/* box-sizing: border-box;*/
|
||||||
|
/* list-style: none;*/
|
||||||
|
/* margin: 0;*/
|
||||||
|
/* padding: 0 5px;*/
|
||||||
|
/* width: 100%;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li {*/
|
||||||
|
/* list-style: none;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder {*/
|
||||||
|
/* color: #999;*/
|
||||||
|
/* margin-top: 5px;*/
|
||||||
|
/* float: left;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear {*/
|
||||||
|
/* cursor: pointer;*/
|
||||||
|
/* float: right;*/
|
||||||
|
/* font-weight: bold;*/
|
||||||
|
/* margin: 5px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice {*/
|
||||||
|
/* background-color: #e4e4e4;*/
|
||||||
|
/* border: 1px solid #ccc;*/
|
||||||
|
/* border-radius: 4px;*/
|
||||||
|
/* cursor: default;*/
|
||||||
|
/* float: left;*/
|
||||||
|
/* margin-right: 5px;*/
|
||||||
|
/* margin-top: 5px;*/
|
||||||
|
/* padding: 0 5px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove {*/
|
||||||
|
/* color: #999;*/
|
||||||
|
/* cursor: pointer;*/
|
||||||
|
/* display: inline-block;*/
|
||||||
|
/* font-weight: bold;*/
|
||||||
|
/* margin-right: 2px;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover {*/
|
||||||
|
/* color: #333;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.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 {*/
|
||||||
|
/* float: right;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice {*/
|
||||||
|
/* margin-left: 5px;*/
|
||||||
|
/* margin-right: auto;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {*/
|
||||||
|
/* margin-left: 2px;*/
|
||||||
|
/* margin-right: auto;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple {*/
|
||||||
|
/* border: solid #999 1px;*/
|
||||||
|
/* outline: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple {*/
|
||||||
|
/* background-color: #eee;*/
|
||||||
|
/* cursor: default;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove {*/
|
||||||
|
/* display: none;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple {*/
|
||||||
|
/* border-top-left-radius: 0;*/
|
||||||
|
/* border-top-right-radius: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple {*/
|
||||||
|
/* border-bottom-left-radius: 0;*/
|
||||||
|
/* border-bottom-right-radius: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field {*/
|
||||||
|
/* border: 1px solid #ccc;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-search--inline .select2-search__field {*/
|
||||||
|
/* background: transparent;*/
|
||||||
|
/* border: none;*/
|
||||||
|
/* outline: 0;*/
|
||||||
|
/* box-shadow: none;*/
|
||||||
|
/* -webkit-appearance: textfield;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results > .select2-results__options {*/
|
||||||
|
/* max-height: 200px;*/
|
||||||
|
/* overflow-y: auto;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option[role=group] {*/
|
||||||
|
/* padding: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] {*/
|
||||||
|
/* color: #999;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] {*/
|
||||||
|
/* background-color: #ddd;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option .select2-results__option {*/
|
||||||
|
/* padding-left: 1em;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group {*/
|
||||||
|
/* padding-left: 0;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option {*/
|
||||||
|
/* margin-left: -1em;*/
|
||||||
|
/* padding-left: 2em;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option {*/
|
||||||
|
/* margin-left: -2em;*/
|
||||||
|
/* padding-left: 3em;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {*/
|
||||||
|
/* margin-left: -3em;*/
|
||||||
|
/* padding-left: 4em;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {*/
|
||||||
|
/* margin-left: -4em;*/
|
||||||
|
/* padding-left: 5em;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {*/
|
||||||
|
/* margin-left: -5em;*/
|
||||||
|
/* padding-left: 6em;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {*/
|
||||||
|
/* background-color: #79aec8;*/
|
||||||
|
/* color: white;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
/*.select2-container--admin-autocomplete .select2-results__group {*/
|
||||||
|
/* cursor: default;*/
|
||||||
|
/* display: block;*/
|
||||||
|
/* padding: 6px;*/
|
||||||
|
/*}*/
|
||||||
BIN
staticfiles/admin/css/autocomplete.css.gz
Normal file
BIN
staticfiles/admin/css/autocomplete.css.gz
Normal file
Binary file not shown.
1179
staticfiles/admin/css/base.css
Normal file
1179
staticfiles/admin/css/base.css
Normal file
File diff suppressed because it is too large
Load diff
BIN
staticfiles/admin/css/base.css.gz
Normal file
BIN
staticfiles/admin/css/base.css.gz
Normal file
Binary file not shown.
1
staticfiles/admin/css/base_tailwind.css
Normal file
1
staticfiles/admin/css/base_tailwind.css
Normal file
File diff suppressed because one or more lines are too long
BIN
staticfiles/admin/css/base_tailwind.css.gz
Normal file
BIN
staticfiles/admin/css/base_tailwind.css.gz
Normal file
Binary file not shown.
343
staticfiles/admin/css/changelists.css
Normal file
343
staticfiles/admin/css/changelists.css
Normal file
|
|
@ -0,0 +1,343 @@
|
||||||
|
/* CHANGELISTS */
|
||||||
|
|
||||||
|
#changelist {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .changelist-form-container {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .hiddenfields { display:none; }
|
||||||
|
|
||||||
|
.change-list .filtered table {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .filtered {
|
||||||
|
min-height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .filtered .results, .change-list .filtered .paginator,
|
||||||
|
.filtered #toolbar, .filtered div.xfull {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .filtered table tbody th {
|
||||||
|
padding-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-form .results {
|
||||||
|
overflow-x: auto;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .toplinks {
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .paginator {
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
background: var(--body-bg);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CHANGELIST TABLES */
|
||||||
|
|
||||||
|
#changelist table thead th {
|
||||||
|
padding: 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist table thead th.action-checkbox-column {
|
||||||
|
width: 1.5em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist table tbody td.action-checkbox {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist table tfoot {
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TOOLBAR */
|
||||||
|
|
||||||
|
#toolbar {
|
||||||
|
padding: 8px 10px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
border-top: 1px solid var(--hairline-color);
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar form input {
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
padding: 5px;
|
||||||
|
color: var(--body-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar #searchbar {
|
||||||
|
height: 1.1875rem;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
padding: 2px 5px;
|
||||||
|
margin: 0;
|
||||||
|
vertical-align: top;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar #searchbar:focus {
|
||||||
|
border-color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar form input[type="submit"] {
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
padding: 4px 8px;
|
||||||
|
margin: 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
background: var(--body-bg);
|
||||||
|
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
||||||
|
cursor: pointer;
|
||||||
|
color: var(--body-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar form input[type="submit"]:focus,
|
||||||
|
#toolbar form input[type="submit"]:hover {
|
||||||
|
border-color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-search img {
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-search .help {
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FILTER COLUMN */
|
||||||
|
|
||||||
|
#changelist-filter {
|
||||||
|
flex: 0 0 240px;
|
||||||
|
order: 1;
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
border-left: none;
|
||||||
|
margin: 0 0 0 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (forced-colors: active) {
|
||||||
|
#changelist-filter {
|
||||||
|
border: 1px solid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter h2 {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
padding: 5px 15px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter h3,
|
||||||
|
#changelist-filter details summary {
|
||||||
|
font-weight: 400;
|
||||||
|
padding: 0 15px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details summary > * {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details > summary {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details > summary::-webkit-details-marker {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details > summary::before {
|
||||||
|
content: '→';
|
||||||
|
font-weight: bold;
|
||||||
|
color: var(--link-hover-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details[open] > summary::before {
|
||||||
|
content: '↓';
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter ul {
|
||||||
|
margin: 5px 0;
|
||||||
|
padding: 0 15px 15px;
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter ul:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter li {
|
||||||
|
list-style-type: none;
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter a {
|
||||||
|
display: block;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter li.selected {
|
||||||
|
border-left: 5px solid var(--hairline-color);
|
||||||
|
padding-left: 10px;
|
||||||
|
margin-left: -15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter li.selected a {
|
||||||
|
color: var(--link-selected-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter a:focus, #changelist-filter a:hover,
|
||||||
|
#changelist-filter li.selected a:focus,
|
||||||
|
#changelist-filter li.selected a:hover {
|
||||||
|
color: var(--link-hover-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter #changelist-filter-extra-actions {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DATE DRILLDOWN */
|
||||||
|
|
||||||
|
.change-list .toplinks {
|
||||||
|
display: flex;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 3px 17px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .toplinks a {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .toplinks .date-back {
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .toplinks .date-back:focus,
|
||||||
|
.change-list .toplinks .date-back:hover {
|
||||||
|
color: var(--link-hover-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ACTIONS */
|
||||||
|
|
||||||
|
.filtered .actions {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist table input {
|
||||||
|
margin: 0;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Once the :has() pseudo-class is supported by all browsers, the tr.selected
|
||||||
|
selector and the JS adding the class can be removed. */
|
||||||
|
#changelist tbody tr.selected {
|
||||||
|
background-color: var(--selected-row);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist tbody tr:has(.action-select:checked) {
|
||||||
|
background-color: var(--selected-row);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (forced-colors: active) {
|
||||||
|
#changelist tbody tr.selected {
|
||||||
|
background-color: SelectedItem;
|
||||||
|
}
|
||||||
|
#changelist tbody tr:has(.action-select:checked) {
|
||||||
|
background-color: SelectedItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions {
|
||||||
|
padding: 10px;
|
||||||
|
background: var(--body-bg);
|
||||||
|
border-top: none;
|
||||||
|
border-bottom: none;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions span.all,
|
||||||
|
#changelist .actions span.action-counter,
|
||||||
|
#changelist .actions span.clear,
|
||||||
|
#changelist .actions span.question {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
margin: 0 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions select {
|
||||||
|
vertical-align: top;
|
||||||
|
height: 1.5rem;
|
||||||
|
color: var(--body-fg);
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
padding: 0 0 0 4px;
|
||||||
|
margin: 0;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions select:focus {
|
||||||
|
border-color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions label {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions .button {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
background: var(--body-bg);
|
||||||
|
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
||||||
|
cursor: pointer;
|
||||||
|
height: 1.5rem;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 4px 8px;
|
||||||
|
margin: 0;
|
||||||
|
color: var(--body-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions .button:focus, #changelist .actions .button:hover {
|
||||||
|
border-color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/changelists.css.gz
Normal file
BIN
staticfiles/admin/css/changelists.css.gz
Normal file
Binary file not shown.
1
staticfiles/admin/css/customized_tailwind.css
Normal file
1
staticfiles/admin/css/customized_tailwind.css
Normal file
File diff suppressed because one or more lines are too long
BIN
staticfiles/admin/css/customized_tailwind.css.gz
Normal file
BIN
staticfiles/admin/css/customized_tailwind.css.gz
Normal file
Binary file not shown.
130
staticfiles/admin/css/dark_mode.css
Normal file
130
staticfiles/admin/css/dark_mode.css
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--primary: #264b5d;
|
||||||
|
--primary-fg: #f7f7f7;
|
||||||
|
|
||||||
|
--body-fg: #eeeeee;
|
||||||
|
--body-bg: #121212;
|
||||||
|
--body-quiet-color: #d0d0d0;
|
||||||
|
--body-medium-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;
|
||||||
|
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
html[data-theme="dark"] {
|
||||||
|
--primary: #264b5d;
|
||||||
|
--primary-fg: #f7f7f7;
|
||||||
|
|
||||||
|
--body-fg: #eeeeee;
|
||||||
|
--body-bg: #121212;
|
||||||
|
--body-quiet-color: #d0d0d0;
|
||||||
|
--body-medium-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;
|
||||||
|
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* THEME SWITCH */
|
||||||
|
.theme-toggle {
|
||||||
|
cursor: pointer;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
background: transparent;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-inline-start: 5px;
|
||||||
|
margin-top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle svg {
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 1rem;
|
||||||
|
width: 1rem;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Fully hide screen reader text so we only show the one matching the current
|
||||||
|
theme.
|
||||||
|
*/
|
||||||
|
.theme-toggle .visually-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="auto"] .theme-toggle .theme-label-when-auto {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="dark"] .theme-toggle .theme-label-when-dark {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .theme-toggle .theme-label-when-light {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ICONS */
|
||||||
|
.theme-toggle svg.theme-icon-when-auto,
|
||||||
|
.theme-toggle svg.theme-icon-when-dark,
|
||||||
|
.theme-toggle svg.theme-icon-when-light {
|
||||||
|
fill: var(--header-link-color);
|
||||||
|
color: var(--header-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .theme-toggle svg.theme-icon-when-light {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/dark_mode.css.gz
Normal file
BIN
staticfiles/admin/css/dark_mode.css.gz
Normal file
Binary file not shown.
29
staticfiles/admin/css/dashboard.css
Normal file
29
staticfiles/admin/css/dashboard.css
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
/* DASHBOARD */
|
||||||
|
.dashboard td, .dashboard th {
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard .module table th {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard .module table td {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard .module table td a {
|
||||||
|
display: block;
|
||||||
|
padding-right: .6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RECENT ACTIONS MODULE */
|
||||||
|
|
||||||
|
.module ul.actionlist {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.actionlist li {
|
||||||
|
list-style-type: none;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/dashboard.css.gz
Normal file
BIN
staticfiles/admin/css/dashboard.css.gz
Normal file
Binary file not shown.
512
staticfiles/admin/css/forms.css
Normal file
512
staticfiles/admin/css/forms.css
Normal file
|
|
@ -0,0 +1,512 @@
|
||||||
|
@import url('widgets.css');
|
||||||
|
|
||||||
|
/* FORM ROWS */
|
||||||
|
|
||||||
|
.form-row {
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row img, .form-row input {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row label input[type="checkbox"] {
|
||||||
|
margin-top: 0;
|
||||||
|
vertical-align: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .form-row p {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-container {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-multiline {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-multiline > div {
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FORM LABELS */
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-weight: normal;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.required label, label.required {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RADIO BUTTONS */
|
||||||
|
|
||||||
|
form div.radiolist div {
|
||||||
|
padding-right: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form div.radiolist.inline div {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
form div.radiolist label {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
form div.radiolist input[type="radio"] {
|
||||||
|
margin: -2px 4px 0 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form ul.inline {
|
||||||
|
margin-left: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form ul.inline li {
|
||||||
|
float: left;
|
||||||
|
padding-right: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIELDSETS */
|
||||||
|
|
||||||
|
fieldset .fieldset-heading,
|
||||||
|
fieldset .inline-heading,
|
||||||
|
:not(.inline-related) .collapse summary {
|
||||||
|
border: 1px solid var(--header-bg);
|
||||||
|
margin: 0;
|
||||||
|
padding: 8px;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
background: var(--header-bg);
|
||||||
|
color: var(--header-link-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ALIGNED FIELDSETS */
|
||||||
|
|
||||||
|
.aligned label {
|
||||||
|
display: block;
|
||||||
|
padding: 4px 10px 0 0;
|
||||||
|
min-width: 160px;
|
||||||
|
width: 160px;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned label:not(.vCheckboxLabel):after {
|
||||||
|
content: '';
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly {
|
||||||
|
padding: 6px 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned ul label {
|
||||||
|
display: inline;
|
||||||
|
float: none;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .form-row input {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
|
||||||
|
width: 350px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned ul {
|
||||||
|
margin-left: 160px;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned div.radiolist {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned p.help,
|
||||||
|
form .aligned div.help {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 160px;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned p.date div.help.timezonewarning,
|
||||||
|
form .aligned p.datetime div.help.timezonewarning,
|
||||||
|
form .aligned p.time div.help.timezonewarning {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned p.help:last-child,
|
||||||
|
form .aligned div.help:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned input + p.help,
|
||||||
|
form .aligned textarea + p.help,
|
||||||
|
form .aligned select + p.help,
|
||||||
|
form .aligned input + div.help,
|
||||||
|
form .aligned textarea + div.help,
|
||||||
|
form .aligned select + div.help {
|
||||||
|
margin-left: 160px;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned select option:checked {
|
||||||
|
background-color: var(--selected-row);
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned ul li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned table p {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .vCheckboxLabel {
|
||||||
|
padding: 1px 0 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .vCheckboxLabel + p.help,
|
||||||
|
.aligned .vCheckboxLabel + div.help {
|
||||||
|
margin-top: -4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
|
||||||
|
width: 610px;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset .fieldBox {
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WIDE FIELDSETS */
|
||||||
|
|
||||||
|
.wide label {
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .wide p.help,
|
||||||
|
form .wide ul.errorlist,
|
||||||
|
form .wide div.help {
|
||||||
|
padding-left: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form div.help ul {
|
||||||
|
padding-left: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
|
||||||
|
width: 450px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* COLLAPSIBLE FIELDSETS */
|
||||||
|
|
||||||
|
.collapse summary .fieldset-heading,
|
||||||
|
.collapse summary .inline-heading {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
color: currentColor;
|
||||||
|
display: inline;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MONOSPACE TEXTAREAS */
|
||||||
|
|
||||||
|
fieldset.monospace textarea {
|
||||||
|
font-family: var(--font-family-monospace);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SUBMIT ROW */
|
||||||
|
|
||||||
|
.submit-row {
|
||||||
|
padding: 12px 14px 12px;
|
||||||
|
margin: 0 0 20px;
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
border: 1px solid var(--hairline-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.popup .submit-row {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row input {
|
||||||
|
height: 2.1875rem;
|
||||||
|
line-height: 0.9375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row input, .submit-row a {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row input.default {
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.deletelink {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.deletelink {
|
||||||
|
display: block;
|
||||||
|
background: var(--delete-button-bg);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 0.625rem 0.9375rem;
|
||||||
|
height: 0.9375rem;
|
||||||
|
line-height: 0.9375rem;
|
||||||
|
color: var(--button-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.closelink {
|
||||||
|
display: inline-block;
|
||||||
|
background: var(--close-button-bg);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 10px 15px;
|
||||||
|
height: 0.9375rem;
|
||||||
|
line-height: 0.9375rem;
|
||||||
|
color: var(--button-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.deletelink:focus,
|
||||||
|
.submit-row a.deletelink:hover,
|
||||||
|
.submit-row a.deletelink:active {
|
||||||
|
background: var(--delete-button-hover-bg);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.closelink:focus,
|
||||||
|
.submit-row a.closelink:hover,
|
||||||
|
.submit-row a.closelink:active {
|
||||||
|
background: var(--close-button-hover-bg);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CUSTOM FORM FIELDS */
|
||||||
|
|
||||||
|
.vSelectMultipleField {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vCheckboxField {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vDateField, .vTimeField {
|
||||||
|
margin-right: 2px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vDateField {
|
||||||
|
min-width: 6.85em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vTimeField {
|
||||||
|
min-width: 4.7em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vURLField {
|
||||||
|
width: 30em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vLargeTextField, .vXMLLargeTextField {
|
||||||
|
width: 48em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpages-flatpage #id_content {
|
||||||
|
height: 40.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.module table .vPositiveSmallIntegerField {
|
||||||
|
width: 2.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vIntegerField {
|
||||||
|
width: 5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vBigIntegerField {
|
||||||
|
width: 10em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vForeignKeyRawIdAdminField {
|
||||||
|
width: 5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vTextField, .vUUIDField {
|
||||||
|
width: 20em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* INLINES */
|
||||||
|
|
||||||
|
.inline-group {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group thead th {
|
||||||
|
padding: 8px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group .aligned label {
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related h4,
|
||||||
|
.inline-related:not(.tabular) .collapse summary {
|
||||||
|
margin: 0;
|
||||||
|
color: var(--body-medium-color);
|
||||||
|
padding: 5px;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
border: 1px solid var(--hairline-color);
|
||||||
|
border-left-color: var(--darkened-bg);
|
||||||
|
border-right-color: var(--darkened-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related h3 span.delete {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related h3 span.delete label {
|
||||||
|
margin-left: 2px;
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related fieldset {
|
||||||
|
margin: 0;
|
||||||
|
background: var(--body-bg);
|
||||||
|
border: none;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group .tabular fieldset.module {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related.tabular fieldset.module table {
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
.last-related fieldset {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group .tabular tr.has_original td {
|
||||||
|
padding-top: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group .tabular tr td.original {
|
||||||
|
padding: 2px 0 0 0;
|
||||||
|
width: 0;
|
||||||
|
_position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group .tabular th.original {
|
||||||
|
width: 0px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group .tabular td.original p {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
height: 1.1em;
|
||||||
|
padding: 2px 9px;
|
||||||
|
overflow: hidden;
|
||||||
|
font-size: 0.5625rem;
|
||||||
|
font-weight: bold;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
_width: 700px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group ul.tools {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group ul.tools li {
|
||||||
|
display: inline;
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group div.add-row,
|
||||||
|
.inline-group .tabular tr.add-row td {
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
padding: 8px 10px;
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group .tabular tr.add-row td {
|
||||||
|
padding: 8px 10px;
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group ul.tools a.add,
|
||||||
|
.inline-group div.add-row a,
|
||||||
|
.inline-group .tabular tr.add-row td a {
|
||||||
|
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
||||||
|
padding-left: 16px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-form {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RELATED FIELD ADD ONE / LOOKUP */
|
||||||
|
|
||||||
|
.related-lookup {
|
||||||
|
margin-left: 5px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.related-lookup {
|
||||||
|
width: 1rem;
|
||||||
|
height: 1rem;
|
||||||
|
background-image: url(../img/search.svg);
|
||||||
|
}
|
||||||
|
|
||||||
|
form .related-widget-wrapper ul {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clearable-file-input input {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/forms.css.gz
Normal file
BIN
staticfiles/admin/css/forms.css.gz
Normal file
Binary file not shown.
79
staticfiles/admin/css/login.css
Normal file
79
staticfiles/admin/css/login.css
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
/* LOGIN FORM */
|
||||||
|
|
||||||
|
.login {
|
||||||
|
background: #f8f8f8;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #header {
|
||||||
|
height: auto;
|
||||||
|
padding: 15px 16px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #header h1 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #header h1 a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #content {
|
||||||
|
padding: 20px 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #container {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #eaeaea;
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 28em;
|
||||||
|
min-width: 300px;
|
||||||
|
margin: 100px auto;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #content-main {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .form-row {
|
||||||
|
padding: 4px 0;
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .form-row label {
|
||||||
|
padding-right: 0.5em;
|
||||||
|
line-height: 2em;
|
||||||
|
font-size: 1em;
|
||||||
|
clear: both;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .form-row #id_username, .login .form-row #id_password {
|
||||||
|
clear: both;
|
||||||
|
padding: 8px;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login span.help {
|
||||||
|
font-size: 10px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .submit-row {
|
||||||
|
clear: both;
|
||||||
|
padding: 1em 0 0 9.4em;
|
||||||
|
margin: 0;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .password-reset-link {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/login.css.gz
Normal file
BIN
staticfiles/admin/css/login.css.gz
Normal file
Binary file not shown.
150
staticfiles/admin/css/nav_sidebar.css
Normal file
150
staticfiles/admin/css/nav_sidebar.css
Normal file
|
|
@ -0,0 +1,150 @@
|
||||||
|
.sticky {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
max-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-nav-sidebar {
|
||||||
|
z-index: 20;
|
||||||
|
left: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex: 0 0 23px;
|
||||||
|
width: 23px;
|
||||||
|
border: 0;
|
||||||
|
border-right: 1px solid var(--hairline-color);
|
||||||
|
background-color: var(--body-bg);
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
color: var(--link-fg);
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .toggle-nav-sidebar {
|
||||||
|
border-left: 1px solid var(--hairline-color);
|
||||||
|
border-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-nav-sidebar:hover,
|
||||||
|
.toggle-nav-sidebar:focus {
|
||||||
|
background-color: var(--darkened-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-sidebar {
|
||||||
|
z-index: 15;
|
||||||
|
flex: 0 0 275px;
|
||||||
|
left: -276px;
|
||||||
|
margin-left: -276px;
|
||||||
|
border-top: 1px solid transparent;
|
||||||
|
border-right: 1px solid var(--hairline-color);
|
||||||
|
background-color: var(--body-bg);
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] #nav-sidebar {
|
||||||
|
border-left: 1px solid var(--hairline-color);
|
||||||
|
border-right: 0;
|
||||||
|
left: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
right: -276px;
|
||||||
|
margin-right: -276px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-nav-sidebar::before {
|
||||||
|
content: '\00BB';
|
||||||
|
}
|
||||||
|
|
||||||
|
.main.shifted .toggle-nav-sidebar::before {
|
||||||
|
content: '\00AB';
|
||||||
|
}
|
||||||
|
|
||||||
|
.main > #nav-sidebar {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main.shifted > #nav-sidebar {
|
||||||
|
margin-left: 0;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .main.shifted > #nav-sidebar {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-sidebar .module th {
|
||||||
|
width: 100%;
|
||||||
|
overflow-wrap: anywhere;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-sidebar .module th,
|
||||||
|
#nav-sidebar .module caption {
|
||||||
|
padding-left: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-sidebar .module td {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] #nav-sidebar .module th,
|
||||||
|
[dir="rtl"] #nav-sidebar .module caption {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-sidebar .current-app .section:link,
|
||||||
|
#nav-sidebar .current-app .section:visited {
|
||||||
|
color: var(--header-color);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-sidebar .current-model {
|
||||||
|
background: var(--selected-row);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (forced-colors: active) {
|
||||||
|
#nav-sidebar .current-model {
|
||||||
|
background-color: SelectedItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main > #nav-sidebar + .content {
|
||||||
|
max-width: calc(100% - 23px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main.shifted > #nav-sidebar + .content {
|
||||||
|
max-width: calc(100% - 299px);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
#nav-sidebar, #toggle-nav-sidebar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main > #nav-sidebar + .content,
|
||||||
|
.main.shifted > #nav-sidebar + .content {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-filter {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 2px 5px;
|
||||||
|
margin: 5px 0;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
background-color: var(--darkened-bg);
|
||||||
|
color: var(--body-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-filter:focus {
|
||||||
|
border-color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-filter.no-results {
|
||||||
|
background: var(--message-error-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-sidebar table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/nav_sidebar.css.gz
Normal file
BIN
staticfiles/admin/css/nav_sidebar.css.gz
Normal file
Binary file not shown.
967
staticfiles/admin/css/responsive.css
Normal file
967
staticfiles/admin/css/responsive.css
Normal file
|
|
@ -0,0 +1,967 @@
|
||||||
|
/* Tablets */
|
||||||
|
|
||||||
|
input[type="submit"], button {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1024px) {
|
||||||
|
/* Basic */
|
||||||
|
|
||||||
|
html {
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td, th {
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layout */
|
||||||
|
|
||||||
|
#container {
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
padding: 15px 20px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.breadcrumbs {
|
||||||
|
padding: 10px 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
|
||||||
|
#header {
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 15px 30px;
|
||||||
|
justify-content: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
#site-name {
|
||||||
|
margin: 0 0 8px;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#user-tools {
|
||||||
|
margin: 0;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.85;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#user-tools a {
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dashboard */
|
||||||
|
|
||||||
|
.dashboard #content {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-related {
|
||||||
|
margin-right: -290px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colSM #content-related {
|
||||||
|
margin-left: -290px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colMS {
|
||||||
|
margin-right: 290px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colSM {
|
||||||
|
margin-left: 290px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard .module table td a {
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td .changelink, td .addlink {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Changelist */
|
||||||
|
|
||||||
|
#toolbar {
|
||||||
|
border: none;
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-search > div {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
max-width: 480px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-search label {
|
||||||
|
line-height: 1.375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar form #searchbar {
|
||||||
|
flex: 1 0 auto;
|
||||||
|
width: 0;
|
||||||
|
height: 1.375rem;
|
||||||
|
margin: 0 10px 0 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar form input[type=submit] {
|
||||||
|
flex: 0 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-search .quiet {
|
||||||
|
width: 0;
|
||||||
|
flex: 1 0 auto;
|
||||||
|
margin: 5px 0 0 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 15px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions label {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions select {
|
||||||
|
background: var(--body-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions .button {
|
||||||
|
min-width: 48px;
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions span.all,
|
||||||
|
#changelist .actions span.clear,
|
||||||
|
#changelist .actions span.question,
|
||||||
|
#changelist .actions span.action-counter {
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
margin: 0 10px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter {
|
||||||
|
flex-basis: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .filtered .results,
|
||||||
|
.change-list .filtered .paginator,
|
||||||
|
.filtered #toolbar,
|
||||||
|
.filtered .actions,
|
||||||
|
|
||||||
|
#changelist .paginator {
|
||||||
|
border-top-color: var(--hairline-color); /* XXX Is this used at all? */
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .results + .paginator {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms */
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Minifiers remove the default (text) "type" attribute from "input" HTML
|
||||||
|
tags. Add input:not([type]) to make the CSS stylesheet work the same.
|
||||||
|
*/
|
||||||
|
.form-row input:not([type]),
|
||||||
|
.form-row input[type=text],
|
||||||
|
.form-row input[type=password],
|
||||||
|
.form-row input[type=email],
|
||||||
|
.form-row input[type=url],
|
||||||
|
.form-row input[type=tel],
|
||||||
|
.form-row input[type=number],
|
||||||
|
.form-row textarea,
|
||||||
|
.form-row select,
|
||||||
|
.form-row .vTextField {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 6px 8px;
|
||||||
|
min-height: 2.25rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row select {
|
||||||
|
height: 2.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row select[multiple] {
|
||||||
|
height: auto;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset .fieldBox + .fieldBox {
|
||||||
|
margin-top: 10px;
|
||||||
|
padding-top: 10px;
|
||||||
|
border-top: 1px solid var(--hairline-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned label {
|
||||||
|
padding-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .related-lookup,
|
||||||
|
.aligned .datetimeshortcuts,
|
||||||
|
.aligned .related-lookup + strong {
|
||||||
|
align-self: center;
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned div.radiolist {
|
||||||
|
margin-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.deletelink {
|
||||||
|
padding: 10px 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button, input[type=submit], input[type=button], .submit-row input, a.button {
|
||||||
|
padding: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selector */
|
||||||
|
|
||||||
|
.selector {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-filter {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-filter label {
|
||||||
|
margin: 0 8px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-filter input {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 0;
|
||||||
|
flex: 1 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-available, .selector-chosen {
|
||||||
|
width: auto;
|
||||||
|
flex: 1 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector select {
|
||||||
|
width: 100%;
|
||||||
|
flex: 1 0 auto;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector ul.selector-chooser {
|
||||||
|
width: 26px;
|
||||||
|
height: 52px;
|
||||||
|
padding: 2px 0;
|
||||||
|
border-radius: 20px;
|
||||||
|
transform: translateY(-10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-add, .selector-remove {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
background-size: 20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-add {
|
||||||
|
background-position: 0 -120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-remove {
|
||||||
|
background-position: 0 -80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-chooseall, a.selector-clearall {
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked {
|
||||||
|
flex-direction: column;
|
||||||
|
max-width: 480px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked > * {
|
||||||
|
flex: 0 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked select {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-available, .stacked .selector-chosen {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked ul.selector-chooser {
|
||||||
|
width: 52px;
|
||||||
|
height: 26px;
|
||||||
|
padding: 0 2px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-chooser li {
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-add, .stacked .selector-remove {
|
||||||
|
background-size: 20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-add {
|
||||||
|
background-position: 0 -40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .active.selector-add {
|
||||||
|
background-position: 0 -40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-add:focus, .active.selector-add:hover {
|
||||||
|
background-position: 0 -140px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .active.selector-add:focus, .stacked .active.selector-add:hover {
|
||||||
|
background-position: 0 -60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-remove {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .active.selector-remove {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-remove:focus, .active.selector-remove:hover {
|
||||||
|
background-position: 0 -100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover {
|
||||||
|
background-position: 0 -20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.help-tooltip, .selector .help-icon {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime input {
|
||||||
|
width: 50%;
|
||||||
|
max-width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime span {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime .timezonewarning {
|
||||||
|
display: block;
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetimeshortcuts {
|
||||||
|
color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Messages */
|
||||||
|
|
||||||
|
ul.messagelist li {
|
||||||
|
padding-left: 55px;
|
||||||
|
background-position: 30px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.messagelist li.error {
|
||||||
|
background-position: 30px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.messagelist li.warning {
|
||||||
|
background-position: 30px 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Login */
|
||||||
|
|
||||||
|
.login #header {
|
||||||
|
padding: 15px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #site-name {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GIS */
|
||||||
|
|
||||||
|
div.olMap {
|
||||||
|
max-width: calc(100vw - 30px);
|
||||||
|
max-height: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.olMap + .clear_features {
|
||||||
|
display: block;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Docs */
|
||||||
|
|
||||||
|
.module table.xfull {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre.literal-block {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile */
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
/* Layout */
|
||||||
|
|
||||||
|
#header, #content {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.breadcrumbs {
|
||||||
|
padding: 10px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dashboard */
|
||||||
|
|
||||||
|
.colMS, .colSM {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-related, .colSM #content-related {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-related .module {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-related .module h2 {
|
||||||
|
padding: 10px 15px;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Changelist */
|
||||||
|
|
||||||
|
#changelist {
|
||||||
|
align-items: stretch;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions label {
|
||||||
|
flex: 1 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions select {
|
||||||
|
flex: 1 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist .actions span {
|
||||||
|
flex: 1 0 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter {
|
||||||
|
position: static;
|
||||||
|
width: auto;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.object-tools {
|
||||||
|
float: none;
|
||||||
|
margin: 0 0 15px;
|
||||||
|
padding: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.object-tools li {
|
||||||
|
height: auto;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.object-tools li + li {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms */
|
||||||
|
|
||||||
|
.form-row {
|
||||||
|
padding: 15px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .form-row,
|
||||||
|
.aligned .form-row > div {
|
||||||
|
max-width: 100vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .form-row > div {
|
||||||
|
width: calc(100vw - 30px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-container {
|
||||||
|
flex-flow: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-container.checkbox-row {
|
||||||
|
flex-flow: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
max-width: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vURLField {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset .fieldBox + .fieldBox {
|
||||||
|
margin-top: 15px;
|
||||||
|
padding-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned label {
|
||||||
|
width: 100%;
|
||||||
|
min-width: auto;
|
||||||
|
padding: 0 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned label:after {
|
||||||
|
max-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .form-row input,
|
||||||
|
.aligned .form-row select,
|
||||||
|
.aligned .form-row textarea {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .checkbox-row input {
|
||||||
|
flex: 0 1 auto;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .vCheckboxLabel {
|
||||||
|
flex: 1 0;
|
||||||
|
padding: 1px 0 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned label + p,
|
||||||
|
.aligned label + div.help,
|
||||||
|
.aligned label + div.readonly {
|
||||||
|
padding: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned p.file-upload {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.clearable-file-input {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.clearable-file-input label {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .timezonewarning {
|
||||||
|
flex: 1 0 100%;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned .form-row div.help {
|
||||||
|
width: 100%;
|
||||||
|
margin: 5px 0 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned ul,
|
||||||
|
form .aligned ul.errorlist {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned div.radiolist {
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-right: 15px;
|
||||||
|
margin-bottom: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned div.radiolist:not(.inline) div + div {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Related widget */
|
||||||
|
|
||||||
|
.related-widget-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.related-widget-wrapper .selector {
|
||||||
|
order: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.related-widget-wrapper > a {
|
||||||
|
order: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.related-widget-wrapper .radiolist ~ a {
|
||||||
|
align-self: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.related-widget-wrapper > select ~ a {
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selector */
|
||||||
|
|
||||||
|
.selector {
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-available, .selector-chosen {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector select {
|
||||||
|
max-height: 96px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector ul.selector-chooser {
|
||||||
|
display: block;
|
||||||
|
width: 52px;
|
||||||
|
height: 26px;
|
||||||
|
padding: 0 2px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector ul.selector-chooser li {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-remove {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-remove:focus, .active.selector-remove:hover {
|
||||||
|
background-position: 0 -20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-add {
|
||||||
|
background-position: 0 -40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-add:focus, .active.selector-add:hover {
|
||||||
|
background-position: 0 -60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inlines */
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .inline-related {
|
||||||
|
border: 1px solid var(--hairline-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-top: 15px;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .inline-related > * {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .inline-related .module {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .inline-related .module .form-row {
|
||||||
|
border-top: 1px solid var(--hairline-color);
|
||||||
|
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 {
|
||||||
|
padding: 10px;
|
||||||
|
border-top-width: 0;
|
||||||
|
border-bottom-width: 2px;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label {
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .inline-related h3 span.delete {
|
||||||
|
float: none;
|
||||||
|
flex: 1 1 100%;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] .aligned label {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group[data-inline-type="stacked"] div.add-row {
|
||||||
|
margin-top: 15px;
|
||||||
|
border: 1px solid var(--hairline-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group div.add-row,
|
||||||
|
.inline-group .tabular tr.add-row td {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group div.add-row a,
|
||||||
|
.inline-group .tabular tr.add-row td a {
|
||||||
|
display: block;
|
||||||
|
padding: 8px 10px 8px 26px;
|
||||||
|
background-position: 8px 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Submit row */
|
||||||
|
|
||||||
|
.submit-row {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 0 0 15px;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row input, .submit-row input.default, .submit-row a {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.closelink {
|
||||||
|
padding: 10px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.deletelink {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Messages */
|
||||||
|
|
||||||
|
ul.messagelist li {
|
||||||
|
padding-left: 40px;
|
||||||
|
background-position: 15px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.messagelist li.error {
|
||||||
|
background-position: 15px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.messagelist li.warning {
|
||||||
|
background-position: 15px 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paginator */
|
||||||
|
|
||||||
|
.paginator .this-page, .paginator a:link, .paginator a:visited {
|
||||||
|
padding: 4px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Login */
|
||||||
|
|
||||||
|
body.login {
|
||||||
|
padding: 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #container {
|
||||||
|
width: auto;
|
||||||
|
max-width: 480px;
|
||||||
|
margin: 50px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #header,
|
||||||
|
.login #content {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login #content-main {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .form-row {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .form-row + .form-row {
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .form-row label {
|
||||||
|
margin: 0 0 5px;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .submit-row {
|
||||||
|
padding: 15px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login br {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .submit-row input {
|
||||||
|
margin: 0;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errornote {
|
||||||
|
margin: 0 0 20px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calendar and clock */
|
||||||
|
|
||||||
|
.calendarbox, .clockbox {
|
||||||
|
position: fixed !important;
|
||||||
|
top: 50% !important;
|
||||||
|
left: 50% !important;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
margin: 0;
|
||||||
|
border: none;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox:before, .clockbox:before {
|
||||||
|
content: '';
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background: rgba(0, 0, 0, 0.75);
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox > *, .clockbox > * {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox > div:first-child {
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox .calendar, .clockbox h2 {
|
||||||
|
border-radius: 4px 4px 0 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox .calendar-cancel, .clockbox .calendar-cancel {
|
||||||
|
border-radius: 0 0 4px 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-shortcuts {
|
||||||
|
padding: 10px 0;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
line-height: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-shortcuts a {
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timelist a {
|
||||||
|
background: var(--body-bg);
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-cancel {
|
||||||
|
padding: 8px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockbox h2 {
|
||||||
|
padding: 8px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar caption {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
|
||||||
|
z-index: 1;
|
||||||
|
top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* History */
|
||||||
|
|
||||||
|
table#change-history tbody th, table#change-history tbody td {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
table#change-history tbody th {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Docs */
|
||||||
|
|
||||||
|
table.model tbody th, table.model tbody td {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/responsive.css.gz
Normal file
BIN
staticfiles/admin/css/responsive.css.gz
Normal file
Binary file not shown.
111
staticfiles/admin/css/responsive_rtl.css
Normal file
111
staticfiles/admin/css/responsive_rtl.css
Normal file
|
|
@ -0,0 +1,111 @@
|
||||||
|
/* TABLETS */
|
||||||
|
|
||||||
|
@media (max-width: 1024px) {
|
||||||
|
[dir="rtl"] .colMS {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] #user-tools {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] #changelist .actions label {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] #changelist .actions select {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .change-list .filtered .results,
|
||||||
|
[dir="rtl"] .change-list .filtered .paginator,
|
||||||
|
[dir="rtl"] .filtered #toolbar,
|
||||||
|
[dir="rtl"] .filtered div.xfull,
|
||||||
|
[dir="rtl"] .filtered .actions,
|
||||||
|
[dir="rtl"] #changelist-filter {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .inline-group ul.tools a.add,
|
||||||
|
[dir="rtl"] .inline-group div.add-row a,
|
||||||
|
[dir="rtl"] .inline-group .tabular tr.add-row td a {
|
||||||
|
padding: 8px 26px 8px 10px;
|
||||||
|
background-position: calc(100% - 8px) 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .selector .selector-filter label {
|
||||||
|
margin-right: 0;
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .object-tools li {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .object-tools li + li {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .dashboard .module table td a {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .selector-add {
|
||||||
|
background-position: 0 -80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .selector-remove {
|
||||||
|
background-position: 0 -120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .active.selector-add:focus, .active.selector-add:hover {
|
||||||
|
background-position: 0 -100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .active.selector-remove:focus, .active.selector-remove:hover {
|
||||||
|
background-position: 0 -140px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MOBILE */
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
[dir="rtl"] .aligned .related-lookup,
|
||||||
|
[dir="rtl"] .aligned .datetimeshortcuts {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .aligned ul,
|
||||||
|
[dir="rtl"] form .aligned ul.errorlist {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] #changelist-filter {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
[dir="rtl"] .aligned .vCheckboxLabel {
|
||||||
|
padding: 1px 5px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .selector-remove {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .active.selector-remove:focus, .active.selector-remove:hover {
|
||||||
|
background-position: 0 -20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .selector-add {
|
||||||
|
background-position: 0 -40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .active.selector-add:focus, .active.selector-add:hover {
|
||||||
|
background-position: 0 -60px;
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/responsive_rtl.css.gz
Normal file
BIN
staticfiles/admin/css/responsive_rtl.css.gz
Normal file
Binary file not shown.
291
staticfiles/admin/css/rtl.css
Normal file
291
staticfiles/admin/css/rtl.css
Normal file
|
|
@ -0,0 +1,291 @@
|
||||||
|
/* GLOBAL */
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.module h2, .module caption {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.module ul, .module ol {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.viewlink, .addlink, .changelink, .hidelink {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 16px;
|
||||||
|
background-position: 100% 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deletelink {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 16px;
|
||||||
|
background-position: 100% 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.object-tools {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
thead th:first-child,
|
||||||
|
tfoot td:first-child {
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LAYOUT */
|
||||||
|
|
||||||
|
#user-tools {
|
||||||
|
right: auto;
|
||||||
|
left: 0;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.breadcrumbs {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-main {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-related {
|
||||||
|
float: left;
|
||||||
|
margin-left: -300px;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colMS {
|
||||||
|
margin-left: 300px;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SORTABLE TABLES */
|
||||||
|
|
||||||
|
table thead th.sorted .sortoptions {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
thead th.sorted .text {
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* dashboard styles */
|
||||||
|
|
||||||
|
.dashboard .module table td a {
|
||||||
|
padding-left: .6em;
|
||||||
|
padding-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* changelists styles */
|
||||||
|
|
||||||
|
.change-list .filtered table {
|
||||||
|
border-left: none;
|
||||||
|
border-right: 0px none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter {
|
||||||
|
border-left: none;
|
||||||
|
border-right: none;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter li.selected {
|
||||||
|
border-left: none;
|
||||||
|
padding-left: 10px;
|
||||||
|
margin-left: 0;
|
||||||
|
border-right: 5px solid var(--hairline-color);
|
||||||
|
padding-right: 10px;
|
||||||
|
margin-right: -15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist table tbody td:first-child, #changelist table tbody th:first-child {
|
||||||
|
border-right: none;
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator .end {
|
||||||
|
margin-left: 6px;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator input {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FORMS */
|
||||||
|
|
||||||
|
.aligned label {
|
||||||
|
padding: 0 0 3px 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.deletelink {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vDateField, .vTimeField {
|
||||||
|
margin-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .form-row input {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned ul {
|
||||||
|
margin-right: 163px;
|
||||||
|
padding-right: 10px;
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form ul.inline li {
|
||||||
|
float: right;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .aligned p.help,
|
||||||
|
form .aligned div.help {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 160px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form div.help ul,
|
||||||
|
form .aligned .checkbox-row + .help,
|
||||||
|
form .aligned p.date div.help.timezonewarning,
|
||||||
|
form .aligned p.datetime div.help.timezonewarning,
|
||||||
|
form .aligned p.time div.help.timezonewarning {
|
||||||
|
margin-right: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .wide p.help,
|
||||||
|
form .wide ul.errorlist,
|
||||||
|
form .wide div.help {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset .fieldBox {
|
||||||
|
margin-left: 20px;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errorlist li {
|
||||||
|
background-position: 100% 12px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errornote {
|
||||||
|
background-position: 100% 12px;
|
||||||
|
padding: 10px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WIDGETS */
|
||||||
|
|
||||||
|
.calendarnav-previous {
|
||||||
|
top: 0;
|
||||||
|
left: auto;
|
||||||
|
right: 10px;
|
||||||
|
background: url(../img/calendar-icons.svg) 0 -15px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav-next {
|
||||||
|
top: 0;
|
||||||
|
right: auto;
|
||||||
|
left: 10px;
|
||||||
|
background: url(../img/calendar-icons.svg) 0 0 no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar caption, .calendarbox h2 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-filter {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-add {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -64px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-add:focus, .active.selector-add:hover {
|
||||||
|
background-position: 0 -80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-remove {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-remove:focus, .active.selector-remove:hover {
|
||||||
|
background-position: 0 -112px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-chooseall {
|
||||||
|
background: url(../img/selector-icons.svg) right -128px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-chooseall:focus, a.active.selector-chooseall:hover {
|
||||||
|
background-position: 100% -144px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-clearall {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -160px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
||||||
|
background-position: 0 -176px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-deletelink {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .form-row p.datetime {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.related-widget-wrapper {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MISC */
|
||||||
|
|
||||||
|
.inline-related h2, .inline-group h2 {
|
||||||
|
text-align: right
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related h3 span.delete {
|
||||||
|
padding-right: 20px;
|
||||||
|
padding-left: inherit;
|
||||||
|
left: 10px;
|
||||||
|
right: inherit;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related h3 span.delete label {
|
||||||
|
margin-left: inherit;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-group .tabular td.original p {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-chooser {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/rtl.css.gz
Normal file
BIN
staticfiles/admin/css/rtl.css.gz
Normal file
Binary file not shown.
1
staticfiles/admin/css/tailwind.css
Normal file
1
staticfiles/admin/css/tailwind.css
Normal file
File diff suppressed because one or more lines are too long
BIN
staticfiles/admin/css/tailwind.css.gz
Normal file
BIN
staticfiles/admin/css/tailwind.css.gz
Normal file
Binary file not shown.
2
staticfiles/admin/css/tom-select.min.css
vendored
Normal file
2
staticfiles/admin/css/tom-select.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
staticfiles/admin/css/tom-select.min.css.gz
Normal file
BIN
staticfiles/admin/css/tom-select.min.css.gz
Normal file
Binary file not shown.
19
staticfiles/admin/css/unusable_password_field.css
Normal file
19
staticfiles/admin/css/unusable_password_field.css
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
/* Hide warnings fields if usable password is selected */
|
||||||
|
form:has(#id_usable_password input[value="true"]:checked) .messagelist {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide password fields if unusable password is selected */
|
||||||
|
form:has(#id_usable_password input[value="false"]:checked) .field-password1,
|
||||||
|
form:has(#id_usable_password input[value="false"]:checked) .field-password2 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select appropriate submit button */
|
||||||
|
form:has(#id_usable_password input[value="true"]:checked) input[type="submit"].unset-password {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
form:has(#id_usable_password input[value="false"]:checked) input[type="submit"].set-password {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/unusable_password_field.css.gz
Normal file
BIN
staticfiles/admin/css/unusable_password_field.css.gz
Normal file
Binary file not shown.
21
staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md
vendored
Normal file
21
staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
BIN
staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md.gz
vendored
Normal file
BIN
staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md.gz
vendored
Normal file
Binary file not shown.
630
staticfiles/admin/css/vendor/select2/select2.css
vendored
Normal file
630
staticfiles/admin/css/vendor/select2/select2.css
vendored
Normal file
|
|
@ -0,0 +1,630 @@
|
||||||
|
.select2-container {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-selection--single {
|
||||||
|
box-sizing: border-box;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-selection--single .select2-selection__rendered {
|
||||||
|
display: block;
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-selection--single .select2-selection__clear {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
|
||||||
|
padding-right: 8px;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-selection--multiple {
|
||||||
|
box-sizing: border-box;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
min-height: 32px;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
display: inline-block;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-left: 8px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-search--inline {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-search--inline .select2-search__field {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: none;
|
||||||
|
font-size: 100%;
|
||||||
|
margin-top: 5px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-dropdown {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
left: -100000px;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 1051;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-results {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-results__options {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-results__option {
|
||||||
|
padding: 6px;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-results__option[aria-selected] {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--open .select2-dropdown {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--open .select2-dropdown--above {
|
||||||
|
border-bottom: none;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--open .select2-dropdown--below {
|
||||||
|
border-top: none;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-search--dropdown {
|
||||||
|
display: block;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-search--dropdown .select2-search__field {
|
||||||
|
padding: 4px;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-search--dropdown.select2-search--hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-close-mask {
|
||||||
|
border: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: block;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
min-height: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
width: auto;
|
||||||
|
opacity: 0;
|
||||||
|
z-index: 99;
|
||||||
|
background-color: #fff;
|
||||||
|
filter: alpha(opacity=0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-hidden-accessible {
|
||||||
|
border: 0 !important;
|
||||||
|
clip: rect(0 0 0 0) !important;
|
||||||
|
-webkit-clip-path: inset(50%) !important;
|
||||||
|
clip-path: inset(50%) !important;
|
||||||
|
height: 1px !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
position: absolute !important;
|
||||||
|
width: 1px !important;
|
||||||
|
white-space: nowrap !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single {
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||||
|
color: #444;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__clear {
|
||||||
|
cursor: pointer;
|
||||||
|
float: right;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__placeholder {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||||
|
height: 26px;
|
||||||
|
position: absolute;
|
||||||
|
top: 1px;
|
||||||
|
right: 1px;
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: #888 transparent transparent transparent;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 5px 4px 0 4px;
|
||||||
|
height: 0;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -4px;
|
||||||
|
margin-top: -2px;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
||||||
|
left: 1px;
|
||||||
|
right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--disabled .select2-selection--single {
|
||||||
|
background-color: #eee;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: transparent transparent #888 transparent;
|
||||||
|
border-width: 0 4px 5px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
box-sizing: border-box;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 5px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__clear {
|
||||||
|
cursor: pointer;
|
||||||
|
float: right;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-right: 10px;
|
||||||
|
padding: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||||
|
background-color: #e4e4e4;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: default;
|
||||||
|
float: left;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-top: 5px;
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
color: #999;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--focus .select2-selection--multiple {
|
||||||
|
border: solid black 1px;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--disabled .select2-selection--multiple {
|
||||||
|
background-color: #eee;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-search--dropdown .select2-search__field {
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-search--inline .select2-search__field {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
outline: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
-webkit-appearance: textfield;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results > .select2-results__options {
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option[role=group] {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option[aria-disabled=true] {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option[aria-selected=true] {
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option {
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -1em;
|
||||||
|
padding-left: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -2em;
|
||||||
|
padding-left: 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -3em;
|
||||||
|
padding-left: 4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -4em;
|
||||||
|
padding-left: 5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||||
|
margin-left: -5em;
|
||||||
|
padding-left: 6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__option--highlighted[aria-selected] {
|
||||||
|
background-color: #5897fb;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results__group {
|
||||||
|
cursor: default;
|
||||||
|
display: block;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--single {
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
outline: 0;
|
||||||
|
background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
|
||||||
|
background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
|
||||||
|
background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--single:focus {
|
||||||
|
border: 1px solid #5897fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__rendered {
|
||||||
|
color: #444;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__clear {
|
||||||
|
cursor: pointer;
|
||||||
|
float: right;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__placeholder {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__arrow {
|
||||||
|
background-color: #ddd;
|
||||||
|
border: none;
|
||||||
|
border-left: 1px solid #aaa;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
height: 26px;
|
||||||
|
position: absolute;
|
||||||
|
top: 1px;
|
||||||
|
right: 1px;
|
||||||
|
width: 20px;
|
||||||
|
background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
|
||||||
|
background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
|
||||||
|
background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: #888 transparent transparent transparent;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 5px 4px 0 4px;
|
||||||
|
height: 0;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -4px;
|
||||||
|
margin-top: -2px;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
||||||
|
border: none;
|
||||||
|
border-right: 1px solid #aaa;
|
||||||
|
border-radius: 0;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
left: 1px;
|
||||||
|
right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open .select2-selection--single {
|
||||||
|
border: 1px solid #5897fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||||
|
border-color: transparent transparent #888 transparent;
|
||||||
|
border-width: 0 4px 5px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
|
||||||
|
border-top: none;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
|
||||||
|
background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
|
||||||
|
background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
|
||||||
|
border-bottom: none;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
|
||||||
|
background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
|
||||||
|
background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--multiple {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: text;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--multiple:focus {
|
||||||
|
border: 1px solid #5897fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__clear {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__choice {
|
||||||
|
background-color: #e4e4e4;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: default;
|
||||||
|
float: left;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-top: 5px;
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
color: #888;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||||
|
float: right;
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open .select2-selection--multiple {
|
||||||
|
border: 1px solid #5897fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
|
||||||
|
border-top: none;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
|
||||||
|
border-bottom: none;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-search--dropdown .select2-search__field {
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-search--inline .select2-search__field {
|
||||||
|
outline: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-dropdown {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-dropdown--above {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-dropdown--below {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results > .select2-results__options {
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results__option[role=group] {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results__option[aria-disabled=true] {
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results__option--highlighted[aria-selected] {
|
||||||
|
background-color: #3875d7;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic .select2-results__group {
|
||||||
|
cursor: default;
|
||||||
|
display: block;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--classic.select2-container--open .select2-dropdown {
|
||||||
|
border-color: #5897fb;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/vendor/select2/select2.css.gz
vendored
Normal file
BIN
staticfiles/admin/css/vendor/select2/select2.css.gz
vendored
Normal file
Binary file not shown.
1
staticfiles/admin/css/vendor/select2/select2.min.css
vendored
Normal file
1
staticfiles/admin/css/vendor/select2/select2.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
staticfiles/admin/css/vendor/select2/select2.min.css.gz
vendored
Normal file
BIN
staticfiles/admin/css/vendor/select2/select2.min.css.gz
vendored
Normal file
Binary file not shown.
593
staticfiles/admin/css/widgets.css
Normal file
593
staticfiles/admin/css/widgets.css
Normal file
|
|
@ -0,0 +1,593 @@
|
||||||
|
/* SELECTOR (FILTER INTERFACE) */
|
||||||
|
|
||||||
|
.selector {
|
||||||
|
display: flex;
|
||||||
|
flex-grow: 1;
|
||||||
|
gap: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector select {
|
||||||
|
height: 17.2em;
|
||||||
|
flex: 1 0 auto;
|
||||||
|
overflow: scroll;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-available, .selector-chosen {
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-available h2, .selector-chosen h2 {
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-radius: 4px 4px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-chosen .list-footer-display {
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-top: none;
|
||||||
|
border-radius: 0 0 4px 4px;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
padding: 8px;
|
||||||
|
text-align: center;
|
||||||
|
background: var(--primary);
|
||||||
|
color: var(--header-link-color);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.selector-chosen .list-footer-display__clear {
|
||||||
|
color: var(--breadcrumbs-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-chosen h2 {
|
||||||
|
background: var(--secondary);
|
||||||
|
color: var(--header-link-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-available h2 {
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-filter {
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-width: 0 1px;
|
||||||
|
padding: 8px;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
font-size: 0.625rem;
|
||||||
|
margin: 0;
|
||||||
|
text-align: left;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-filter label,
|
||||||
|
.inline-group .aligned .selector .selector-filter label {
|
||||||
|
float: left;
|
||||||
|
margin: 7px 0 0;
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
padding: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
line-height: 1;
|
||||||
|
min-width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-filter input {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-available input,
|
||||||
|
.selector .selector-chosen input {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector ul.selector-chooser {
|
||||||
|
align-self: center;
|
||||||
|
width: 22px;
|
||||||
|
background-color: var(--selected-bg);
|
||||||
|
border-radius: 10px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
transform: translateY(-17px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-chooser li {
|
||||||
|
margin: 0;
|
||||||
|
padding: 3px;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector select {
|
||||||
|
padding: 0 10px;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
border-radius: 0 0 4px 4px;
|
||||||
|
}
|
||||||
|
.selector .selector-chosen--with-filtered select {
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
height: 14em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-add, .selector-remove {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: block;
|
||||||
|
text-indent: -3000px;
|
||||||
|
overflow: hidden;
|
||||||
|
cursor: default;
|
||||||
|
opacity: 0.55;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-add, .active.selector-remove {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-add:hover, .active.selector-remove:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-add {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-add:focus, .active.selector-add:hover {
|
||||||
|
background-position: 0 -112px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-remove {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -64px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-remove:focus, .active.selector-remove:hover {
|
||||||
|
background-position: 0 -80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-chooseall, a.selector-clearall {
|
||||||
|
display: inline-block;
|
||||||
|
height: 16px;
|
||||||
|
text-align: left;
|
||||||
|
margin: 0 auto;
|
||||||
|
overflow: hidden;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 16px;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
text-decoration: none;
|
||||||
|
opacity: 0.55;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-chooseall:focus, a.active.selector-clearall:focus,
|
||||||
|
a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
|
||||||
|
color: var(--link-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-chooseall, a.active.selector-clearall {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-chooseall {
|
||||||
|
padding: 0 18px 0 0;
|
||||||
|
background: url(../img/selector-icons.svg) right -160px no-repeat;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-chooseall:focus, a.active.selector-chooseall:hover {
|
||||||
|
background-position: 100% -176px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-clearall {
|
||||||
|
padding: 0 0 0 18px;
|
||||||
|
background: url(../img/selector-icons.svg) 0 -128px no-repeat;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
||||||
|
background-position: 0 -144px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* STACKED SELECTORS */
|
||||||
|
|
||||||
|
.stacked {
|
||||||
|
float: left;
|
||||||
|
width: 490px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked select {
|
||||||
|
width: 480px;
|
||||||
|
height: 10.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-available, .stacked .selector-chosen {
|
||||||
|
width: 480px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-available {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-available input {
|
||||||
|
width: 422px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked ul.selector-chooser {
|
||||||
|
height: 22px;
|
||||||
|
width: 50px;
|
||||||
|
margin: 0 0 10px 40%;
|
||||||
|
background-color: #eee;
|
||||||
|
border-radius: 10px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-chooser li {
|
||||||
|
float: left;
|
||||||
|
padding: 3px 3px 3px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-chooseall, .stacked .selector-clearall {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-add {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -32px no-repeat;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .active.selector-add {
|
||||||
|
background-position: 0 -32px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .active.selector-add:focus, .stacked .active.selector-add:hover {
|
||||||
|
background-position: 0 -48px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-remove {
|
||||||
|
background: url(../img/selector-icons.svg) 0 0 no-repeat;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .active.selector-remove {
|
||||||
|
background-position: 0 0px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover {
|
||||||
|
background-position: 0 -16px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .help-icon {
|
||||||
|
background: url(../img/icon-unknown.svg) 0 0 no-repeat;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin: -2px 0 0 2px;
|
||||||
|
width: 13px;
|
||||||
|
height: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-chosen .help-icon {
|
||||||
|
background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .search-label-icon {
|
||||||
|
background: url(../img/search.svg) 0 0 no-repeat;
|
||||||
|
display: inline-block;
|
||||||
|
height: 1.125rem;
|
||||||
|
width: 1.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DATE AND TIME */
|
||||||
|
|
||||||
|
p.datetime {
|
||||||
|
line-height: 20px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime span {
|
||||||
|
white-space: nowrap;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table p.datetime {
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetimeshortcuts .clock-icon {
|
||||||
|
background: url(../img/icon-clock.svg) 0 0 no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetimeshortcuts a:focus .clock-icon,
|
||||||
|
.datetimeshortcuts a:hover .clock-icon {
|
||||||
|
background-position: 0 -16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetimeshortcuts .date-icon {
|
||||||
|
background: url(../img/icon-calendar.svg) 0 0 no-repeat;
|
||||||
|
top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetimeshortcuts a:focus .date-icon,
|
||||||
|
.datetimeshortcuts a:hover .date-icon {
|
||||||
|
background-position: 0 -16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timezonewarning {
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* URL */
|
||||||
|
|
||||||
|
p.url {
|
||||||
|
line-height: 20px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.url a {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FILE UPLOADS */
|
||||||
|
|
||||||
|
p.file-upload {
|
||||||
|
line-height: 20px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-upload a {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-upload .deletelink {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.clearable-file-input label {
|
||||||
|
color: var(--body-fg);
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
display: inline;
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CALENDARS & CLOCKS */
|
||||||
|
|
||||||
|
.calendarbox, .clockbox {
|
||||||
|
margin: 5px auto;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
width: 19em;
|
||||||
|
text-align: center;
|
||||||
|
background: var(--body-bg);
|
||||||
|
color: var(--body-fg);
|
||||||
|
border: 1px solid var(--hairline-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockbox {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar table {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
background: white;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar caption, .calendarbox h2 {
|
||||||
|
margin: 0;
|
||||||
|
text-align: center;
|
||||||
|
border-top: none;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
color: #333;
|
||||||
|
background: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar th {
|
||||||
|
padding: 8px 5px;
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
text-align: center;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td {
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
text-align: center;
|
||||||
|
padding: 0;
|
||||||
|
border-top: 1px solid var(--hairline-color);
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td.selected a {
|
||||||
|
background: var(--secondary);
|
||||||
|
color: var(--button-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td.nonday {
|
||||||
|
background: var(--darkened-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td.today a {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td a, .timelist a {
|
||||||
|
display: block;
|
||||||
|
font-weight: 400;
|
||||||
|
padding: 6px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td a:focus, .timelist a:focus,
|
||||||
|
.calendar td a:hover, .timelist a:hover {
|
||||||
|
background: var(--primary);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td a:active, .timelist a:active {
|
||||||
|
background: var(--header-bg);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav {
|
||||||
|
font-size: 0.625rem;
|
||||||
|
text-align: center;
|
||||||
|
color: #ccc;
|
||||||
|
margin: 0;
|
||||||
|
padding: 1px 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav a:link, #calendarnav a:visited,
|
||||||
|
#calendarnav a:focus, #calendarnav a:hover {
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-shortcuts {
|
||||||
|
background: var(--body-bg);
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
line-height: 0.6875rem;
|
||||||
|
border-top: 1px solid var(--hairline-color);
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 8px;
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
text-indent: -9999px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav-previous {
|
||||||
|
left: 10px;
|
||||||
|
background: url(../img/calendar-icons.svg) 0 0 no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav-next {
|
||||||
|
right: 10px;
|
||||||
|
background: url(../img/calendar-icons.svg) 0 -15px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-cancel {
|
||||||
|
margin: 0;
|
||||||
|
padding: 4px 0;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
background: var(--close-button-bg);
|
||||||
|
border-top: 1px solid var(--border-color);
|
||||||
|
color: var(--button-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-cancel:focus, .calendar-cancel:hover {
|
||||||
|
background: var(--close-button-hover-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-cancel a {
|
||||||
|
color: var(--button-fg);
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.timelist, .timelist li {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timelist a {
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EDIT INLINE */
|
||||||
|
|
||||||
|
.inline-deletelink {
|
||||||
|
float: right;
|
||||||
|
text-indent: -9999px;
|
||||||
|
background: url(../img/inline-delete.svg) 0 0 no-repeat;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
border: 0px none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-deletelink:focus, .inline-deletelink:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RELATED WIDGET WRAPPER */
|
||||||
|
.related-widget-wrapper {
|
||||||
|
display: flex;
|
||||||
|
gap: 0 10px;
|
||||||
|
flex-grow: 1;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.related-widget-wrapper-link {
|
||||||
|
opacity: .6;
|
||||||
|
filter: grayscale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.related-widget-wrapper-link:link {
|
||||||
|
opacity: 1;
|
||||||
|
filter: grayscale(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GIS MAPS */
|
||||||
|
.dj_map {
|
||||||
|
width: 600px;
|
||||||
|
height: 400px;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/css/widgets.css.gz
Normal file
BIN
staticfiles/admin/css/widgets.css.gz
Normal file
Binary file not shown.
150
staticfiles/admin/fields/ckeditor_init.js
Normal file
150
staticfiles/admin/fields/ckeditor_init.js
Normal file
|
|
@ -0,0 +1,150 @@
|
||||||
|
$(document).ready(function () {
|
||||||
|
|
||||||
|
|
||||||
|
// This sample still does not showcase all CKEditor 5 features (!)
|
||||||
|
// Visit https://ckeditor.com/docs/ckeditor5/latest/features/index.html to browse all the features.
|
||||||
|
CKEDITOR.ClassicEditor.create(document.querySelector(".ckeditor-field"), {
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html#extended-toolbar-configuration-format
|
||||||
|
height: '350px',
|
||||||
|
toolbar: {
|
||||||
|
items: [
|
||||||
|
'exportPDF', 'exportWord', '|',
|
||||||
|
'findAndReplace', 'selectAll', '|',
|
||||||
|
'heading', '|',
|
||||||
|
'bold', 'italic', 'strikethrough', 'underline', 'code', 'subscript', 'superscript', 'removeFormat', '|',
|
||||||
|
'bulletedList', 'numberedList', 'todoList', '|',
|
||||||
|
'outdent', 'indent', '|',
|
||||||
|
'undo', 'redo',
|
||||||
|
'-',
|
||||||
|
'fontSize', 'fontFamily', 'fontColor', 'fontBackgroundColor', 'highlight', '|',
|
||||||
|
'alignment', '|',
|
||||||
|
'link', 'insertImage', 'blockQuote', 'insertTable', 'mediaEmbed', 'codeBlock', 'htmlEmbed', '|',
|
||||||
|
'specialCharacters', 'horizontalLine', 'pageBreak', '|',
|
||||||
|
'textPartLanguage', '|',
|
||||||
|
'sourceEditing'
|
||||||
|
],
|
||||||
|
shouldNotGroupWhenFull: true
|
||||||
|
},
|
||||||
|
// Changing the language of the interface requires loading the language file using the <script> tag.
|
||||||
|
// language: 'es',
|
||||||
|
list: {
|
||||||
|
properties: {
|
||||||
|
styles: true,
|
||||||
|
startIndex: true,
|
||||||
|
reversed: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/headings.html#configuration
|
||||||
|
heading: {
|
||||||
|
options: [
|
||||||
|
{model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph'},
|
||||||
|
{model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1'},
|
||||||
|
{model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2'},
|
||||||
|
{model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3'},
|
||||||
|
{model: 'heading4', view: 'h4', title: 'Heading 4', class: 'ck-heading_heading4'},
|
||||||
|
{model: 'heading5', view: 'h5', title: 'Heading 5', class: 'ck-heading_heading5'},
|
||||||
|
{model: 'heading6', view: 'h6', title: 'Heading 6', class: 'ck-heading_heading6'}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/editor-placeholder.html#using-the-editor-configuration
|
||||||
|
placeholder: 'Welcome to CKEditor 5!',
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/font.html#configuring-the-font-family-feature
|
||||||
|
fontFamily: {
|
||||||
|
options: [
|
||||||
|
'default',
|
||||||
|
'Arial, Helvetica, sans-serif',
|
||||||
|
'Courier New, Courier, monospace',
|
||||||
|
'Georgia, serif',
|
||||||
|
'Lucida Sans Unicode, Lucida Grande, sans-serif',
|
||||||
|
'Tahoma, Geneva, sans-serif',
|
||||||
|
'Times New Roman, Times, serif',
|
||||||
|
'Trebuchet MS, Helvetica, sans-serif',
|
||||||
|
'Verdana, Geneva, sans-serif'
|
||||||
|
],
|
||||||
|
supportAllValues: true
|
||||||
|
},
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/font.html#configuring-the-font-size-feature
|
||||||
|
fontSize: {
|
||||||
|
options: [10, 12, 14, 'default', 18, 20, 22],
|
||||||
|
supportAllValues: true
|
||||||
|
},
|
||||||
|
// Be careful with the setting below. It instructs CKEditor to accept ALL HTML markup.
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/general-html-support.html#enabling-all-html-features
|
||||||
|
htmlSupport: {
|
||||||
|
allow: [
|
||||||
|
{
|
||||||
|
name: /.*/,
|
||||||
|
attributes: true,
|
||||||
|
classes: true,
|
||||||
|
styles: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// Be careful with enabling previews
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/html-embed.html#content-previews
|
||||||
|
// htmlEmbed: {
|
||||||
|
// showPreviews: true
|
||||||
|
// },
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/link.html#custom-link-attributes-decorators
|
||||||
|
link: {
|
||||||
|
decorators: {
|
||||||
|
addTargetToExternalLinks: true,
|
||||||
|
defaultProtocol: 'https://',
|
||||||
|
toggleDownloadable: {
|
||||||
|
mode: 'manual',
|
||||||
|
label: 'Downloadable',
|
||||||
|
attributes: {
|
||||||
|
download: 'file'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/mentions.html#configuration
|
||||||
|
// mention: {
|
||||||
|
// feeds: [
|
||||||
|
// {
|
||||||
|
// marker: '@',
|
||||||
|
// feed: [
|
||||||
|
// '@apple', '@bears', '@brownie', '@cake', '@cake', '@candy', '@canes', '@chocolate', '@cookie', '@cotton', '@cream',
|
||||||
|
// '@cupcake', '@danish', '@donut', '@dragée', '@fruitcake', '@gingerbread', '@gummi', '@ice', '@jelly-o',
|
||||||
|
// '@liquorice', '@macaroon', '@marzipan', '@oat', '@pie', '@plum', '@pudding', '@sesame', '@snaps', '@soufflé',
|
||||||
|
// '@sugar', '@sweet', '@topping', '@wafer'
|
||||||
|
// ],
|
||||||
|
// minimumCharacters: 1
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// },
|
||||||
|
// The "super-build" contains more premium features that require additional configuration, disable them below.
|
||||||
|
// Do not turn them on unless you read the documentation and know how to configure them and setup the editor.
|
||||||
|
removePlugins: [
|
||||||
|
// These two are commercial, but you can try them out without registering to a trial.
|
||||||
|
// 'ExportPdf',
|
||||||
|
// 'ExportWord',
|
||||||
|
'CKBox',
|
||||||
|
'FontFamily',
|
||||||
|
'CKFinder',
|
||||||
|
'EasyImage',
|
||||||
|
// This sample uses the Base64UploadAdapter to handle image uploads as it requires no configuration.
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/images/image-upload/base64-upload-adapter.html
|
||||||
|
// Storing images as Base64 is usually a very bad idea.
|
||||||
|
// Replace it on production website with other solutions:
|
||||||
|
// https://ckeditor.com/docs/ckeditor5/latest/features/images/image-upload/image-upload.html
|
||||||
|
// 'Base64UploadAdapter',
|
||||||
|
'RealTimeCollaborativeComments',
|
||||||
|
'RealTimeCollaborativeTrackChanges',
|
||||||
|
'RealTimeCollaborativeRevisionHistory',
|
||||||
|
'PresenceList',
|
||||||
|
'Comments',
|
||||||
|
'TrackChanges',
|
||||||
|
'TrackChangesData',
|
||||||
|
'RevisionHistory',
|
||||||
|
'Pagination',
|
||||||
|
'WProofreader',
|
||||||
|
// Careful, with the Mathtype plugin CKEditor will not load when loading this sample
|
||||||
|
// from a local file system (file://) - load this site via HTTP server if you enable MathType
|
||||||
|
'MathType'
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
BIN
staticfiles/admin/fields/ckeditor_init.js.gz
Normal file
BIN
staticfiles/admin/fields/ckeditor_init.js.gz
Normal file
Binary file not shown.
106
staticfiles/admin/fields/json-editor/json_editor_init.js
Normal file
106
staticfiles/admin/fields/json-editor/json_editor_init.js
Normal file
|
|
@ -0,0 +1,106 @@
|
||||||
|
function getCookie(name) {
|
||||||
|
// Split document.cookie into individual cookie strings
|
||||||
|
const cookies = document.cookie.split(';');
|
||||||
|
|
||||||
|
// Iterate through each cookie
|
||||||
|
for (let cookie of cookies) {
|
||||||
|
// Trim whitespace and split into name-value pair
|
||||||
|
const [cookieName, cookieValue] = cookie.trim().split('=');
|
||||||
|
|
||||||
|
// Check if this is the cookie we're looking for
|
||||||
|
if (cookieName === name) {
|
||||||
|
// Return the decoded value
|
||||||
|
return decodeURIComponent(cookieValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return null if cookie not found
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
|
||||||
|
JSONEditor.defaults.callbacks.upload = {
|
||||||
|
"defaultUploadHandler": function (jseditor, type, file, cbs) {
|
||||||
|
// Create a new XMLHttpRequest object
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
const htmlElement = document.documentElement;
|
||||||
|
let url = '/admin/json-editor-upload-handler/'
|
||||||
|
if (htmlElement.hasAttribute('data-use-i18n') && htmlElement.getAttribute('data-use-i18n') === "1") {
|
||||||
|
const djangoLang = htmlElement.getAttribute('lang');
|
||||||
|
if (djangoLang) {
|
||||||
|
url = `/${djangoLang}${url}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure it to send a POST request to the server endpoint
|
||||||
|
xhr.open('POST', url, true);
|
||||||
|
|
||||||
|
// Handle upload progress
|
||||||
|
xhr.upload.addEventListener('progress', function (event) {
|
||||||
|
if (event.lengthComputable) {
|
||||||
|
var percent = Math.round((event.loaded / event.total) * 100);
|
||||||
|
cbs.updateProgress(percent); // Update progress bar with percentage
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle successful upload
|
||||||
|
xhr.addEventListener('load', function () {
|
||||||
|
if (xhr.status >= 200 && xhr.status < 300) {
|
||||||
|
var response = xhr.responseText; // Server returns the URL as plain text
|
||||||
|
cbs.success(response); // Call success callback with the URL
|
||||||
|
} else {
|
||||||
|
cbs.failure('Upload failed: ' + xhr.statusText); // Call failure callback with error
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle upload errors
|
||||||
|
xhr.addEventListener('error', function () {
|
||||||
|
cbs.failure('Upload failed'); // Call failure callback on network error
|
||||||
|
});
|
||||||
|
|
||||||
|
// Prepare the file for upload
|
||||||
|
var formData = new FormData();
|
||||||
|
formData.append('file', file); // Append the file to FormData
|
||||||
|
|
||||||
|
// Send the request to the server
|
||||||
|
xhr.send(formData);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function init_editor_json_editor(
|
||||||
|
editor,
|
||||||
|
schema,
|
||||||
|
json_viewer_div,
|
||||||
|
) {
|
||||||
|
let schema_str = JSON.parse(editor.value)
|
||||||
|
|
||||||
|
let jsoneditor__ = new JSONEditor(
|
||||||
|
json_viewer_div, {
|
||||||
|
theme: 'tailwind',
|
||||||
|
schema: JSON.parse(schema),
|
||||||
|
disable_edit_json: true,
|
||||||
|
disable_properties: true,
|
||||||
|
disable_array_delete_all_rows: true,
|
||||||
|
disable_array_delete_last_row: true,
|
||||||
|
disable_array_reorder: true,
|
||||||
|
grid_columns: 3,
|
||||||
|
prompt_before_delete: false,
|
||||||
|
disable_collapse: true,
|
||||||
|
startval: schema_str || []
|
||||||
|
})
|
||||||
|
|
||||||
|
jsoneditor__.on('change', () => {
|
||||||
|
$(editor).val(JSON.stringify(jsoneditor__.getValue()))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.django-json-editor-field').each(function (i, editor) {
|
||||||
|
let editor_id = $(editor).attr('id')
|
||||||
|
init_editor_json_editor(
|
||||||
|
editor,
|
||||||
|
$(`#${editor_id}-schema-template`).html(),
|
||||||
|
$(`#${editor_id}-viewer`)[0]
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
BIN
staticfiles/admin/fields/json-editor/json_editor_init.js.gz
Normal file
BIN
staticfiles/admin/fields/json-editor/json_editor_init.js.gz
Normal file
Binary file not shown.
8
staticfiles/admin/fields/json-editor/jsoneditor.min.js
vendored
Normal file
8
staticfiles/admin/fields/json-editor/jsoneditor.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
staticfiles/admin/fields/json-editor/jsoneditor.min.js.gz
Normal file
BIN
staticfiles/admin/fields/json-editor/jsoneditor.min.js.gz
Normal file
Binary file not shown.
47
staticfiles/admin/fields/keyvalue_field/script.js
Normal file
47
staticfiles/admin/fields/keyvalue_field/script.js
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
$(document).ready(function () {
|
||||||
|
let editors = document.getElementsByClassName('keyvalue-json-editor-field')
|
||||||
|
$(editors).each((index, editor) => {
|
||||||
|
let schema_str = JSON.parse(editor.value)
|
||||||
|
$(editor).addClass("hidden")
|
||||||
|
let json_viewer_div = $(`<div class="json-view-editor"></div>`)
|
||||||
|
$(editor).parent().append(json_viewer_div)
|
||||||
|
|
||||||
|
let properties = {
|
||||||
|
key: {type: 'string'},
|
||||||
|
value: {type: 'string'},
|
||||||
|
}
|
||||||
|
|
||||||
|
init(editor, json_viewer_div, properties, schema_str || [])
|
||||||
|
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
function init(editor, json_viewer_div, properties, start_value = []) {
|
||||||
|
let jsoneditor = new JSONEditor(
|
||||||
|
json_viewer_div[0], {
|
||||||
|
theme: 'bootstrap4',
|
||||||
|
schema: {
|
||||||
|
type: "array",
|
||||||
|
format: 'table',
|
||||||
|
title: ' ',
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
title: 'item',
|
||||||
|
properties: properties
|
||||||
|
},
|
||||||
|
},
|
||||||
|
disable_edit_json: true,
|
||||||
|
disable_properties: false,
|
||||||
|
disable_array_delete_all_rows: true,
|
||||||
|
disable_array_delete_last_row: true,
|
||||||
|
disable_array_reorder: true,
|
||||||
|
grid_columns: 3,
|
||||||
|
prompt_before_delete: false,
|
||||||
|
disable_collapse: true,
|
||||||
|
startval: start_value
|
||||||
|
})
|
||||||
|
jsoneditor.on('change', () => {
|
||||||
|
$(editor).val(JSON.stringify(jsoneditor.getValue()))
|
||||||
|
})
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/fields/keyvalue_field/script.js.gz
Normal file
BIN
staticfiles/admin/fields/keyvalue_field/script.js.gz
Normal file
Binary file not shown.
9
staticfiles/admin/fields/keyvalue_field/style.css
Normal file
9
staticfiles/admin/fields/keyvalue_field/style.css
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
.json-view-editor .row .form-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.json-view-editor .row .form-group label {
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/fields/keyvalue_field/style.css.gz
Normal file
BIN
staticfiles/admin/fields/keyvalue_field/style.css.gz
Normal file
Binary file not shown.
22
staticfiles/admin/fields/thousand_sep_field.js
Normal file
22
staticfiles/admin/fields/thousand_sep_field.js
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
function convertPersianToEnglish(value) {
|
||||||
|
const persianNumbers = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
|
||||||
|
const englishNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
|
||||||
|
|
||||||
|
for (let i = 0; i < persianNumbers.length; i++) {
|
||||||
|
value = value.replace(new RegExp(persianNumbers[i], 'g'), englishNumbers[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatNumber(input) {
|
||||||
|
let value = convertPersianToEnglish(input.value);
|
||||||
|
// Remove any existing thousand separators and non-digit characters
|
||||||
|
value = value.replace(/,/g, '').replace(/\D/g, '');
|
||||||
|
|
||||||
|
// Add thousand separators
|
||||||
|
value = value.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||||
|
|
||||||
|
// Update the input value
|
||||||
|
input.value = value;
|
||||||
|
}
|
||||||
BIN
staticfiles/admin/fields/thousand_sep_field.js.gz
Normal file
BIN
staticfiles/admin/fields/thousand_sep_field.js.gz
Normal file
Binary file not shown.
0
staticfiles/admin/fonts/Cantarell/Cantarell-Bold.ttf
Normal file
0
staticfiles/admin/fonts/Cantarell/Cantarell-Bold.ttf
Normal file
0
staticfiles/admin/fonts/Cantarell/Cantarell-Italic.ttf
Normal file
0
staticfiles/admin/fonts/Cantarell/Cantarell-Italic.ttf
Normal file
0
staticfiles/admin/fonts/Cantarell/Cantarell-Regular.ttf
Normal file
0
staticfiles/admin/fonts/Cantarell/Cantarell-Regular.ttf
Normal file
93
staticfiles/admin/fonts/Cantarell/OFL.txt
Normal file
93
staticfiles/admin/fonts/Cantarell/OFL.txt
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
Copyright 2009 The Cantarell Project Authors (https://github.com/davelab6/cantarell)
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
https://openfontlicense.org
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
BIN
staticfiles/admin/fonts/Cantarell/OFL.txt.gz
Normal file
BIN
staticfiles/admin/fonts/Cantarell/OFL.txt.gz
Normal file
Binary file not shown.
202
staticfiles/admin/fonts/LICENSE.txt
Normal file
202
staticfiles/admin/fonts/LICENSE.txt
Normal file
|
|
@ -0,0 +1,202 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
BIN
staticfiles/admin/fonts/LICENSE.txt.gz
Normal file
BIN
staticfiles/admin/fonts/LICENSE.txt.gz
Normal file
Binary file not shown.
3
staticfiles/admin/fonts/README.txt
Normal file
3
staticfiles/admin/fonts/README.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
Roboto webfont source: https://www.google.com/fonts/specimen/Roboto
|
||||||
|
WOFF files extracted using https://github.com/majodev/google-webfonts-helper
|
||||||
|
Weights used in this project: Light (300), Regular (400), Bold (700)
|
||||||
BIN
staticfiles/admin/fonts/README.txt.gz
Normal file
BIN
staticfiles/admin/fonts/README.txt.gz
Normal file
Binary file not shown.
BIN
staticfiles/admin/fonts/Roboto-Bold-webfont.woff
Normal file
BIN
staticfiles/admin/fonts/Roboto-Bold-webfont.woff
Normal file
Binary file not shown.
BIN
staticfiles/admin/fonts/Roboto-Light-webfont.woff
Normal file
BIN
staticfiles/admin/fonts/Roboto-Light-webfont.woff
Normal file
Binary file not shown.
BIN
staticfiles/admin/fonts/Roboto-Regular-webfont.woff
Normal file
BIN
staticfiles/admin/fonts/Roboto-Regular-webfont.woff
Normal file
Binary file not shown.
BIN
staticfiles/admin/fonts/Vazir.woff2
Normal file
BIN
staticfiles/admin/fonts/Vazir.woff2
Normal file
Binary file not shown.
9
staticfiles/admin/fonts/font-awesome-v6.5.2.css
Normal file
9
staticfiles/admin/fonts/font-awesome-v6.5.2.css
Normal file
File diff suppressed because one or more lines are too long
BIN
staticfiles/admin/fonts/font-awesome-v6.5.2.css.gz
Normal file
BIN
staticfiles/admin/fonts/font-awesome-v6.5.2.css.gz
Normal file
Binary file not shown.
BIN
staticfiles/admin/fonts/fontawesome-free-6.6.0-web.zip
Normal file
BIN
staticfiles/admin/fonts/fontawesome-free-6.6.0-web.zip
Normal file
Binary file not shown.
165
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/LICENSE.txt
Normal file
165
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/LICENSE.txt
Normal file
|
|
@ -0,0 +1,165 @@
|
||||||
|
Fonticons, Inc. (https://fontawesome.com)
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Font Awesome Free License
|
||||||
|
|
||||||
|
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
||||||
|
commercial projects, open source projects, or really almost whatever you want.
|
||||||
|
Full Font Awesome Free license: https://fontawesome.com/license/free.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
|
||||||
|
|
||||||
|
The Font Awesome Free download is licensed under a Creative Commons
|
||||||
|
Attribution 4.0 International License and applies to all icons packaged
|
||||||
|
as SVG and JS file types.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Fonts: SIL OFL 1.1 License
|
||||||
|
|
||||||
|
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||||
|
packaged as web and desktop font files.
|
||||||
|
|
||||||
|
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
|
||||||
|
with Reserved Font Name: "Font Awesome".
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
SIL OPEN FONT LICENSE
|
||||||
|
Version 1.1 - 26 February 2007
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting — in part or in whole — any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Code: MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
|
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||||
|
non-icon files.
|
||||||
|
|
||||||
|
Copyright 2024 Fonticons, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in the
|
||||||
|
Software without restriction, including without limitation the rights to use, copy,
|
||||||
|
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
and to permit persons to whom the Software is furnished to do so, subject to the
|
||||||
|
following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Attribution
|
||||||
|
|
||||||
|
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
|
||||||
|
Awesome Free files already contain embedded comments with sufficient
|
||||||
|
attribution, so you shouldn't need to do anything additional when using these
|
||||||
|
files normally.
|
||||||
|
|
||||||
|
We've kept attribution comments terse, so we ask that you do not actively work
|
||||||
|
to remove them from files, especially code. They're a great way for folks to
|
||||||
|
learn about Font Awesome.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Brand Icons
|
||||||
|
|
||||||
|
All brand icons are trademarks of their respective owners. The use of these
|
||||||
|
trademarks does not indicate endorsement of the trademark holder by Font
|
||||||
|
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
||||||
|
to represent the company, product, or service to which they refer.**
|
||||||
Binary file not shown.
7876
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/all.css
Normal file
7876
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/all.css
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
9
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/all.min.css
vendored
Normal file
9
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/all.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1600
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/brands.css
Normal file
1600
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/brands.css
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
6
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/brands.min.css
vendored
Normal file
6
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/brands.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
6215
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/fontawesome.css
vendored
Normal file
6215
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/fontawesome.css
vendored
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
9
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/fontawesome.min.css
vendored
Normal file
9
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/fontawesome.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2024 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
:root, :host {
|
||||||
|
--fa-style-family-classic: 'Font Awesome 6 Free';
|
||||||
|
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
|
||||||
|
|
||||||
|
.far,
|
||||||
|
.fa-regular {
|
||||||
|
font-weight: 400; }
|
||||||
Binary file not shown.
6
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/regular.min.css
vendored
Normal file
6
staticfiles/admin/fonts/fontawesome-free-6.6.0-web/css/regular.min.css
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2024 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
* Copyright 2024 Fonticons, Inc.
|
||||||
|
*/
|
||||||
|
:root, :host {
|
||||||
|
--fa-style-family-classic: 'Font Awesome 6 Free';
|
||||||
|
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 900;
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
|
||||||
|
|
||||||
|
.fas,
|
||||||
|
.fa-solid {
|
||||||
|
font-weight: 900; }
|
||||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue