update to the sales section
@ -1,4 +1,4 @@
|
||||
# Generated by Django 5.2.1 on 2025-06-12 14:22
|
||||
# Generated by Django 5.1.7 on 2025-06-22 17:22
|
||||
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
@ -7,90 +7,40 @@ from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
("inventory", "__first__"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="AnalysisCache",
|
||||
name='ChatLog',
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("prompt_hash", models.CharField(db_index=True, max_length=64)),
|
||||
(
|
||||
"dealer_id",
|
||||
models.IntegerField(blank=True, db_index=True, null=True),
|
||||
),
|
||||
("created_at", models.DateTimeField(default=django.utils.timezone.now)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("expires_at", models.DateTimeField(db_index=True)),
|
||||
("result", models.JSONField()),
|
||||
(
|
||||
"user",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('user_message', models.TextField()),
|
||||
('chatbot_response', models.TextField()),
|
||||
('timestamp', models.DateTimeField(auto_now_add=True, db_index=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name_plural": "Analysis caches",
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["prompt_hash", "dealer_id"],
|
||||
name="haikalbot_a_prompt__b98e1e_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["expires_at"], name="haikalbot_a_expires_e790cd_idx"
|
||||
),
|
||||
],
|
||||
'ordering': ['-timestamp'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ChatLog",
|
||||
name='AnalysisCache',
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("user_message", models.TextField()),
|
||||
("chatbot_response", models.TextField()),
|
||||
("timestamp", models.DateTimeField(auto_now_add=True, db_index=True)),
|
||||
(
|
||||
"dealer",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="chatlogs",
|
||||
to="inventory.dealer",
|
||||
),
|
||||
),
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('prompt_hash', models.CharField(db_index=True, max_length=64)),
|
||||
('dealer_id', models.IntegerField(blank=True, db_index=True, null=True)),
|
||||
('created_at', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('expires_at', models.DateTimeField(db_index=True)),
|
||||
('result', models.JSONField()),
|
||||
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
"ordering": ["-timestamp"],
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["dealer", "timestamp"],
|
||||
name="haikalbot_c_dealer__6f8d63_idx",
|
||||
)
|
||||
],
|
||||
'verbose_name_plural': 'Analysis caches',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
34
haikalbot/migrations/0002_initial.py
Normal file
@ -0,0 +1,34 @@
|
||||
# Generated by Django 5.1.7 on 2025-06-22 17:22
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('haikalbot', '0001_initial'),
|
||||
('inventory', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='chatlog',
|
||||
name='dealer',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='chatlogs', to='inventory.dealer'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='analysiscache',
|
||||
index=models.Index(fields=['prompt_hash', 'dealer_id'], name='haikalbot_a_prompt__b98e1e_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='analysiscache',
|
||||
index=models.Index(fields=['expires_at'], name='haikalbot_a_expires_e790cd_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chatlog',
|
||||
index=models.Index(fields=['dealer', 'timestamp'], name='haikalbot_c_dealer__6f8d63_idx'),
|
||||
),
|
||||
]
|
||||
@ -2475,15 +2475,23 @@ class SaleOrder(models.Model):
|
||||
|
||||
@property
|
||||
def items(self):
|
||||
if self.invoice.get_itemtxs_data():
|
||||
return self.invoice.get_itemtxs_data()[0]
|
||||
return []
|
||||
|
||||
# Check if an invoice is associated with this SaleOrder
|
||||
if self.invoice:
|
||||
# Check if get_itemtxs_data returns data before proceeding
|
||||
# You might want to handle what get_itemtxs_data returns if it can be empty
|
||||
item_data = self.invoice.get_itemtxs_data()
|
||||
if item_data:
|
||||
return item_data
|
||||
return [] # Return an empty list if no invoice or no item data
|
||||
|
||||
@property
|
||||
def cars(self):
|
||||
if self.items:
|
||||
return [x.item_model.car for x in self.items]
|
||||
return []
|
||||
# Check if self.items is not empty before trying to iterate
|
||||
if self.items.exists() if hasattr(self.items, 'exists') else self.items: # Handle both QuerySet and list
|
||||
# Ensure x is an *instance* of ItemTransactionModel
|
||||
# item_model should be a ForeignKey to your CarModel within ItemTransactionModel
|
||||
return [x.item_model.car for x in self.items if hasattr(x, 'item_model') and hasattr(x.item_model, 'car')]
|
||||
return [] # Return an empty list if no items or no associated cars
|
||||
|
||||
|
||||
class CustomGroup(models.Model):
|
||||
|
||||
@ -1114,7 +1114,7 @@ urlpatterns = [
|
||||
views.PurchaseOrderMarkAsVoidView.as_view(),
|
||||
name="po-action-mark-as-void",
|
||||
),
|
||||
path('inv/dashboard',views.inventory_dash,name='inv_dash')
|
||||
|
||||
]
|
||||
|
||||
handler404 = "inventory.views.custom_page_not_found_view"
|
||||
|
||||
@ -1245,6 +1245,124 @@ def inventory_stats_view(request):
|
||||
return render(request, "inventory/inventory_stats.html", {"inventory": result})
|
||||
|
||||
|
||||
|
||||
# @login_required
|
||||
# def inventory_stats_view(request):
|
||||
# """
|
||||
# Handle the inventory stats view for a dealer, displaying detailed information
|
||||
# about the cars, including counts grouped by make, model, and trim.
|
||||
|
||||
# The function fetches all cars associated with the authenticated dealer, calculates
|
||||
# the inventory statistics (e.g., total cars, reserved cars, and cars categorized
|
||||
# by make, model, and trim levels), and prepares the data to be rendered in a
|
||||
# template.
|
||||
|
||||
# :param request: The HTTP request object from the client.
|
||||
# :type request: HttpRequest
|
||||
# :return: An HTTP response containing structured inventory data rendered in the
|
||||
# "inventory/inventory_stats.html" template.
|
||||
# :rtype: HttpResponse
|
||||
# """
|
||||
# dealer = get_user_type(request)
|
||||
|
||||
# # Base queryset for cars belonging to the dealer
|
||||
# # Ordering here is important for consistent pagination results
|
||||
# cars = models.Car.objects.filter(dealer=dealer).order_by(
|
||||
# 'id_car_make__name', 'id_car_model__name', 'id_car_trim__name'
|
||||
# ) # Added ordering for consistent pagination
|
||||
|
||||
# # Count for total, reserved, showroom, and unreserved cars
|
||||
# total_cars = cars.count()
|
||||
# reserved_cars = models.CarReservation.objects.filter(car__dealer=dealer).count() # Filter reservations by dealer's cars
|
||||
|
||||
# # We need to process the cars into the inventory structure FIRST,
|
||||
# # then paginate the list of makes.
|
||||
# inventory_data = {}
|
||||
# for car in cars:
|
||||
# make = car.id_car_make
|
||||
# if make.id_car_make not in inventory_data:
|
||||
# inventory_data[make.id_car_make] = {
|
||||
# "make_id": make.id_car_make,
|
||||
# "slug": make.slug,
|
||||
# "make_name": make.get_local_name(),
|
||||
# "total_cars": 0,
|
||||
# "models": {},
|
||||
# }
|
||||
# inventory_data[make.id_car_make]["total_cars"] += 1
|
||||
|
||||
# model = car.id_car_model
|
||||
# # Ensure model exists before trying to access its attributes
|
||||
# if model:
|
||||
# if model.id_car_model not in inventory_data[make.id_car_make]["models"]:
|
||||
# inventory_data[make.id_car_make]["models"][model.id_car_model] = {
|
||||
# "model_id": model.id_car_model,
|
||||
# "slug": model.slug,
|
||||
# "model_name": model.get_local_name(),
|
||||
# "total_cars": 0,
|
||||
# "trims": {},
|
||||
# }
|
||||
# inventory_data[make.id_car_make]["models"][model.id_car_model]["total_cars"] += 1
|
||||
|
||||
# trim = car.id_car_trim
|
||||
# if trim: # Ensure trim exists
|
||||
# if trim.id_car_trim not in inventory_data[make.id_car_make]["models"][model.id_car_model]["trims"]:
|
||||
# inventory_data[make.id_car_make]["models"][model.id_car_model]["trims"][
|
||||
# trim.id_car_trim
|
||||
# ] = {
|
||||
# "trim_id": trim.id_car_trim,
|
||||
# "slug": trim.slug,
|
||||
# "trim_name": trim.name,
|
||||
# "total_cars": 0,
|
||||
# }
|
||||
# inventory_data[make.id_car_make]["models"][model.id_car_model]["trims"][
|
||||
# trim.id_car_trim
|
||||
# ]["total_cars"] += 1
|
||||
|
||||
# # Convert the inventory dictionary into a list of makes for pagination
|
||||
# # Sort the makes by name for consistent pagination
|
||||
# all_makes = sorted(inventory_data.values(), key=lambda x: x['make_name'])
|
||||
|
||||
# # --- Pagination Logic ---
|
||||
# items_per_page = 10 # You can adjust this number
|
||||
# paginator = Paginator(all_makes, items_per_page)
|
||||
|
||||
# page_number = request.GET.get('page')
|
||||
# try:
|
||||
# page_obj = paginator.get_page(page_number)
|
||||
# except PageNotAnInteger:
|
||||
# page_obj = paginator.get_page(1)
|
||||
# except EmptyPage:
|
||||
# page_obj = paginator.get_page(paginator.num_pages)
|
||||
|
||||
# # The 'makes' list for the current page
|
||||
# # Ensure models and trims are also converted to lists within each make on the current page
|
||||
# paginated_makes_list = []
|
||||
# for make_data in page_obj.object_list:
|
||||
# make_data_copy = make_data.copy() # Avoid modifying the original dict during iteration
|
||||
# make_data_copy['models'] = []
|
||||
# for model_id, model_data in make_data['models'].items():
|
||||
# model_data_copy = model_data.copy()
|
||||
# model_data_copy['trims'] = list(model_data['trims'].values())
|
||||
# make_data_copy['models'].append(model_data_copy)
|
||||
# paginated_makes_list.append(make_data_copy)
|
||||
|
||||
|
||||
# result = {
|
||||
# "total_cars": total_cars,
|
||||
# "reserved_cars": reserved_cars,
|
||||
# "makes": paginated_makes_list, # This is now the paginated list of makes
|
||||
# }
|
||||
|
||||
# # print(result["makes"]) # For debugging
|
||||
# context = {
|
||||
# "inventory": result,
|
||||
# "page_obj": page_obj, # Pass the page_obj to the template
|
||||
# "is_paginated": page_obj.has_other_pages(), # To use in template for conditional rendering
|
||||
# }
|
||||
# return render(request, "inventory/inventory_stats.html", context)
|
||||
|
||||
|
||||
|
||||
class CarDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
||||
"""
|
||||
Provides a detailed view of a single car instance.
|
||||
@ -2897,7 +3015,7 @@ class OrganizationListView(LoginRequiredMixin, ListView):
|
||||
model = models.Organization
|
||||
template_name = "organizations/organization_list.html"
|
||||
context_object_name = "organizations"
|
||||
paginate_by = 30
|
||||
paginate_by = 1
|
||||
|
||||
def get_queryset(self):
|
||||
query = self.request.GET.get("q")
|
||||
@ -4270,7 +4388,7 @@ class InvoiceListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
model = InvoiceModel
|
||||
template_name = "sales/invoices/invoice_list.html"
|
||||
context_object_name = "invoices"
|
||||
paginate_by = 30
|
||||
paginate_by = 20
|
||||
permission_required = ["django_ledger.view_invoicemodel"]
|
||||
|
||||
def get_queryset(self):
|
||||
@ -9092,7 +9210,7 @@ class PurchaseOrderDetailView(PurchaseOrderModelDetailViewBase):
|
||||
class PurchaseOrderListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
model = PurchaseOrderModel
|
||||
context_object_name = "purchase_orders"
|
||||
paginate_by = 30
|
||||
paginate_by = 20
|
||||
template_name = "purchase_orders/po_list.html"
|
||||
permission_required = ["inventory.view_carfinance"]
|
||||
|
||||
@ -9370,8 +9488,20 @@ def view_items_inventory(request, entity_slug, po_pk):
|
||||
dealer = get_user_type(request)
|
||||
po = PurchaseOrderModel.objects.get(pk=po_pk)
|
||||
items = po.get_itemtxs_data()[0]
|
||||
items_per_page = 30
|
||||
paginator = Paginator(items, items_per_page)
|
||||
|
||||
page_number = request.GET.get('page')
|
||||
try:
|
||||
page_obj = paginator.get_page(page_number)
|
||||
except PageNotAnInteger:
|
||||
# If page is not an integer, deliver first page.
|
||||
page_obj = paginator.get_page(1)
|
||||
except EmptyPage:
|
||||
# If page is out of range (e.g. 9999), deliver last page of results.
|
||||
page_obj = paginator.get_page(paginator.num_pages)
|
||||
return render(
|
||||
request, "purchase_orders/po_upload_cars.html", {"po": po, "items": items}
|
||||
request, "purchase_orders/po_upload_cars.html", {"po": po, "items": items,"page_obj":page_obj}
|
||||
)
|
||||
|
||||
|
||||
@ -9535,9 +9665,3 @@ class InventoryListView(InventoryListViewBase):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
def inventory_dash(request):
|
||||
cars=models.Car.objects.all()
|
||||
context={
|
||||
'cars':cars
|
||||
}
|
||||
return render(request,'inv_dash.html',context)
|
||||
125
static/images/car-exterior.svg
Normal file
@ -0,0 +1,125 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M2655 2513 c-225 -28 -366 -68 -545 -158 -69 -34 -131 -60 -138 -58
|
||||
-7 3 -30 -11 -51 -30 -86 -77 -166 -107 -346 -127 -290 -31 -427 -92 -557
|
||||
-247 -98 -118 -99 -118 -92 -194 5 -50 3 -73 -10 -97 -34 -65 -10 -95 92 -113
|
||||
84 -16 91 -24 30 -38 -67 -15 -83 -24 -74 -46 6 -17 8 -17 26 0 11 10 41 23
|
||||
67 30 48 12 84 8 208 -27 l40 -11 -70 -13 c-38 -7 -94 -16 -123 -20 -29 -4
|
||||
-55 -10 -57 -14 -3 -5 26 -17 63 -29 303 -92 725 -112 1187 -56 148 18 204 34
|
||||
269 78 44 30 88 44 321 100 380 92 698 156 838 167 173 14 257 41 257 80 0 11
|
||||
-6 20 -13 20 -11 0 -10 10 3 51 14 40 25 55 48 64 69 29 88 184 37 310 -70
|
||||
178 -83 191 -212 206 -61 7 -111 21 -163 44 -140 62 -316 106 -500 125 -89 9
|
||||
-469 11 -535 3z m585 -27 c185 -25 335 -68 456 -129 l47 -24 -38 -7 c-22 -4
|
||||
-51 -14 -65 -21 -14 -7 -117 -38 -230 -70 -502 -140 -543 -152 -537 -168 2 -7
|
||||
30 -23 63 -36 l59 -23 105 22 c58 12 138 30 178 41 40 11 81 19 90 17 9 -2
|
||||
-28 -14 -83 -27 -55 -12 -181 -43 -280 -68 -99 -25 -191 -46 -205 -47 -14 -1
|
||||
-27 -3 -30 -6 -3 -3 -33 -17 -68 -32 l-63 -27 -47 49 c-87 90 -157 88 -288 -6
|
||||
l-77 -55 35 47 c71 96 193 143 286 111 50 -18 53 -14 10 13 -22 13 -51 20 -84
|
||||
20 -100 0 -180 -45 -306 -171 -72 -73 -82 -79 -160 -104 -86 -27 -286 -65
|
||||
-343 -65 -19 0 -36 -4 -39 -9 -10 -16 243 13 383 45 35 8 66 13 68 10 9 -8
|
||||
-65 -45 -132 -66 -93 -29 -114 -40 -121 -62 -4 -14 -9 -16 -24 -8 -11 6 -114
|
||||
10 -247 10 -245 0 -394 15 -503 49 -110 34 -131 61 -89 111 19 22 22 23 30 7
|
||||
13 -22 29 -22 29 1 0 9 20 38 43 63 23 26 59 67 80 93 47 57 112 91 231 121
|
||||
89 22 226 42 226 32 0 -2 -47 -21 -105 -42 -98 -35 -287 -124 -310 -147 -5 -5
|
||||
46 18 115 51 120 57 322 138 412 164 33 10 105 11 318 4 151 -4 325 -5 387 -2
|
||||
l112 7 53 64 c29 35 86 91 127 126 70 59 72 62 50 71 -13 5 -121 10 -241 11
|
||||
l-216 1 61 17 c97 28 247 40 394 32 73 -4 130 -10 127 -15 -2 -5 12 -1 32 7
|
||||
85 35 168 40 324 20z m706 -184 c35 -20 -8 -22 -96 -5 -51 9 -84 20 -75 23 22
|
||||
8 149 -6 171 -18z m-64 -24 c35 -10 143 -93 159 -122 4 -6 1 -32 -6 -58 -6
|
||||
-26 -8 -53 -4 -60 5 -8 10 -3 14 15 9 36 21 34 29 -4 14 -71 -7 -154 -46 -187
|
||||
-14 -11 -16 -5 -16 62 -1 82 -15 121 -65 173 -89 94 -184 16 -237 -194 -6 -24
|
||||
-15 -43 -20 -43 -5 0 -7 -8 -3 -17 6 -17 5 -17 -14 0 -12 10 -48 29 -80 43
|
||||
-32 13 -49 24 -37 24 11 0 43 -11 70 -25 27 -14 50 -25 51 -25 1 0 6 22 12 49
|
||||
25 117 99 229 167 251 41 14 69 6 108 -29 l30 -26 -15 25 c-9 14 -31 33 -50
|
||||
42 -50 25 -94 10 -171 -60 l-64 -58 -104 -18 c-136 -23 -598 -120 -717 -150
|
||||
-63 -16 -93 -20 -94 -12 0 7 -2 7 -6 -1 -2 -7 -23 -18 -45 -23 -38 -11 -40
|
||||
-13 -34 -43 4 -18 9 -71 13 -119 3 -49 7 -88 9 -88 2 0 21 6 41 14 21 8 92 29
|
||||
158 46 112 29 259 75 433 135 83 28 104 30 147 11 l30 -13 -70 -20 c-38 -12
|
||||
-164 -49 -280 -83 -281 -82 -476 -150 -468 -163 4 -6 0 -8 -10 -4 -9 3 -18 1
|
||||
-20 -6 -12 -33 -15 7 -6 78 11 82 7 146 -14 222 -6 23 -8 45 -5 48 23 23 359
|
||||
112 698 185 289 62 363 88 434 151 67 58 20 74 -128 43 -84 -17 -115 -15 -76
|
||||
6 70 37 224 52 302 28z m-2027 -98 c-3 -5 -14 -10 -23 -10 -15 0 -15 2 -2 10
|
||||
20 13 33 13 25 0z m393 -17 c-15 -2 -42 -2 -60 0 -18 2 -6 4 27 4 33 0 48 -2
|
||||
33 -4z m1440 -148 c-6 -14 -19 -25 -30 -25 -25 0 -23 14 5 33 32 23 38 21 25
|
||||
-8z m228 -7 l19 -21 -28 18 c-15 10 -38 15 -52 13 -13 -3 -22 -1 -19 3 10 17
|
||||
61 9 80 -13z m-59 -50 c-2 -13 -4 -5 -4 17 -1 22 1 32 4 23 2 -10 2 -28 0 -40z
|
||||
m-2707 39 c0 -2 -15 -16 -32 -33 l-33 -29 29 33 c28 30 36 37 36 29z m2801
|
||||
-56 c6 -21 10 -71 8 -112 -4 -62 -9 -81 -34 -119 -44 -65 -96 -68 -134 -6 -24
|
||||
39 -27 52 -7 34 8 -7 13 -17 13 -21 -1 -5 11 -18 26 -30 26 -20 30 -20 54 -7
|
||||
15 9 36 30 46 48 l19 32 -43 41 -44 41 41 -31 c23 -17 45 -31 48 -31 8 0 1
|
||||
164 -8 179 -5 8 -19 -3 -42 -34 -19 -25 -37 -45 -41 -45 -4 0 16 31 60 88 16
|
||||
20 26 14 38 -27z m-136 -2 c9 -17 14 -33 11 -36 -3 -3 -10 7 -16 22 -6 15 -13
|
||||
32 -16 36 -3 5 -3 9 0 9 3 0 13 -14 21 -31z m-11 -51 c6 -4 18 -5 26 -2 11 4
|
||||
12 2 4 -6 -20 -20 -54 6 -53 38 2 27 2 27 6 2 3 -14 10 -28 17 -32z m-1549
|
||||
-69 c-44 -83 -62 -157 -70 -289 -3 -57 -7 -106 -9 -108 -13 -13 -165 -22 -371
|
||||
-22 -216 0 -243 2 -270 19 -35 21 -151 149 -143 157 14 13 65 -14 131 -68 l72
|
||||
-60 115 5 c103 5 171 17 193 36 4 4 -8 27 -25 52 l-33 44 37 -31 c20 -18 50
|
||||
-40 67 -50 39 -23 39 -29 1 -43 -16 -5 -30 -12 -30 -15 0 -8 94 5 104 15 5 4
|
||||
-18 45 -54 94 -34 48 -58 90 -54 95 5 4 44 22 87 40 44 18 86 43 97 58 19 23
|
||||
72 62 85 62 3 0 -2 -14 -10 -31 -21 -39 -55 -173 -55 -213 0 -52 17 -16 44 92
|
||||
25 101 58 174 98 214 32 32 30 16 -7 -53z m263 47 c15 -8 36 -29 46 -48 l20
|
||||
-33 -35 37 c-36 38 -70 52 -110 46 -26 -3 -26 -3 -14 -123 9 -98 -6 -74 -20
|
||||
31 -10 75 -9 86 4 94 24 14 79 12 109 -4z m-288 -9 c0 -2 -10 -12 -22 -23
|
||||
l-23 -19 19 23 c18 21 26 27 26 19z m1590 -64 c-11 -17 -11 -17 -6 0 3 10 6
|
||||
24 7 30 0 9 2 9 5 0 3 -7 0 -20 -6 -30z m-1334 -49 c-29 -63 -46 -70 -20 -8 9
|
||||
21 21 50 26 64 6 14 12 20 15 13 3 -7 -7 -38 -21 -69z m1251 44 c-3 -7 -5 -2
|
||||
-5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m30 -20 c-3 -8 -6 -5 -6 6 -1 11 2 17
|
||||
5 13 3 -3 4 -12 1 -19z m90 -45 c-3 -10 -5 -2 -5 17 0 19 2 27 5 18 2 -10 2
|
||||
-26 0 -35z m-1260 15 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z
|
||||
m-228 -42 c42 -44 21 -48 -28 -6 -26 22 -37 26 -43 17 -10 -15 -11 4 -2 27 8
|
||||
20 27 10 73 -38z m239 -33 c-2 -57 -2 -57 -5 -10 -2 26 -7 47 -11 47 -4 0 -25
|
||||
-12 -47 -25 -22 -14 -49 -25 -60 -25 -22 1 90 70 113 70 8 0 11 -17 10 -57z
|
||||
m-321 -20 c-3 -10 -5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z m1333 27
|
||||
c-8 -5 -24 -10 -35 -10 -17 0 -17 2 -5 10 8 5 24 10 35 10 17 0 17 -2 5 -10z
|
||||
m-2646 -79 c5 -7 15 -10 24 -6 10 3 4 -7 -13 -25 l-29 -30 -20 20 c-20 19 -20
|
||||
21 -3 49 9 16 17 37 18 48 1 10 4 4 8 -13 4 -17 11 -36 15 -43z m1484 35 c-2
|
||||
-13 -10 -21 -23 -21 -23 0 -33 34 -14 45 20 13 40 -1 37 -24z m-1337 -36 c42
|
||||
-19 95 -33 154 -41 109 -14 115 -15 115 -30 0 -8 -23 -10 -82 -5 -108 10 -160
|
||||
21 -231 53 -46 21 -55 28 -46 39 15 19 17 18 90 -16z m1255 22 c-3 -5 -23 -17
|
||||
-46 -27 -46 -21 -48 -32 -19 -95 l21 -45 33 65 c40 76 44 70 13 -19 l-22 -63
|
||||
23 -19 c13 -10 18 -19 12 -19 -22 0 -87 76 -99 116 -20 68 -17 78 31 96 51 19
|
||||
60 21 53 10z m165 -39 c27 -16 49 -31 49 -35 0 -14 -14 -8 -70 27 -65 41 -49
|
||||
47 21 8z m56 -5 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-127
|
||||
-24 c0 -3 -4 -3 -9 1 -5 3 -11 -29 -13 -74 l-3 -79 26 13 c35 18 52 41 43 57
|
||||
-5 10 -4 10 6 1 11 -10 10 -16 -6 -34 -24 -26 -67 -49 -91 -48 -10 0 -13 3 -5
|
||||
6 8 3 12 32 12 94 0 87 1 89 20 79 11 -6 20 -13 20 -16z m-1440 -13 c0 -10
|
||||
-25 -21 -48 -21 -12 1 -10 5 8 15 29 17 40 18 40 6z m1295 -158 c76 -43 162
|
||||
-24 228 50 20 22 25 25 17 10 -15 -33 -97 -92 -137 -99 -72 -14 -162 47 -198
|
||||
133 -26 62 -16 57 18 -8 24 -47 43 -69 72 -86z m266 94 c-10 -9 -11 -8 -5 6 3
|
||||
10 9 15 12 12 3 -3 0 -11 -7 -18z"/>
|
||||
<path d="M3015 2457 c-114 -30 -189 -89 -276 -218 l-60 -89 61 0 c65 0 80 -13
|
||||
28 -24 -18 -3 -136 -15 -263 -26 -388 -34 -717 -111 -929 -217 l-68 -34 -127
|
||||
16 c-69 9 -157 23 -194 31 -72 17 -101 13 -45 -5 29 -9 266 -49 308 -52 28 -1
|
||||
-124 -69 -156 -69 -42 0 -193 29 -216 41 -14 7 -18 6 -18 -5 0 -20 79 -43 195
|
||||
-56 50 -5 97 -10 105 -10 9 0 45 21 80 47 117 85 385 180 674 239 190 38 229
|
||||
43 439 46 178 3 198 5 194 20 -7 24 58 30 80 6 20 -22 36 -13 29 17 -7 27 0
|
||||
30 79 41 28 3 68 14 90 24 22 10 87 28 145 40 155 32 324 79 359 101 45 27 39
|
||||
46 -22 75 -134 61 -376 91 -492 61z m-37 -244 c-10 -2 -28 -2 -40 0 -13 2 -5
|
||||
4 17 4 22 1 32 -1 23 -4z"/>
|
||||
<path d="M2726 2328 c-45 -46 -100 -104 -122 -130 l-41 -48 46 0 c44 0 47 2
|
||||
70 45 13 24 54 83 92 130 90 112 63 114 -45 3z"/>
|
||||
<path d="M2697 2037 c-41 -13 -57 -23 -55 -34 4 -23 32 -37 54 -28 17 7 15 9
|
||||
-11 15 -30 8 -30 8 7 9 20 0 43 4 51 7 10 3 17 -2 20 -13 3 -10 5 -1 6 19 0
|
||||
20 -2 38 -6 41 -5 2 -34 -5 -66 -16z"/>
|
||||
<path d="M2600 1982 c0 -5 11 -19 25 -32 28 -26 33 -16 9 18 -15 22 -34 30
|
||||
-34 14z"/>
|
||||
<path d="M1936 1934 c-100 -20 -197 -54 -190 -66 4 -7 2 -8 -5 -4 -11 7 -136
|
||||
-62 -128 -71 3 -2 22 1 44 7 21 6 85 13 143 17 112 6 133 13 195 68 46 40 40
|
||||
42 -70 19 -42 -9 -78 -14 -81 -11 -7 7 161 39 189 35 27 -3 25 -5 -40 -60
|
||||
l-67 -58 -76 0 c-41 -1 -110 -7 -153 -15 -44 -7 -84 -12 -91 -9 -7 3 -23 -7
|
||||
-36 -22 l-25 -27 110 7 c156 9 232 23 291 51 55 27 159 128 149 145 -8 13 -75
|
||||
11 -159 -6z m-109 -50 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z
|
||||
m55 -29 c3 -14 1 -25 -3 -25 -5 0 -9 11 -9 25 0 14 2 25 4 25 2 0 6 -11 8 -25z"/>
|
||||
<path d="M1215 1829 c-12 -19 5 -23 22 -6 16 16 16 17 1 17 -9 0 -20 -5 -23
|
||||
-11z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.4 KiB |
994
static/images/car-interior.svg
Normal file
@ -0,0 +1,994 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M53 5046 l-53 -75 0 -296 0 -296 70 103 c102 151 96 145 118 125 25
|
||||
-22 25 -22 46 18 23 42 29 43 44 10 15 -32 15 -35 0 -35 -23 -1 -53 -34 -97
|
||||
-110 -25 -41 -71 -115 -103 -165 -49 -75 -58 -95 -54 -122 3 -22 1 -32 -7 -30
|
||||
-7 1 -13 -10 -15 -24 -2 -19 4 -31 22 -43 33 -21 33 -50 0 -93 -20 -26 -24
|
||||
-42 -22 -76 l3 -44 130 19 c161 23 230 42 254 71 49 58 298 397 266 362 -19
|
||||
-22 -59 -70 -88 -107 -33 -44 -59 -68 -72 -68 -14 0 -16 -3 -8 -8 9 -6 -4 -30
|
||||
-47 -88 -52 -67 -65 -79 -88 -77 -23 2 -24 1 -7 -6 19 -8 18 -10 -9 -20 -34
|
||||
-14 -306 -55 -313 -47 -10 9 119 196 131 189 6 -3 8 -2 3 2 -13 15 66 117 253
|
||||
330 130 148 520 555 597 624 l57 51 -100 0 -100 0 -105 -127 c-211 -256 -564
|
||||
-715 -596 -776 l-15 -30 -21 22 -22 22 69 132 c138 265 217 382 408 601 57 65
|
||||
109 127 117 137 13 19 6 19 -290 19 l-304 0 -52 -74z m51 -852 c19 -7 21 -30
|
||||
4 -37 -7 -2 -21 0 -31 5 -15 7 -16 12 -6 24 13 16 12 16 33 8z"/>
|
||||
<path d="M1680 5088 c-380 -266 -722 -564 -983 -857 l-74 -84 19 -34 c13 -21
|
||||
19 -45 16 -67 -2 -19 0 -32 4 -30 21 13 3 -19 -42 -78 l-50 -65 -183 -6 c-100
|
||||
-4 -225 -13 -277 -22 -52 -8 -98 -15 -102 -15 -11 0 -10 -50 1 -50 4 0 66 9
|
||||
137 21 146 23 440 35 524 22 l55 -9 -33 -21 c-42 -26 -222 -85 -484 -158 -115
|
||||
-32 -208 -63 -208 -68 0 -5 7 -6 16 -3 9 4 96 29 193 57 97 28 254 76 349 106
|
||||
181 59 201 61 188 10 -3 -13 -24 -46 -48 -73 l-42 -49 43 40 c67 63 94 130 65
|
||||
160 -16 15 -12 21 48 83 35 37 89 97 118 134 43 55 60 69 89 74 54 9 60 12 21
|
||||
13 l-34 1 64 66 c215 219 568 454 1199 796 l244 133 -148 3 -147 3 -117 -62
|
||||
c-64 -34 -126 -69 -138 -77 -13 -8 -23 -10 -23 -5 0 6 57 40 128 76 l127 66
|
||||
-235 0 -235 0 -45 -31z m145 -177 c3 -5 2 -12 -3 -15 -5 -3 -9 1 -9 9 0 17 3
|
||||
19 12 6z m-1114 -925 c-18 -25 -43 -69 -56 -98 -14 -29 -25 -47 -25 -40 0 6
|
||||
-9 12 -20 12 -11 0 -20 3 -20 7 0 13 34 43 49 43 14 0 14 2 1 10 -13 9 -7 14
|
||||
13 11 4 0 6 3 5 8 -4 11 72 104 79 97 3 -2 -9 -25 -26 -50z"/>
|
||||
<path d="M3289 5107 c16 -21 63 -47 83 -47 7 1 -3 8 -22 16 -19 8 -43 23 -55
|
||||
32 -19 16 -19 16 -6 -1z"/>
|
||||
<path d="M4134 5103 c-29 -47 -345 -438 -453 -563 -123 -140 -228 -244 -266
|
||||
-262 -16 -7 -39 3 -120 58 -169 113 -357 192 -552 231 -126 25 -407 25 -523
|
||||
-1 -197 -42 -384 -118 -530 -213 -148 -97 -366 -286 -353 -306 3 -5 1 -7 -5
|
||||
-3 -6 3 -13 2 -16 -3 -6 -9 -46 -3 -46 7 0 3 17 24 37 47 23 23 15 18 -17 -12
|
||||
-61 -58 -103 -74 -54 -20 17 17 36 41 44 52 l15 20 -24 -20 c-13 -11 -44 -47
|
||||
-69 -80 -25 -33 -35 -50 -21 -38 13 12 41 25 62 28 34 7 45 3 91 -29 65 -44
|
||||
100 -88 83 -105 -6 -6 -36 -62 -67 -124 l-55 -112 -104 -55 c-135 -71 -200
|
||||
-131 -247 -223 -19 -40 -32 -61 -28 -47 15 58 70 144 119 185 28 24 96 68 150
|
||||
97 l100 53 57 115 c37 74 56 123 53 137 -3 12 -26 37 -52 54 l-47 32 -38 -44
|
||||
c-98 -111 -202 -263 -278 -407 -30 -56 -103 -132 -116 -120 -8 9 25 98 71 190
|
||||
46 93 134 234 193 308 l36 45 -35 -33 c-20 -18 -39 -29 -43 -25 -4 5 -6 3 -4
|
||||
-2 3 -11 -210 -214 -355 -338 -111 -95 -235 -179 -249 -170 -7 3 -8 1 -4 -5 4
|
||||
-7 2 -12 -3 -12 -20 0 -26 -3 -38 -19 -7 -9 -13 -12 -13 -7 0 6 -7 1 -16 -10
|
||||
-8 -10 -13 -12 -9 -4 4 8 -1 6 -9 -4 -9 -11 -16 -16 -16 -11 0 5 -7 0 -15 -11
|
||||
-8 -10 -15 -16 -15 -12 0 4 -12 -4 -26 -17 -31 -29 -210 -119 -272 -136 -42
|
||||
-12 -43 -13 -40 -52 3 -40 3 -41 58 -52 84 -17 123 -41 198 -119 93 -98 193
|
||||
-251 259 -397 30 -66 53 -123 51 -125 -2 -1 -15 -8 -28 -13 -23 -9 -22 -10 10
|
||||
-8 l35 2 51 -152 c51 -154 84 -281 105 -408 19 -115 -3 -443 -35 -520 -13 -29
|
||||
-26 -35 -282 -120 -148 -49 -274 -91 -280 -93 -6 -2 -14 17 -17 43 -6 44 -84
|
||||
290 -111 350 -12 26 -14 -9 -15 -264 l-2 -294 67 -241 c37 -132 67 -261 67
|
||||
-286 0 -31 3 -38 8 -25 4 11 8 18 8 15 1 -3 32 -82 70 -175 l69 -170 166 -3
|
||||
c91 -1 166 -1 166 1 0 2 -21 39 -46 83 -43 74 -45 82 -40 134 4 44 -2 84 -35
|
||||
206 -23 83 -44 157 -48 163 -5 7 -17 8 -39 2 -17 -5 -34 -6 -36 -2 -9 13 -54
|
||||
206 -60 251 -4 33 0 26 12 -25 10 -38 20 -64 23 -58 2 7 57 28 121 47 65 19
|
||||
122 37 127 40 9 6 0 63 -12 83 -4 6 -19 9 -34 7 -28 -4 -28 -4 2 6 24 8 32 7
|
||||
41 -5 13 -17 69 -223 63 -228 -13 -11 -253 -87 -258 -82 -3 3 -15 32 -28 63
|
||||
-12 31 -22 52 -22 45 -1 -15 37 -115 48 -126 4 -4 65 13 135 39 70 25 129 44
|
||||
131 42 8 -9 76 -328 73 -344 -2 -12 -31 -30 -87 -54 -69 -29 -87 -41 -97 -65
|
||||
-16 -39 -10 -65 39 -153 l41 -72 335 0 335 0 -30 32 c-17 18 -68 76 -113 128
|
||||
-75 86 -72 83 40 -33 l124 -127 301 -3 302 -2 -171 178 c-93 98 -174 180 -178
|
||||
183 -12 7 -11 2 6 -39 8 -20 15 -49 15 -64 l0 -27 -41 39 c-93 90 -252 270
|
||||
-368 420 -79 102 -191 227 -309 346 -101 103 -180 189 -175 192 4 3 71 26 148
|
||||
52 77 26 141 48 142 49 1 1 -11 22 -27 46 -17 25 -30 48 -30 53 0 11 48 9 55
|
||||
-3 3 -5 11 -10 18 -10 6 0 -20 33 -59 72 -128 131 -171 212 -209 393 -49 236
|
||||
-166 549 -375 1004 -64 138 -72 185 -38 221 74 78 417 336 513 385 43 23 46
|
||||
23 25 5 -14 -12 -75 -57 -137 -100 -185 -129 -380 -296 -388 -330 -8 -38 -9
|
||||
-34 102 -299 118 -281 109 -265 141 -257 15 3 55 12 89 20 l61 13 12 -78 c33
|
||||
-228 118 -478 256 -749 77 -152 117 -210 168 -241 19 -12 25 -19 15 -19 -9 0
|
||||
-19 -8 -22 -19 -2 -10 -22 -26 -43 -35 l-39 -17 80 -87 c152 -166 301 -304
|
||||
469 -435 175 -136 382 -314 451 -388 l40 -42 -65 45 c-36 25 -130 89 -210 143
|
||||
-161 108 -223 155 -385 290 -142 118 -235 188 -235 178 0 -4 17 -19 36 -33 61
|
||||
-43 72 -58 69 -97 -4 -33 -15 -60 -15 -34 0 7 -5 9 -10 6 -5 -3 -10 1 -10 10
|
||||
0 8 -6 18 -14 21 -8 3 -16 14 -19 24 -4 16 -12 18 -58 14 -63 -6 -122 3 -114
|
||||
17 4 5 4 9 1 9 -3 0 -14 -18 -25 -40 l-19 -40 36 -44 37 -45 25 24 c14 13 41
|
||||
28 60 33 19 6 28 11 20 11 -13 1 -13 2 0 11 8 5 17 6 20 1 3 -4 19 -16 35 -28
|
||||
23 -16 35 -19 50 -11 19 9 19 8 3 -5 -17 -13 -17 -15 0 -31 10 -9 21 -14 24
|
||||
-11 3 3 13 -5 24 -17 10 -12 13 -18 7 -14 -31 18 -7 -8 65 -71 43 -37 190
|
||||
-169 327 -293 136 -124 269 -244 296 -268 l48 -43 208 104 c592 293 1081 445
|
||||
1318 408 70 -10 194 -63 199 -84 2 -7 8 -34 15 -62 6 -27 38 -105 71 -172 53
|
||||
-109 57 -124 42 -132 -9 -4 -75 -28 -147 -51 -139 -46 -365 -132 -455 -174
|
||||
l-55 -25 79 0 c74 -1 87 2 205 53 181 77 401 158 415 153 7 -3 41 -51 76 -106
|
||||
35 -56 67 -101 73 -101 14 0 6 16 -75 140 -139 216 -245 437 -220 462 9 9 17
|
||||
7 32 -7 11 -10 17 -22 14 -27 -17 -27 19 -96 163 -311 85 -127 160 -238 167
|
||||
-245 9 -9 65 -12 236 -10 l223 3 -204 191 c-268 252 -297 276 -469 399 -245
|
||||
176 -273 202 -320 298 -22 46 -40 88 -40 93 1 5 18 -27 40 -71 43 -90 73 -123
|
||||
180 -204 89 -68 128 -92 217 -135 59 -29 103 -68 342 -305 151 -149 279 -271
|
||||
284 -271 6 0 -77 89 -184 198 -281 285 -341 361 -440 553 -92 180 -126 232
|
||||
-74 115 19 -44 34 -81 32 -82 -2 -2 -38 66 -81 151 -42 85 -79 155 -82 155 -3
|
||||
0 -2 -5 2 -12 4 -7 3 -8 -5 -4 -6 4 -9 11 -6 16 3 5 -6 33 -21 62 -24 49 -25
|
||||
56 -12 87 l14 34 37 -52 c28 -39 43 -51 55 -46 44 17 164 46 175 42 7 -2 -4
|
||||
-7 -23 -11 -19 -4 -65 -16 -102 -27 -74 -21 -80 -31 -56 -86 20 -45 69 -114
|
||||
77 -108 5 2 49 -42 97 -100 49 -58 97 -107 106 -110 9 -3 33 1 53 10 43 18 55
|
||||
19 55 5 0 -5 -17 -18 -39 -29 -62 -32 -101 -70 -101 -98 0 -54 230 -244 331
|
||||
-274 35 -11 44 -9 91 15 93 49 198 118 198 131 0 21 -236 232 -247 221 -3 -3
|
||||
10 -18 28 -33 91 -76 199 -176 199 -184 0 -10 -107 -82 -183 -122 -42 -22 -53
|
||||
-24 -80 -14 -123 42 -340 230 -322 278 7 18 113 84 122 76 11 -12 -7 -37 -47
|
||||
-62 -22 -14 -40 -32 -40 -40 0 -37 186 -195 230 -195 35 0 180 71 180 87 0 22
|
||||
-19 55 -55 93 -25 27 -35 52 -48 114 -9 43 -18 81 -20 83 -2 2 -25 -6 -50 -17
|
||||
l-47 -21 -45 31 c-36 25 -45 36 -44 58 2 27 2 27 6 2 3 -15 19 -34 39 -47 l34
|
||||
-22 0 112 c0 171 -19 214 -127 283 -60 38 -72 42 -52 17 7 -10 1 -7 -13 6 -15
|
||||
13 -25 27 -23 31 3 4 -13 20 -35 35 -45 31 -63 30 -219 -6 -46 -11 -86 -17
|
||||
-89 -14 -3 3 -23 -30 -44 -72 -68 -139 -166 -219 -438 -358 -84 -43 -154 -84
|
||||
-157 -91 -13 -34 -160 -94 -230 -94 -17 0 -69 14 -115 31 -46 17 -135 39 -198
|
||||
50 -476 81 -952 324 -1254 639 -99 105 -111 114 -141 111 -18 -1 -36 3 -41 10
|
||||
-4 8 -3 10 4 5 6 -4 21 -2 32 4 20 11 19 13 -20 57 -101 115 -204 295 -309
|
||||
540 -117 274 -147 421 -138 673 7 188 21 250 91 395 63 131 123 212 206 280
|
||||
34 28 81 71 105 96 30 32 47 44 57 38 10 -7 11 -9 0 -9 -7 0 -25 -14 -40 -31
|
||||
-14 -17 -53 -54 -86 -81 -89 -73 -147 -147 -209 -267 -89 -173 -92 -186 -92
|
||||
-416 1 -282 31 -431 140 -682 90 -208 207 -402 317 -528 21 -23 34 -46 30 -50
|
||||
-4 -4 0 -6 8 -3 8 2 29 23 46 45 l30 40 29 -56 c44 -84 196 -231 340 -327 147
|
||||
-98 271 -165 435 -237 154 -67 324 -123 247 -81 -16 9 -27 17 -25 19 2 2 32
|
||||
-3 68 -10 36 -8 79 -15 95 -15 l30 -2 -27 -10 c-16 -5 -28 -13 -28 -17 0 -5
|
||||
34 -13 76 -19 46 -6 84 -17 97 -29 l21 -18 -21 30 c-28 40 -77 85 -136 125
|
||||
-86 57 -119 91 -106 107 9 10 9 20 0 39 -16 35 -118 170 -216 284 -238 279
|
||||
-265 333 -215 429 10 21 16 41 13 45 -4 3 -4 6 0 6 3 0 78 -96 166 -212 88
|
||||
-117 184 -243 214 -279 35 -43 82 -124 134 -230 67 -136 90 -172 131 -212 49
|
||||
-45 70 -53 124 -49 11 1 20 -7 23 -21 3 -12 10 -44 16 -72 19 -92 60 -111 179
|
||||
-83 l52 12 -4 48 -3 48 85 36 c113 49 446 270 499 332 39 44 164 274 181 331
|
||||
16 53 11 -15 -10 -121 -22 -115 -23 -118 -12 -101 4 6 60 20 125 31 143 24
|
||||
168 19 226 -43 l42 -45 39 20 c22 11 59 23 82 26 36 5 50 1 88 -24 25 -15 59
|
||||
-48 75 -72 26 -38 30 -52 29 -107 0 -35 3 -63 8 -63 5 0 55 -40 111 -89 56
|
||||
-49 167 -141 247 -204 l145 -116 3 257 c2 236 1 258 -15 270 -10 7 -69 40
|
||||
-132 73 -62 33 -153 85 -202 115 -184 114 -192 129 -195 344 l-2 155 7 -135
|
||||
c10 -167 22 -213 69 -260 45 -44 186 -132 350 -218 l122 -64 0 114 -1 113
|
||||
-112 68 c-62 38 -124 78 -137 89 l-25 20 35 -20 c19 -11 81 -47 138 -81 95
|
||||
-56 102 -59 102 -37 0 17 -19 37 -72 77 -74 56 -122 123 -131 184 -2 17 -2 25
|
||||
0 19 6 -16 43 -5 43 12 0 20 5 18 70 -26 81 -55 90 -58 90 -27 0 21 -11 32
|
||||
-61 59 -36 18 -70 45 -80 63 -29 46 -23 50 20 13 22 -18 58 -43 80 -56 l41
|
||||
-23 0 95 0 94 -47 23 c-123 59 -197 177 -172 271 12 45 66 95 115 104 59 11
|
||||
23 26 -52 22 l-69 -3 17 51 c41 121 47 269 13 320 -8 13 -14 24 -12 24 3 0 47
|
||||
-16 98 -35 52 -19 97 -35 102 -35 4 0 7 40 7 89 0 69 -3 90 -15 95 -8 3 -64
|
||||
13 -125 23 l-110 18 0 43 c0 23 -13 77 -29 120 -16 42 -31 102 -34 132 -8 75
|
||||
-67 248 -108 311 -23 37 -53 64 -103 96 -39 25 -96 69 -127 98 -67 64 -127 95
|
||||
-255 133 -99 30 -340 80 -401 84 -18 1 -33 8 -33 14 0 7 -44 58 -97 114 l-97
|
||||
102 45 -6 c24 -4 179 -22 344 -41 363 -43 290 -31 751 -121 210 -41 384 -74
|
||||
388 -74 3 0 6 6 6 14 0 10 -42 21 -147 41 -273 50 -283 61 -20 20 87 -14 161
|
||||
-25 163 -25 2 0 4 9 4 20 0 11 -6 20 -13 20 -7 0 -147 18 -311 40 -163 22
|
||||
-299 40 -301 40 -1 0 -24 18 -51 40 -47 39 -104 112 -104 134 0 6 10 -7 23
|
||||
-29 12 -22 33 -45 45 -51 12 -6 98 -16 190 -23 92 -7 237 -19 322 -27 193 -17
|
||||
200 -17 200 0 0 18 -15 20 -360 46 -151 12 -290 23 -308 26 -38 6 -60 27 -96
|
||||
95 l-28 50 16 102 c21 129 48 184 133 272 37 39 68 73 68 77 0 3 4 10 9 15 5
|
||||
5 6 3 2 -4 -8 -15 10 -18 19 -3 10 16 228 143 390 227 119 62 151 83 153 101
|
||||
l3 22 -413 0 c-452 -1 -438 2 -328 -55 69 -35 147 -55 216 -55 62 0 215 35
|
||||
288 65 45 19 51 17 30 -13 -36 -51 -139 -81 -295 -85 l-96 -2 -39 -54 c-22
|
||||
-30 -75 -87 -119 -127 -44 -41 -183 -185 -310 -321 -126 -136 -251 -268 -276
|
||||
-295 l-46 -48 -76 0 c-71 0 -81 3 -129 35 -66 43 -127 94 -112 95 18 0 135
|
||||
107 228 208 128 140 516 625 516 645 0 13 -15 7 -26 -10z m366 -371 c-99 -78
|
||||
-407 -334 -485 -405 -49 -44 -70 -59 -45 -33 44 47 91 87 324 282 127 105 228
|
||||
184 236 183 3 0 -11 -12 -30 -27z m-1670 -205 c52 -14 111 -33 130 -42 35 -16
|
||||
35 -16 5 -11 -16 3 -84 17 -150 31 -190 42 -390 45 -600 10 -29 -5 -29 -5 -5
|
||||
5 58 26 197 39 360 36 137 -3 181 -8 260 -29z m-763 -57 c-65 -22 -156 -57
|
||||
-202 -79 -47 -22 -85 -37 -85 -35 0 19 347 154 390 153 8 0 -38 -18 -103 -39z
|
||||
m346 33 c-13 -2 -35 -2 -50 0 -16 2 -5 4 22 4 28 0 40 -2 28 -4z m185 0 c-10
|
||||
-2 -28 -2 -40 0 -13 2 -5 4 17 4 22 1 32 -1 23 -4z m-301 -9 c-3 -3 -12 -4
|
||||
-19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m380 0 c-3 -3 -12 -4 -19 -1 -8 3 -5
|
||||
6 6 6 11 1 17 -2 13 -5z m1660 -26 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2
|
||||
-19 0 -25z m-1600 16 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z
|
||||
m120 -30 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m1470 -61 c-3
|
||||
-10 -5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z m-1739 16 c53 -6 147 -23
|
||||
207 -39 105 -27 280 -93 290 -110 3 -4 -36 10 -87 32 -121 52 -291 95 -434
|
||||
109 -189 20 -421 -14 -603 -85 -36 -14 -66 -24 -68 -22 -7 7 150 63 237 85
|
||||
161 39 295 48 458 30z m493 -43 c60 -30 147 -81 194 -112 78 -52 277 -222 315
|
||||
-269 14 -17 14 -18 -7 -7 -12 7 -28 20 -35 31 -28 39 -180 170 -268 230 -50
|
||||
35 -144 90 -208 122 -65 32 -113 59 -108 59 5 0 58 -24 117 -54z m-356 -37
|
||||
c122 -25 255 -68 332 -109 l58 -30 -98 3 c-63 2 -91 0 -81 -6 9 -5 56 -9 105
|
||||
-8 70 1 96 -2 126 -18 44 -22 126 -85 204 -155 l54 -49 -65 7 c-122 13 -204
|
||||
38 -322 97 -123 62 -189 79 -305 79 -59 0 -78 -10 -51 -26 7 -5 8 -3 3 5 -22
|
||||
36 112 -58 211 -147 l59 -54 247 -1 c170 -2 251 -6 258 -13 9 -9 -56 -11 -256
|
||||
-9 -248 2 -266 1 -248 -14 10 -9 29 -37 42 -62 33 -65 107 -156 144 -176 29
|
||||
-16 58 -17 264 -14 l231 3 47 -77 c27 -42 47 -77 45 -78 -2 -1 -108 0 -236 3
|
||||
-230 5 -232 5 -258 30 -15 14 -34 37 -43 53 -16 26 -32 36 -32 18 0 -4 19 -30
|
||||
43 -57 40 -46 40 -47 9 -26 -17 13 -58 51 -90 84 -31 34 -75 79 -98 102 -23
|
||||
23 -76 83 -118 134 -43 50 -80 92 -84 92 -4 0 -29 20 -55 44 -160 147 -519
|
||||
245 -847 232 l-135 -5 68 35 c120 62 343 123 497 138 85 7 275 -5 375 -25z
|
||||
m1589 -70 c-4 -52 -9 -88 -12 -81 -5 17 8 185 14 179 3 -3 2 -47 -2 -98z
|
||||
m-2544 86 c0 -2 -10 -9 -22 -15 -22 -11 -22 -10 -4 4 21 17 26 19 26 11z m-50
|
||||
-28 c0 -2 -19 -18 -42 -36 l-43 -32 39 35 c37 34 46 40 46 33z m140 -41 c0 -2
|
||||
-7 -7 -16 -10 -8 -3 -12 -2 -9 4 6 10 25 14 25 6z m-53 -29 c-11 -7 -48 -31
|
||||
-84 -54 -36 -23 -59 -36 -52 -27 12 15 139 94 149 93 3 0 -3 -6 -13 -12z
|
||||
m1353 -33 c0 -2 -9 0 -20 6 -11 6 -20 13 -20 16 0 2 9 0 20 -6 11 -6 20 -13
|
||||
20 -16z m754 -6 c-9 -17 -22 -50 -29 -72 -7 -23 -13 -32 -14 -21 -1 21 44 125
|
||||
54 125 3 0 -2 -14 -11 -32z m-671 -47 c7 -8 -7 -2 -30 14 -24 15 -43 30 -43
|
||||
32 0 7 61 -31 73 -46z m407 -122 c13 -23 13 -59 1 -59 -6 0 -37 25 -70 56 -52
|
||||
48 -61 61 -61 91 l0 35 60 -52 c34 -29 65 -61 70 -71z m-2000 108 c0 -2 -12
|
||||
-14 -27 -28 l-28 -24 24 28 c23 25 31 32 31 24z m268 -4 c-16 -2 -40 -2 -55 0
|
||||
-16 2 -3 4 27 4 30 0 43 -2 28 -4z m225 0 c-18 -2 -48 -2 -65 0 -18 2 -4 4 32
|
||||
4 36 0 50 -2 33 -4z m-674 -6 c-2 -2 -24 -18 -49 -36 l-45 -33 40 36 c22 20
|
||||
44 36 49 36 5 0 7 -1 5 -3z m324 -4 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0
|
||||
19 -2 13 -5z m430 0 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z
|
||||
m-496 -9 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m556 -1 c-7
|
||||
-2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m54 -9 c-3 -3 -12 -4 -19
|
||||
-1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m988 -14 c10 -11 16 -20 13 -20 -3 0 -13
|
||||
9 -23 20 -10 11 -16 20 -13 20 3 0 13 -9 23 -20z m-920 0 c25 -11 -1 -11 -35
|
||||
0 -20 6 -21 8 -5 8 11 0 29 -3 40 -8z m65 -20 c18 -12 2 -12 -25 0 -13 6 -15
|
||||
9 -5 9 8 0 22 -4 30 -9z m50 -20 c8 -5 11 -10 5 -10 -5 0 -17 5 -25 10 -8 5
|
||||
-10 10 -5 10 6 0 17 -5 25 -10z m-970 -14 c0 -2 -8 -10 -17 -17 -16 -13 -17
|
||||
-12 -4 4 13 16 21 21 21 13z m1068 -30 c37 -19 81 -47 97 -61 l30 -27 -35 24
|
||||
c-19 13 -66 40 -105 60 -38 21 -67 38 -62 38 4 0 38 -15 75 -34z m1949 -2 c-3
|
||||
-3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-750 -191 c26 -46 41 -58
|
||||
23 -20 -11 21 -11 21 5 2 8 -11 13 -25 10 -33 -2 -7 0 -10 5 -7 10 6 55 -74
|
||||
46 -83 -3 -3 -6 -1 -6 4 0 6 -7 19 -15 30 -14 16 -14 14 0 -14 13 -26 19 -31
|
||||
30 -22 8 7 46 10 102 7 l88 -3 -91 -2 c-73 -2 -93 -5 -98 -18 -4 -10 -2 -13 6
|
||||
-8 8 5 9 2 5 -10 -6 -16 9 -17 226 -13 255 5 302 0 390 -45 77 -38 128 -86
|
||||
160 -151 35 -69 98 -273 90 -292 -12 -32 -68 -45 -347 -80 -158 -19 -295 -35
|
||||
-306 -35 -10 0 -21 8 -24 18 -2 9 -3 -10 -1 -43 l4 -60 -10 65 c-6 36 -22 112
|
||||
-37 170 -14 58 -27 108 -27 112 0 3 -3 9 -7 13 -4 4 -4 13 -1 21 3 8 0 14 -6
|
||||
14 -6 0 -11 6 -11 12 0 27 -54 152 -86 200 -19 27 -34 52 -34 55 0 6 -48 64
|
||||
-79 98 -11 11 -34 45 -53 75 -19 30 -49 78 -67 107 l-33 51 -46 -29 c-25 -16
|
||||
-51 -29 -58 -29 -6 0 22 -35 63 -77 41 -43 79 -77 84 -75 6 1 8 -2 4 -8 -4 -6
|
||||
11 -32 33 -58 133 -159 259 -455 303 -710 30 -180 25 -544 -12 -755 -20 -110
|
||||
-21 -70 -4 89 10 85 14 184 11 229 -3 53 -2 70 4 50 9 -31 5 126 -7 305 -5 72
|
||||
-8 88 -14 65 -5 -21 -7 -13 -3 25 2 33 1 47 -4 36 -6 -13 -8 -4 -9 30 0 54
|
||||
-47 206 -100 329 -72 164 -148 275 -301 439 -40 43 -71 80 -68 83 3 3 -13 19
|
||||
-34 34 -51 37 -51 45 0 19 21 -11 47 -20 57 -20 28 0 82 37 101 69 l16 29 54
|
||||
-72 c29 -39 65 -90 79 -113z m810 181 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11
|
||||
1 17 -2 13 -5z m50 -10 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z
|
||||
m66 -11 c-7 -2 -21 -2 -30 0 -10 3 -4 5 12 5 17 0 24 -2 18 -5z m-2526 -48
|
||||
c221 -32 355 -80 437 -155 42 -39 183 -232 158 -216 -7 4 -31 35 -54 69 -54
|
||||
80 -143 169 -195 196 -64 32 -201 69 -330 87 -128 19 -443 25 -638 12 -146
|
||||
-10 -100 8 55 21 150 13 431 6 567 -14z m558 -25 c10 -11 16 -20 13 -20 -3 0
|
||||
-13 9 -23 20 -10 11 -16 20 -13 20 3 0 13 -9 23 -20z m-997 -37 c-16 -2 -40
|
||||
-2 -55 0 -16 2 -3 4 27 4 30 0 43 -2 28 -4z m110 0 c-16 -2 -40 -2 -55 0 -16
|
||||
2 -3 4 27 4 30 0 43 -2 28 -4z m299 0 c-20 -2 -52 -2 -70 0 -17 2 0 4 38 4 39
|
||||
0 53 -2 32 -4z m1010 1 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z
|
||||
m831 -39 c146 -31 291 -77 347 -110 42 -25 116 -95 99 -95 -33 0 -94 27 -137
|
||||
62 -93 73 -169 103 -366 143 -145 29 -155 30 -147 10 8 -22 0 -18 -17 8 l-15
|
||||
23 57 -7 c31 -5 112 -20 179 -34z m-2475 28 c-18 -2 -48 -2 -65 0 -18 2 -4 4
|
||||
32 4 36 0 50 -2 33 -4z m745 0 c-10 -2 -26 -2 -35 0 -10 3 -2 5 17 5 19 0 27
|
||||
-2 18 -5z m1140 0 c-21 -2 -57 -2 -80 0 -24 2 -7 4 37 4 44 0 63 -2 43 -4z
|
||||
m-1075 -10 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m54 -9 c-3
|
||||
-3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m40 -10 c-3 -3 -12 -4 -19
|
||||
-1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m643 -69 c43 -41 88 -77 101 -80 13 -3
|
||||
108 -5 211 -3 169 3 187 1 197 -14 10 -17 -1 -18 -176 -20 -287 -2 -293 -1
|
||||
-355 71 -43 50 -83 121 -68 121 6 0 46 -34 90 -75z m-1407 48 c-40 -2 -107 -2
|
||||
-150 0 -43 1 -10 3 72 3 83 0 118 -2 78 -3z m-255 -10 c-10 -2 -26 -2 -35 0
|
||||
-10 3 -2 5 17 5 19 0 27 -2 18 -5z m2530 -20 c-10 -2 -26 -2 -35 0 -10 3 -2 5
|
||||
17 5 19 0 27 -2 18 -5z m-1820 -85 c3 -37 2 -38 -30 -38 -18 0 -50 3 -70 6
|
||||
-35 6 -38 9 -38 41 l0 34 68 -3 67 -3 3 -37z m-191 -3 c2 -14 -1 -25 -6 -25
|
||||
-15 0 -21 14 -14 39 7 26 16 20 20 -14z m458 -2 c63 -22 116 -58 170 -114 l50
|
||||
-53 -51 45 c-78 68 -165 111 -238 116 -56 5 -65 3 -94 -22 -17 -14 -40 -40
|
||||
-49 -56 l-17 -29 -131 0 c-225 0 -549 -27 -672 -56 -22 -5 -25 -4 -17 6 26 27
|
||||
373 61 642 63 l163 1 35 49 c55 76 102 88 209 50z m-675 7 c0 -5 -4 -10 -10
|
||||
-10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m47 4 c-3 -3 -12 -4
|
||||
-19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-329 -29 c1 -14 -3 -25 -9 -25 -5 0
|
||||
-8 4 -5 9 4 5 -2 7 -12 4 -12 -3 -19 1 -19 10 0 9 6 13 14 10 7 -3 13 0 13 6
|
||||
0 22 16 10 18 -14z m119 5 c-1 -11 -5 -20 -9 -20 -4 0 -8 9 -8 20 0 11 4 20 9
|
||||
20 6 0 9 -9 8 -20z m133 16 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11
|
||||
10 11 6 0 10 -2 10 -4z m210 -17 c0 -5 -4 -9 -10 -9 -5 0 -10 7 -10 16 0 8 5
|
||||
12 10 9 6 -3 10 -10 10 -16z m2247 5 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1
|
||||
17 -2 13 -5z m-2407 -14 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10
|
||||
10 6 0 10 -4 10 -10z m569 -33 c6 -8 8 -17 5 -20 -9 -8 -44 11 -44 23 0 15 26
|
||||
12 39 -3z m-267 -4 c-40 -2 -103 -2 -140 0 -37 2 -4 3 73 3 77 0 107 -2 67 -3z
|
||||
m-253 -7 c-2 -2 -76 -6 -164 -8 -88 -3 -131 -2 -95 2 72 7 266 12 259 6z
|
||||
m-371 -23 c-16 -2 -40 -2 -55 0 -16 2 -3 4 27 4 30 0 43 -2 28 -4z m1006 -24
|
||||
c125 -79 246 -246 246 -339 0 -47 -18 -58 -85 -53 l-60 5 -2 53 c-1 66 -41
|
||||
153 -90 196 -58 50 -115 71 -225 79 -55 4 -101 10 -104 12 -2 3 31 12 74 22
|
||||
42 9 95 25 117 35 56 27 74 25 129 -10z m215 -8 c88 -45 161 -59 336 -66 88
|
||||
-4 175 -11 192 -17 47 -14 97 -78 128 -164 49 -134 43 -204 -20 -220 -14 -3
|
||||
-23 -10 -20 -14 6 -10 -227 -20 -238 -10 -4 4 32 10 80 14 116 9 177 37 181
|
||||
84 4 36 -18 120 -50 195 -31 71 -49 77 -262 87 -188 9 -231 18 -311 64 -39 23
|
||||
-96 76 -81 76 3 0 33 -13 65 -29z m-582 -68 c-35 -47 -36 -48 -107 -57 -71 -8
|
||||
-72 -8 -103 22 -42 39 -69 52 -107 52 -49 0 -103 -34 -148 -93 -49 -62 -55
|
||||
-81 -13 -40 59 59 151 68 236 23 42 -22 61 -27 70 -20 10 9 18 -2 35 -47 26
|
||||
-67 35 -136 26 -188 -8 -42 -60 -105 -87 -105 -16 0 -15 6 13 45 43 60 51 151
|
||||
20 212 -42 82 -126 131 -206 119 -92 -14 -140 -71 -140 -166 1 -57 36 -146 54
|
||||
-135 5 3 12 0 16 -6 5 -8 3 -9 -6 -4 -8 5 -11 3 -9 -4 3 -7 8 -11 11 -9 4 2
|
||||
23 -12 42 -31 31 -30 44 -35 97 -39 38 -3 56 -8 48 -13 -18 -11 -85 -1 -124
|
||||
18 -40 20 -103 80 -122 118 -9 17 -19 57 -23 90 l-7 60 -2 -75 c-1 -82 -14
|
||||
-139 -33 -153 -9 -6 -5 -7 11 -3 18 4 21 2 12 -7 -6 -6 -46 -13 -89 -17 -84
|
||||
-6 -80 -1 -69 -78 4 -29 2 -25 -10 16 -9 28 -22 52 -29 52 -8 0 -11 6 -8 15 7
|
||||
18 6 18 -37 3 l-34 -12 30 -6 c26 -6 23 -7 -25 -14 -173 -22 -190 -27 -190
|
||||
-49 0 -21 3 -22 107 -19 59 2 106 1 103 -1 -7 -7 -300 -19 -300 -13 0 3 25 24
|
||||
55 46 42 31 57 49 65 81 15 54 -1 100 -47 138 l-35 29 28 52 c16 29 44 70 64
|
||||
92 32 36 45 42 143 67 l107 28 64 -58 c35 -33 68 -59 73 -59 4 1 -23 29 -61
|
||||
64 l-69 63 64 12 c61 11 282 37 379 44 25 2 103 4 173 5 l129 2 -35 -47z
|
||||
m-739 1 c-3 -3 -28 -11 -54 -18 -27 -7 -60 -16 -74 -20 -23 -6 -24 -6 -5 5 27
|
||||
17 146 47 133 33z m881 -37 c-44 -29 -97 -129 -108 -204 -7 -50 -9 -53 -9 -18
|
||||
-1 22 7 65 18 95 21 61 20 72 -2 38 -50 -77 -59 -168 -25 -237 8 -17 12 -31 7
|
||||
-31 -16 0 -40 70 -40 119 0 89 53 184 129 233 53 33 79 38 30 5z m1171 -15
|
||||
c-32 -10 -50 -36 -50 -71 l-1 -36 -24 47 c-14 26 -30 50 -37 54 -9 6 -6 10 10
|
||||
14 28 6 123 -1 102 -8z m-2555 -13 c-2 -12 -18 -80 -34 -153 -17 -72 -36 -176
|
||||
-42 -231 -7 -55 -15 -104 -19 -108 -13 -14 -230 45 -230 63 0 12 -2 12 -9 2
|
||||
-19 -31 -91 16 -91 61 0 20 73 102 132 149 l38 29 -16 -36 c-8 -21 -13 -39
|
||||
-11 -42 3 -2 9 10 15 26 19 54 69 116 139 173 54 44 114 84 130 88 1 0 0 -10
|
||||
-2 -21z m2898 14 c-7 -2 -21 -2 -30 0 -10 3 -4 5 12 5 17 0 24 -2 18 -5z
|
||||
m-894 -47 c146 -30 190 -64 199 -157 4 -46 2 -53 -29 -85 -38 -40 -41 -40
|
||||
-145 -15 -44 10 -95 22 -115 25 l-35 6 10 50 c8 42 7 61 -11 118 -11 37 -24
|
||||
75 -28 84 -7 17 -4 17 31 4 22 -7 77 -21 123 -30z m-1909 19 c0 -2 -20 -53
|
||||
-44 -113 -96 -239 -139 -504 -118 -728 15 -150 34 -225 73 -279 19 -26 51
|
||||
-103 80 -191 27 -81 83 -217 125 -302 67 -138 83 -163 145 -225 38 -38 68 -71
|
||||
67 -72 -2 -1 -31 10 -65 26 -79 35 -110 78 -199 269 -126 272 -209 524 -233
|
||||
703 -22 163 -10 336 45 622 47 249 71 313 109 299 8 -4 15 -7 15 -9z m2275
|
||||
-15 c24 -23 85 -186 85 -229 0 -39 -72 -71 -159 -71 l-44 0 47 38 c25 20 46
|
||||
45 46 55 0 9 -2 17 -4 17 -2 0 -11 3 -20 6 -10 4 -22 -8 -40 -43 -13 -26 -34
|
||||
-54 -46 -61 l-21 -13 21 29 c32 43 36 100 12 154 -25 56 -75 96 -161 125 l-66
|
||||
22 162 -2 c156 -3 164 -4 188 -27z m549 14 c9 -8 16 -18 16 -21 0 -3 -78 -2
|
||||
-173 2 -140 6 -175 4 -184 -7 -8 -10 1 -43 38 -137 28 -68 48 -125 46 -128 -2
|
||||
-2 -22 -1 -44 3 -39 6 -41 7 -53 62 -7 30 -21 80 -31 110 -23 68 -24 90 -2
|
||||
114 14 16 34 18 194 18 148 0 180 -3 193 -16z m-1384 -16 c59 -31 101 -106 99
|
||||
-182 l-2 -51 -7 60 c-10 91 -49 150 -113 174 -41 16 -68 14 -112 -9 -49 -25
|
||||
-54 -25 -24 -1 49 38 96 40 159 9z m-402 -25 c-4 -22 -22 -20 -26 1 -2 10 3
|
||||
16 13 16 10 0 15 -7 13 -17z m-318 -6 c0 -2 -10 -12 -22 -23 l-23 -19 19 23
|
||||
c18 21 26 27 26 19z m525 -22 c-1 -14 -5 -28 -8 -31 -3 -4 -4 7 -2 22 4 35 4
|
||||
34 9 34 2 0 3 -11 1 -25z m-451 -15 c-39 -17 -53 -37 -68 -95 -3 -11 -3 -3 -1
|
||||
19 4 41 27 73 60 87 40 16 49 7 9 -11z m1804 13 c-15 -2 -42 -2 -60 0 -18 2
|
||||
-6 4 27 4 33 0 48 -2 33 -4z m-1726 -15 c22 -19 48 -60 48 -78 -1 -8 -7 -1
|
||||
-14 16 -8 17 -26 40 -41 52 -15 12 -23 22 -18 22 5 0 16 -6 25 -12z m1920 5
|
||||
l-73 -4 20 -33 c12 -18 18 -36 15 -39 -3 -3 4 -10 15 -16 25 -14 85 -100 76
|
||||
-109 -4 -4 -19 8 -34 27 -14 18 -45 56 -68 84 -41 48 -51 75 -36 90 3 4 40 6
|
||||
82 5 l76 -2 -73 -3z m-1420 -40 c-12 -2 -20 -9 -16 -14 3 -5 10 -7 15 -4 5 4
|
||||
9 2 9 -2 0 -16 -24 -33 -44 -33 -21 1 -21 1 -2 15 29 22 13 29 -23 10 -19 -9
|
||||
-31 -23 -31 -36 0 -11 -4 -18 -10 -14 -27 17 54 84 100 83 23 -1 24 -1 2 -5z
|
||||
m1519 -28 c10 -16 20 -43 24 -60 5 -29 5 -29 -5 -5 -6 14 -28 42 -48 63 -35
|
||||
37 -36 39 -13 35 15 -2 32 -15 42 -33z m-2914 3 c-3 -8 -6 -5 -6 6 -1 11 2 17
|
||||
5 13 3 -3 4 -12 1 -19z m2671 15 c-21 -2 -55 -2 -75 0 -21 2 -4 4 37 4 41 0
|
||||
58 -2 38 -4z m-1811 -9 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z
|
||||
m-45 -17 c-6 -6 -12 -28 -15 -47 l-4 -35 -1 36 c-1 19 3 40 10 47 16 16 23 15
|
||||
10 -1z m98 -47 c0 -19 -36 -70 -50 -70 -5 0 2 11 15 25 29 28 31 51 9 85 l-16
|
||||
25 21 -24 c12 -13 21 -31 21 -41z m-923 18 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13
|
||||
3 -3 4 -12 1 -19z m700 -10 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0
|
||||
-25z m833 2 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4
|
||||
10 -10z m1167 3 c-20 -2 -52 -2 -70 0 -17 2 0 4 38 4 39 0 53 -2 32 -4z m191
|
||||
0 c-10 -2 -26 -2 -35 0 -10 3 -2 5 17 5 19 0 27 -2 18 -5z m-2901 -55 c-3 -7
|
||||
-5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m993 16 c0 -2 -7 -4 -15 -4 -8
|
||||
0 -15 4 -15 10 0 5 7 7 15 4 8 -4 15 -8 15 -10z m269 -32 c1 -7 -3 -10 -9 -7
|
||||
-5 3 -10 18 -9 33 0 24 1 25 9 7 5 -11 9 -26 9 -33z m-420 -4 c8 2 11 0 7 -6
|
||||
-3 -6 9 -15 29 -22 26 -9 35 -17 34 -33 l0 -22 -9 23 c-12 28 -40 30 -33 2 3
|
||||
-11 0 -20 -6 -20 -6 0 -11 11 -11 23 0 15 -9 28 -24 35 -14 6 -30 21 -37 34
|
||||
l-12 23 24 -21 c13 -12 30 -19 38 -16z m388 10 c-3 -8 -6 -5 -6 6 -1 11 2 17
|
||||
5 13 3 -3 4 -12 1 -19z m1531 15 c-10 -2 -28 -2 -40 0 -13 2 -5 4 17 4 22 1
|
||||
32 -1 23 -4z m-908 -28 c125 -19 201 -46 266 -95 210 -159 256 -546 100 -845
|
||||
-41 -80 -42 -82 -21 -65 34 26 -21 -45 -58 -76 -41 -35 -137 -78 -205 -93 -86
|
||||
-18 -211 -14 -288 10 -60 19 -77 30 -135 88 -77 79 -193 248 -248 364 -41 84
|
||||
-81 222 -81 276 0 36 -29 56 -66 47 -25 -7 -25 -7 -23 67 2 40 -1 78 -5 85
|
||||
-16 27 73 131 144 167 40 20 221 66 305 78 71 10 227 6 315 -8z m1163 -57
|
||||
c-42 -72 -127 -97 -201 -59 -23 12 -42 23 -42 25 0 2 20 -1 44 -6 34 -7 51 -6
|
||||
73 6 33 17 67 48 89 81 15 24 15 24 35 4 20 -20 20 -21 2 -51z m-3026 15 c-3
|
||||
-10 -5 -4 -5 12 0 17 2 24 5 18 2 -7 2 -21 0 -30z m2867 0 c34 -37 26 -40 -21
|
||||
-9 -30 21 -49 26 -93 25 -51 -1 -53 -1 -25 -11 32 -11 58 -28 52 -34 -2 -2
|
||||
-21 5 -42 16 -22 11 -46 20 -55 21 -10 0 -9 3 5 9 11 5 50 9 87 9 61 1 70 -2
|
||||
92 -26z m-2197 -5 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m1835
|
||||
-3 c5 -24 3 -25 -46 -24 -47 1 -49 1 -20 10 17 5 37 16 44 24 16 20 17 19 22
|
||||
-10z m83 -2 c11 -7 36 -13 57 -13 20 0 40 -5 44 -12 5 -8 2 -9 -10 -5 -10 4
|
||||
-48 8 -84 8 -37 1 -59 3 -49 6 18 5 18 6 1 24 -17 19 -17 20 2 13 10 -4 28
|
||||
-13 39 -21z m1354 -50 c15 -30 26 -74 29 -115 l5 -67 -44 -11 c-147 -37 -321
|
||||
-113 -408 -178 -48 -36 -68 -90 -86 -237 -26 -216 -59 -336 -103 -378 -15 -14
|
||||
-47 -33 -71 -42 -65 -23 -73 -17 -14 10 64 29 93 85 117 225 25 152 19 170
|
||||
-60 170 -47 0 -55 3 -50 16 3 9 6 19 6 24 0 5 29 12 65 15 l65 7 0 36 0 35
|
||||
-60 -6 -60 -7 0 30 c0 28 3 30 38 30 56 0 87 20 87 55 0 30 -1 30 -62 33 -58
|
||||
3 -63 5 -63 26 0 21 6 24 59 30 74 8 91 21 102 77 18 97 3 144 -44 135 -12 -3
|
||||
-48 -8 -79 -11 -54 -6 -58 -5 -58 14 0 12 4 21 9 21 47 0 576 82 602 94 50 21
|
||||
53 20 78 -31z m-1151 -29 c101 -50 170 -104 224 -176 40 -53 66 -105 56 -113
|
||||
-2 -1 -19 -5 -38 -8 -36 -5 -36 -5 -54 46 -24 69 -70 140 -109 170 -76 58 -89
|
||||
60 -287 62 -178 2 -180 2 -55 -5 116 -6 107 -7 -80 -6 -115 1 -187 -1 -160 -4
|
||||
l50 -6 -45 -5 c-41 -4 -47 -1 -77 31 l-32 35 37 6 c20 3 141 7 268 8 l231 1
|
||||
71 -36z m-1657 12 c-6 -7 -30 -16 -54 -20 -23 -3 -150 -28 -282 -55 -132 -27
|
||||
-280 -57 -330 -66 -49 -9 -109 -25 -132 -36 -31 -15 -58 -19 -109 -17 -60 3
|
||||
-69 6 -87 30 -11 15 -18 30 -15 33 13 14 136 25 273 25 162 0 199 5 191 26 -3
|
||||
7 -7 30 -10 51 -4 32 -3 30 12 -15 l17 -54 40 7 c22 3 112 22 200 42 88 20
|
||||
189 42 225 48 36 7 67 13 69 14 2 0 -2 -5 -8 -13z m1876 -1 c0 -8 -2 -13 -5
|
||||
-10 -2 2 -11 -2 -19 -10 -8 -8 -22 -15 -31 -15 -13 1 -9 7 13 25 35 29 42 30
|
||||
42 10z m-2640 -31 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-74
|
||||
-11 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m746 -43 c-25 -29
|
||||
-51 -50 -63 -51 -21 0 -21 -1 -1 -9 11 -5 17 -9 12 -9 -4 -1 -77 -15 -162 -31
|
||||
-84 -17 -157 -29 -162 -28 -18 5 -90 -26 -124 -53 l-37 -28 -6 25 c-8 30 4 54
|
||||
43 87 37 31 89 48 246 82 106 23 285 62 293 64 2 1 -16 -21 -39 -49z m-812 34
|
||||
c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m2569 -13 c46 -21 100
|
||||
-82 138 -158 33 -67 33 -91 0 -103 -32 -12 -57 -12 -26 0 12 5 22 15 22 21 0
|
||||
23 -63 139 -96 178 -46 54 -83 64 -207 57 -87 -4 -93 -4 -42 4 33 6 64 12 70
|
||||
14 26 11 104 4 141 -13z m-450 -24 c38 3 67 3 64 1 -3 -3 -37 -8 -76 -12 -62
|
||||
-6 -72 -5 -78 10 -5 13 -4 14 7 6 9 -8 38 -9 83 -5z m157 6 c-13 -2 -35 -2
|
||||
-50 0 -16 2 -5 4 22 4 28 0 40 -2 28 -4z m251 -29 c8 -21 8 -24 -3 -24 -5 0
|
||||
-11 9 -14 20 -6 24 8 27 17 4z m495 -73 c1 -74 -5 -61 -11 24 -3 40 -2 61 3
|
||||
50 4 -11 8 -44 8 -74z m-607 64 c4 -5 8 -14 8 -20 0 -5 -5 -3 -10 5 -8 12 -10
|
||||
12 -10 -5 0 -17 -2 -17 -10 -5 -20 32 0 55 22 25z m768 -21 c0 -35 -17 -64
|
||||
-38 -64 -16 1 -16 1 1 11 10 6 17 22 17 40 0 28 -2 30 -27 25 -79 -14 -103
|
||||
-16 -103 -8 0 10 128 31 143 24 4 -2 7 -14 7 -28z m-3550 15 c11 -8 8 -9 -15
|
||||
-5 -37 7 -76 -11 -92 -44 -10 -19 -13 -21 -13 -7 0 46 80 84 120 56z m2553 4
|
||||
c3 -5 8 -22 11 -39 6 -24 4 -31 -9 -31 -13 0 -16 7 -11 27 2 15 0 32 -7 39 -8
|
||||
8 -8 11 0 11 7 0 14 -3 16 -7z m191 -9 c8 -22 8 -24 -8 -24 -9 0 -14 9 -13 20
|
||||
2 24 13 26 21 4z m-2540 -11 c4 -5 13 -8 19 -8 5 0 12 -6 15 -14 3 -9 0 -11
|
||||
-9 -6 -8 5 -11 4 -6 -1 5 -5 12 -9 16 -9 5 0 28 -21 52 -47 24 -26 55 -50 69
|
||||
-54 23 -6 22 -5 -8 21 -40 33 -36 43 9 20 52 -27 135 -16 206 29 38 24 51 36
|
||||
38 37 -12 0 -4 6 19 15 22 8 41 12 44 10 2 -3 -14 -24 -37 -48 -22 -24 -45
|
||||
-57 -51 -72 l-10 -28 -91 4 c-65 3 -84 1 -68 -5 13 -6 32 -9 42 -8 9 1 17 -3
|
||||
17 -8 0 -14 -26 -14 -49 1 -13 8 -29 8 -60 1 -29 -8 -39 -8 -34 0 4 7 0 8 -12
|
||||
4 -9 -4 -23 -3 -30 3 -8 7 -12 5 -12 -5 0 -8 4 -15 9 -15 4 0 8 -5 8 -11 0 -5
|
||||
-4 -7 -10 -4 -5 3 -10 2 -10 -2 0 -5 12 -15 26 -24 22 -14 24 -17 10 -22 -12
|
||||
-5 -15 -3 -10 5 5 8 1 9 -12 4 -10 -4 -15 -4 -11 0 4 4 2 13 -5 21 -6 7 -8 16
|
||||
-5 20 4 3 -1 12 -11 20 -16 12 -15 13 3 6 18 -5 17 -3 -5 23 -15 17 -17 23 -6
|
||||
14 11 -8 17 -10 15 -5 -18 40 -33 65 -41 65 -12 0 -10 -14 4 -28 9 -9 9 -12 0
|
||||
-12 -7 0 -9 -7 -5 -17 6 -15 5 -16 -9 -3 -9 8 -12 16 -8 18 5 2 6 10 3 18 -3
|
||||
8 0 21 7 29 9 11 8 19 -4 37 -9 12 -16 17 -16 11 0 -7 5 -15 10 -18 14 -9 12
|
||||
-22 -3 -22 -7 0 -13 14 -13 34 0 33 5 40 20 26z m496 3 c0 -3 -4 -8 -10 -11
|
||||
-5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m540 -16 c0 -5 -2 -10 -4
|
||||
-10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m1587 -22 c6 -7 13
|
||||
-25 17 -40 10 -41 -15 -58 -84 -58 -65 0 -80 12 -80 64 0 22 4 26 28 25 23 -2
|
||||
24 -2 5 -6 -23 -4 -29 -25 -17 -57 4 -12 20 -16 54 -16 27 0 55 3 64 6 21 8
|
||||
21 58 0 78 -8 9 -11 16 -6 16 5 0 14 -6 19 -12z m-2827 -17 c0 -40 -13 -80
|
||||
-27 -86 -23 -8 -43 14 -44 49 -1 18 -3 23 -6 13 -8 -33 7 -66 37 -82 32 -16
|
||||
40 -35 16 -35 -25 0 -66 43 -72 76 -4 23 0 37 18 57 28 32 78 38 78 8z m500 9
|
||||
c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m2283 3
|
||||
c-7 -2 -21 -2 -30 0 -10 3 -4 5 12 5 17 0 24 -2 18 -5z m-130 -20 c-7 -2 -19
|
||||
-2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m312 -13 c-3 -5 -13 -6 -21 -3 -12
|
||||
4 -13 8 -3 14 15 9 32 2 24 -11z m332 -17 c-3 -10 -5 -4 -5 12 0 17 2 24 5 18
|
||||
2 -7 2 -21 0 -30z m-714 20 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13
|
||||
-5z m172 -10 c-2 -10 -4 -22 -5 -28 -1 -5 -5 -1 -9 10 -9 21 -5 35 9 35 4 0 7
|
||||
-8 5 -17z m710 7 c-16 -4 -39 -8 -50 -8 -16 0 -15 2 5 8 14 4 36 8 50 8 22 0
|
||||
22 -1 -5 -8z m-2368 -8 c15 -10 43 -75 43 -99 -1 -10 -9 5 -18 32 l-17 50 -62
|
||||
3 c-55 3 -61 1 -58 -15 24 -116 45 -256 40 -261 -3 -3 -14 -1 -23 4 -30 20
|
||||
-68 264 -40 264 6 0 9 2 6 5 -7 7 -228 -24 -249 -36 -29 -15 -39 -72 -29 -160
|
||||
11 -99 22 -119 60 -119 17 0 112 9 211 20 100 12 183 19 185 17 4 -4 -345 -53
|
||||
-452 -63 -41 -4 -64 -3 -68 5 -5 7 -1 9 10 4 14 -5 15 -3 4 17 -9 16 -11 51
|
||||
-8 109 6 93 29 156 67 178 24 15 121 31 256 42 55 5 107 9 115 9 8 1 20 -2 27
|
||||
-6z m1420 2 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m463 -24
|
||||
c0 -5 -9 -10 -20 -10 -11 0 -20 5 -20 10 0 6 9 10 20 10 11 0 20 -4 20 -10z
|
||||
m-412 -33 c4 -29 -12 -37 -22 -11 -10 26 -7 46 7 42 6 -3 13 -17 15 -31z m895
|
||||
16 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m-2441 -35 c-9 -9
|
||||
-12 -7 -12 12 0 19 3 21 12 12 9 -9 9 -15 0 -24z m1445 10 c-3 -8 -6 -5 -6 6
|
||||
-1 11 2 17 5 13 3 -3 4 -12 1 -19z m530 6 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6
|
||||
11 1 17 -2 13 -5z m-54 -11 c-7 -2 -21 -2 -30 0 -10 3 -4 5 12 5 17 0 24 -2
|
||||
18 -5z m-118 -19 c-38 -7 -81 -13 -95 -12 -37 0 89 25 130 26 22 0 9 -5 -35
|
||||
-14z m1303 -9 c17 -36 15 -70 -8 -151 -29 -106 -82 -215 -149 -307 -56 -78
|
||||
-151 -180 -151 -163 0 4 -7 1 -15 -7 -21 -22 -168 -69 -191 -61 -13 4 -15 3
|
||||
-6 -4 9 -6 -16 -17 -85 -37 -54 -16 -107 -29 -118 -31 -11 -1 -20 -3 -20 -4 0
|
||||
-1 -15 -4 -32 -6 -24 -4 -33 -1 -33 9 0 25 25 43 80 60 31 9 65 25 76 34 11
|
||||
10 26 19 34 21 44 9 349 172 383 205 22 20 38 39 36 42 -3 2 -84 -22 -179 -55
|
||||
-96 -33 -181 -60 -189 -60 -10 0 -12 8 -6 33 4 17 17 99 29 181 19 124 26 152
|
||||
44 166 50 41 385 159 453 160 29 0 38 -5 47 -25z m-875 -66 c-15 -10 -50 -23
|
||||
-78 -28 -313 -60 -428 -83 -440 -87 -11 -5 -15 1 -15 25 0 26 -4 31 -25 31
|
||||
-51 0 -133 -40 -171 -83 -20 -23 -33 -34 -30 -24 3 10 6 30 6 43 0 42 30 60
|
||||
131 78 262 48 566 109 579 117 10 5 23 -1 43 -23 l28 -31 -28 -18z m-2433 60
|
||||
c0 -5 -4 -7 -10 -4 -5 3 -10 -2 -10 -12 0 -15 -2 -16 -10 -3 -15 23 -12 30 10
|
||||
30 11 0 20 -5 20 -11z m17 -14 c-4 -8 -11 -15 -17 -15 -6 0 -6 7 2 20 14 22
|
||||
24 19 15 -5z m1640 -7 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z
|
||||
m-2170 0 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m133 12 c13 -8
|
||||
13 -10 -2 -10 -9 0 -20 5 -23 10 -8 13 5 13 25 0z m150 -57 c-10 -16 -11 -15
|
||||
-6 7 3 14 6 34 7 45 1 13 3 11 6 -7 2 -15 -1 -35 -7 -45z m2093 60 c-7 -2 -19
|
||||
-2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m177 -14 c0 -6 -4 -7 -10 -4 -5 3
|
||||
-10 11 -10 16 0 6 5 7 10 4 6 -3 10 -11 10 -16z m-232 4 c-10 -2 -26 -2 -35 0
|
||||
-10 3 -2 5 17 5 19 0 27 -2 18 -5z m389 1 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6
|
||||
11 1 17 -2 13 -5z m-2653 -16 c-2 -3 2 -8 8 -10 7 -3 1 -7 -14 -10 -15 -3 -25
|
||||
-1 -22 3 3 5 0 9 -5 9 -6 0 -11 3 -11 8 0 4 11 7 24 7 13 0 22 -3 20 -7z m696
|
||||
-4 c0 -2 -9 -4 -21 -4 -11 0 -18 4 -14 10 5 8 35 3 35 -6z m43 9 c-7 -2 -19
|
||||
-2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m44 -15 c-3 -8 -6 -5 -6 6 -1 11 2
|
||||
17 5 13 3 -3 4 -12 1 -19z m1411 15 c-10 -2 -28 -2 -40 0 -13 2 -5 4 17 4 22
|
||||
1 32 -1 23 -4z m409 1 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z
|
||||
m506 -8 c6 -15 -12 -26 -44 -26 -12 0 -19 7 -19 20 0 15 7 20 29 20 16 0 31
|
||||
-6 34 -14z m45 2 c-6 -18 -25 -20 -31 -3 -5 10 0 15 14 15 12 0 19 -5 17 -12z
|
||||
m-3095 -15 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m2064 -115
|
||||
c-2 -24 -4 -7 -4 37 0 44 2 63 4 43 2 -21 2 -57 0 -80z m-1674 95 c-7 -2 -21
|
||||
-2 -30 0 -10 3 -4 5 12 5 17 0 24 -2 18 -5z m344 -15 c-3 -8 -6 -5 -6 6 -1 11
|
||||
2 17 5 13 3 -3 4 -12 1 -19z m1610 16 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11
|
||||
1 17 -2 13 -5z m-2943 -20 c3 -8 2 -12 -4 -9 -6 3 -10 10 -10 16 0 14 7 11 14
|
||||
-7z m1263 -6 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-284 5
|
||||
c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m1844 1 c-3 -3 -12 -4
|
||||
-19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-2697 -29 c-65 -17 -107 -19 -115 -6
|
||||
-3 6 8 8 27 5 18 -3 47 0 63 5 17 5 41 9 55 9 14 0 0 -6 -30 -13z m640 -15 c0
|
||||
-16 -4 -30 -10 -30 -5 0 -10 14 -10 30 0 17 5 30 10 30 6 0 10 -13 10 -30z
|
||||
m577 8 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m1370 16 c-3 -3
|
||||
-12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-1670 -38 c-1 -29 -4 -33 -24
|
||||
-32 -18 1 -23 7 -23 28 0 24 8 31 42 37 3 0 6 -14 5 -33z m1839 -52 c-3 -8
|
||||
-11 -14 -18 -13 -10 0 -10 2 0 6 6 2 13 21 13 41 2 32 3 33 6 9 3 -16 2 -35
|
||||
-1 -43z m-1529 24 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m2070
|
||||
-20 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-2682 3 c3 -5 1
|
||||
-12 -5 -16 -5 -3 -10 1 -10 9 0 18 6 21 15 7z m2288 2 c-7 -2 -19 -2 -25 0 -7
|
||||
3 -2 5 12 5 14 0 19 -2 13 -5z m-1643 -72 c-1 -13 -29 45 -29 59 0 8 6 0 14
|
||||
-19 8 -18 15 -36 15 -40z m-593 37 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4
|
||||
-12 1 -19z m2467 0 c9 -12 16 -30 16 -40 0 -15 -6 -14 -50 9 -28 14 -53 23
|
||||
-56 20 -3 -3 11 -13 31 -22 20 -10 42 -30 51 -46 l14 -28 -35 1 c-21 1 -35 6
|
||||
-35 14 0 34 -30 44 -128 44 -146 0 -234 -10 -222 -25 8 -9 4 -11 -16 -7 -19 3
|
||||
-22 7 -12 13 7 5 9 9 3 9 -5 0 14 14 44 31 60 34 125 45 288 48 84 1 93 -1
|
||||
107 -21z m160 -248 c-36 -164 -112 -359 -134 -345 -6 4 1 21 16 40 29 38 84
|
||||
200 108 317 9 42 17 117 18 165 l2 88 4 -95 c2 -63 -3 -120 -14 -170z m-631
|
||||
240 c-25 -10 -29 -20 -13 -36 6 -6 -11 -24 -53 -51 -69 -46 -82 -40 -50 25 14
|
||||
28 29 41 63 54 46 17 94 24 53 8z m-1490 -15 l32 5 -29 -10 c-32 -10 -46 -6
|
||||
-45 13 0 9 2 9 5 0 3 -8 18 -10 37 -8z m-565 -92 c14 -12 14 -13 -5 -13 -28 0
|
||||
-32 8 -25 50 l7 35 3 -30 c2 -16 11 -36 20 -42z m212 47 c0 -5 -4 -10 -10 -10
|
||||
-5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m110 -2 c0 -5 -9 -8 -19
|
||||
-8 -11 0 -22 3 -24 8 -3 4 6 7 19 7 13 0 24 -3 24 -7z m2608 -10 c19 -19 14
|
||||
-73 -9 -102 -16 -20 -28 -26 -57 -25 l-37 2 40 6 c31 5 43 12 54 35 19 41 5
|
||||
79 -34 87 l-30 7 31 1 c16 0 35 -4 42 -11z m-2262 -20 c19 -23 19 -23 -1 -6
|
||||
-13 10 -43 18 -80 21 l-60 3 61 2 c52 2 64 -1 80 -20z m1748 4 c2 -4 0 -14 -5
|
||||
-22 -8 -13 -10 -13 -18 0 -10 15 -6 30 9 30 5 0 11 -4 14 -8z m453 2 c-3 -3
|
||||
-12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-2322 -16 c14 -6 25 -14 25
|
||||
-17 0 -4 13 -21 28 -38 l29 -31 -96 -6 c-165 -11 -623 -26 -632 -20 -16 10 -9
|
||||
53 10 64 11 5 43 10 71 10 28 0 133 9 233 20 173 18 234 25 284 28 12 1 34 -3
|
||||
48 -10z m1545 -33 c18 0 24 5 22 17 -1 9 2 20 9 23 7 5 10 -1 7 -15 -7 -52
|
||||
-71 -51 -75 1 -2 24 -2 24 5 -1 6 -18 15 -25 32 -25z m-1952 28 c-10 -2 -26
|
||||
-2 -35 0 -10 3 -2 5 17 5 19 0 27 -2 18 -5z m2374 -20 c26 -30 30 -60 14 -120
|
||||
-21 -85 -76 -223 -96 -243 -11 -11 -63 -24 -156 -39 -76 -12 -149 -25 -161
|
||||
-28 -20 -4 -21 -3 -12 34 5 21 8 98 7 171 -1 74 2 136 8 142 5 5 80 18 165 28
|
||||
86 11 162 22 168 26 6 4 11 16 11 27 0 24 31 25 52 2z m298 -19 c0 -14 -4 -23
|
||||
-9 -20 -5 3 -7 15 -4 26 7 28 13 25 13 -6z m80 11 c0 -8 -5 -17 -12 -21 -7 -4
|
||||
-8 -3 -4 4 4 7 1 12 -8 12 -23 0 -19 15 4 17 11 1 20 -4 20 -12z m-477 -2 c-7
|
||||
-2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m-1713 -28 c0 -8 -4 -15
|
||||
-10 -15 -5 0 -7 7 -4 15 4 8 8 15 10 15 2 0 4 -7 4 -15z m1275 5 c3 -5 -1 -10
|
||||
-9 -10 -9 0 -16 5 -16 10 0 6 4 10 9 10 6 0 13 -4 16 -10z m801 -173 c-25
|
||||
-122 -65 -259 -85 -295 -17 -28 -13 -7 23 111 31 102 52 191 72 302 4 22 9 33
|
||||
11 24 2 -9 -7 -73 -21 -142z m-2170 97 c46 -22 98 -83 158 -185 57 -96 124
|
||||
-193 159 -229 37 -38 60 -78 51 -91 -4 -8 -3 -9 4 -5 7 4 18 -7 28 -26 9 -18
|
||||
44 -73 77 -121 87 -128 157 -180 265 -197 l57 -9 -66 2 c-112 4 -135 25 -338
|
||||
294 -139 185 -178 230 -190 223 -12 -7 -30 13 -83 95 -76 116 -111 149 -171
|
||||
166 -74 20 -433 -9 -532 -44 -21 -7 -47 -25 -57 -38 -16 -21 -17 -29 -7 -59
|
||||
12 -36 116 -188 187 -274 23 -27 38 -54 35 -60 -3 -6 -2 -8 2 -3 5 4 60 -44
|
||||
124 -106 253 -246 556 -429 823 -496 62 -15 87 -28 156 -82 44 -35 77 -66 71
|
||||
-67 -5 -2 -55 6 -111 18 -326 70 -745 297 -979 530 -72 72 -125 166 -107 188
|
||||
8 9 7 11 -3 7 -26 -10 -180 190 -242 313 -45 92 -59 178 -37 232 l12 29 122 4
|
||||
c390 10 558 7 592 -9z m1224 -33 c-28 -56 -35 -52 -8 4 12 24 23 43 26 41 2
|
||||
-2 -6 -22 -18 -45z m1051 29 c24 0 29 -4 29 -23 0 -23 -2 -23 -45 -13 -34 8
|
||||
-45 15 -45 29 0 13 5 17 16 13 9 -3 29 -6 45 -6z m-851 -31 c-14 -5 -33 -20
|
||||
-42 -32 -10 -12 -18 -17 -18 -10 0 16 49 53 69 52 9 0 6 -4 -9 -10z m-2223
|
||||
-61 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m25 -18 c0 -16 3
|
||||
-32 8 -35 5 -3 7 -12 3 -20 -3 -8 0 -15 7 -15 6 0 8 -5 4 -11 -3 -6 -1 -15 6
|
||||
-19 8 -5 9 -10 1 -14 -6 -4 -16 12 -25 41 -8 26 -15 39 -16 28 l-1 -20 -9 20
|
||||
c-12 27 -12 43 0 25 7 -11 10 -5 10 24 0 22 3 36 7 33 3 -4 6 -20 5 -37z
|
||||
m2224 -14 c17 5 18 5 2 -6 -20 -12 -58 2 -58 22 0 6 8 4 19 -6 10 -9 26 -14
|
||||
37 -10z m-1647 11 c-2 -1 -15 -11 -29 -22 l-25 -20 19 23 c11 12 24 22 29 22
|
||||
6 0 8 -1 6 -3z m63 -14 c8 -10 47 -73 86 -140 40 -67 84 -136 99 -155 15 -18
|
||||
21 -28 12 -21 -11 9 -31 10 -68 4 -58 -9 -112 -1 -138 21 -25 19 -87 88 -97
|
||||
107 -5 9 10 -5 32 -30 23 -26 57 -54 76 -63 37 -18 141 -22 151 -6 3 5 -5 25
|
||||
-18 42 -14 18 -50 78 -82 133 -31 55 -64 106 -73 113 -9 6 -11 12 -5 12 5 0
|
||||
16 -8 25 -17z m1391 -338 c8 -44 18 -109 22 -145 6 -62 5 -67 -20 -93 -41 -40
|
||||
-117 -73 -250 -107 -65 -17 -121 -33 -123 -35 -3 -2 9 -26 26 -52 17 -26 47
|
||||
-84 67 -128 25 -56 53 -97 92 -136 l55 -56 -29 -6 c-15 -3 -28 -5 -28 -4 0 1
|
||||
-11 22 -24 47 -13 25 -50 97 -82 160 -32 63 -66 127 -76 142 -11 18 -14 31 -7
|
||||
38 5 5 54 21 109 35 208 52 221 71 194 287 -9 75 -8 91 5 110 19 26 24 214 6
|
||||
203 -6 -4 0 15 12 40 l23 47 6 -133 c4 -74 14 -170 22 -214z m-1686 273 c-3
|
||||
-8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-359 -18 c-7 -10 -14 -17
|
||||
-17 -15 -4 4 18 35 25 35 2 0 -1 -9 -8 -20z m460 -149 c19 -17 49 -33 65 -37
|
||||
15 -3 26 -8 23 -11 -2 -3 -20 0 -40 7 -41 13 -109 84 -131 136 -26 63 -17 60
|
||||
16 -4 17 -34 47 -75 67 -91z m-457 112 c-12 -20 -14 -14 -5 12 4 9 9 14 11 11
|
||||
3 -2 0 -13 -6 -23z m579 7 c0 -4 7 -11 16 -14 12 -4 15 -2 10 9 -8 21 1 19 13
|
||||
-3 15 -28 -22 -25 -50 4 -18 19 -19 23 -6 18 9 -3 17 -10 17 -14z m585 0 c10
|
||||
-11 16 -20 13 -20 -3 0 -13 9 -23 20 -10 11 -16 20 -13 20 3 0 13 -9 23 -20z
|
||||
m-1112 -7 c-4 -10 -2 -14 4 -10 12 7 39 -50 35 -72 -2 -7 1 -10 7 -6 7 4 8 0
|
||||
5 -10 -4 -10 -2 -15 6 -13 7 2 15 -3 17 -10 8 -20 -21 -9 -34 13 -10 18 -11
|
||||
18 -10 -7 1 -14 6 -24 11 -20 5 3 6 -3 3 -14 -6 -16 -5 -17 6 -4 20 25 35 21
|
||||
59 -13 13 -17 24 -35 24 -39 1 -5 2 -13 3 -19 0 -5 5 -8 10 -5 10 6 111 -109
|
||||
111 -126 0 -5 -9 -12 -21 -15 -11 -3 -18 -11 -15 -19 3 -7 0 -16 -7 -20 -7 -4
|
||||
-9 -3 -4 1 4 5 -1 18 -12 29 -33 37 -55 77 -39 71 8 -3 22 -19 31 -35 12 -19
|
||||
23 -27 33 -23 11 4 12 9 4 17 -6 6 -15 11 -21 11 -5 0 -23 20 -39 45 -16 25
|
||||
-30 40 -30 35 0 -6 5 -16 11 -22 7 -7 6 -12 -5 -16 -10 -4 -13 -1 -9 9 3 10 0
|
||||
12 -10 8 -8 -3 -18 -1 -22 5 -3 6 0 9 8 5 8 -3 17 2 21 11 7 19 -10 55 -25 55
|
||||
-6 0 -7 5 -4 10 3 6 1 10 -5 10 -6 0 -9 4 -5 9 9 16 -13 23 -34 11 -17 -9 -22
|
||||
-6 -34 17 -8 16 -12 34 -9 42 3 9 0 11 -8 6 -9 -5 -11 -4 -6 4 4 6 12 8 18 5
|
||||
8 -5 9 -1 3 12 -4 10 -7 28 -7 39 1 18 -1 18 -19 -5 -17 -21 -19 -22 -10 -3
|
||||
16 31 13 41 -4 19 -20 -27 -19 -11 1 19 19 29 26 32 17 8z m1897 -53 c-7 -52
|
||||
-7 -53 -9 -13 -1 36 7 80 14 71 1 -2 -1 -28 -5 -58z m-80 45 c0 -2 -10 -10
|
||||
-22 -16 -21 -11 -22 -11 -9 4 13 16 31 23 31 12z m-50 -30 c0 -6 -56 -35 -67
|
||||
-35 -4 1 8 9 27 20 39 22 40 22 40 15z m-514 -43 c-5 -4 -66 26 -66 33 0 3 16
|
||||
-3 35 -12 19 -9 33 -18 31 -21z m1107 -153 l-177 -191 -12 65 c-15 81 -25 100
|
||||
-80 158 l-44 45 160 33 c88 18 195 43 237 56 43 12 82 23 86 24 4 1 -72 -85
|
||||
-170 -190z m-1205 103 c48 -81 157 -186 221 -215 39 -17 59 -19 145 -14 126 7
|
||||
194 27 242 72 20 19 38 35 39 35 1 0 20 -39 41 -86 42 -96 41 -107 -17 -136
|
||||
-60 -30 -191 -59 -290 -65 l-95 -6 -37 44 c-142 168 -322 439 -293 439 2 0 22
|
||||
-31 44 -68z m502 43 c-19 -7 -46 -13 -60 -13 -16 0 -10 4 20 12 60 18 84 18
|
||||
40 1z m-345 -5 c13 -5 14 -9 5 -9 -8 0 -24 4 -35 9 -13 5 -14 9 -5 9 8 0 24
|
||||
-4 35 -9z m492 -12 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z
|
||||
m1610 -25 c-3 -10 -5 -4 -5 12 0 17 2 24 5 18 2 -7 2 -21 0 -30z m-2009 20
|
||||
c-10 -2 -28 -2 -40 0 -13 2 -5 4 17 4 22 1 32 -1 23 -4z m145 0 c-13 -2 -35
|
||||
-2 -50 0 -16 2 -5 4 22 4 28 0 40 -2 28 -4z m174 -86 c24 -61 25 -69 11 -83
|
||||
-13 -14 -18 -6 -47 72 -24 67 -29 89 -19 95 15 10 21 1 55 -84z m1066 52 c26
|
||||
-32 18 -62 -47 -194 -58 -117 -174 -298 -260 -405 -51 -63 -52 -66 -40 -96
|
||||
l13 -31 -77 -49 c-42 -28 -93 -60 -113 -72 l-37 -22 10 42 c5 24 8 84 6 135
|
||||
-3 82 -2 89 11 70 27 -42 65 -77 82 -77 27 0 188 176 265 290 87 129 135 216
|
||||
164 297 21 59 22 64 6 88 -20 31 -37 31 -138 3 -82 -22 -97 -34 -152 -121 -17
|
||||
-27 -17 -28 1 -18 10 6 28 18 41 27 12 9 22 12 22 6 0 -6 -35 -39 -77 -75
|
||||
-142 -118 -226 -195 -246 -227 -19 -31 -19 -33 -2 -153 18 -124 13 -218 -15
|
||||
-291 -10 -27 -61 -57 -149 -87 -73 -26 -79 -25 -90 19 -16 55 -15 58 30 71 71
|
||||
21 79 37 79 150 0 89 -44 488 -71 649 -6 35 -9 66 -6 69 9 8 117 -97 133 -130
|
||||
8 -15 24 -83 35 -150 11 -67 23 -125 27 -128 4 -4 58 39 121 94 89 80 125 120
|
||||
163 182 58 95 74 110 126 119 22 3 50 15 63 26 32 27 96 21 122 -11z m516 -85
|
||||
c-11 -117 -6 -187 18 -274 29 -107 82 -165 231 -254 34 -21 62 -40 62 -43 0
|
||||
-6 -80 40 -150 88 -76 51 -114 94 -147 164 -24 52 -28 75 -31 177 -4 100 12
|
||||
267 24 255 2 -2 -1 -53 -7 -113z m-1482 54 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13
|
||||
3 -3 4 -12 1 -19z m-1741 4 c-3 -5 4 -23 15 -41 11 -18 18 -36 15 -39 -4 -3
|
||||
-6 0 -6 7 0 7 -5 9 -12 5 -7 -5 -8 -3 -3 6 6 10 4 12 -8 7 -19 -7 -29 16 -14
|
||||
33 10 10 8 12 -7 6 -16 -5 -17 -4 -6 9 13 15 35 21 26 7z m451 2 c-3 -3 -12
|
||||
-4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m3228 -54 c3 -6 -1 -7 -9 -4 -18 7
|
||||
-21 14 -7 14 6 0 13 -4 16 -10z m-2565 -40 c6 -11 8 -20 6 -20 -3 0 -10 9 -16
|
||||
20 -6 11 -8 20 -6 20 3 0 10 -9 16 -20z m678 -90 c0 -8 -6 1 -13 20 -7 19 -13
|
||||
42 -13 50 0 8 6 -1 13 -20 7 -19 13 -42 13 -50z m-1121 -6 c-3 -3 -12 -4 -19
|
||||
-1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-82 -19 c-27 -7 -59 -13 -70 -13 -11 0 3
|
||||
6 30 13 28 7 59 13 70 13 11 0 -2 -6 -30 -13z m-98 -21 c-3 -3 -12 -4 -19 -1
|
||||
-8 3 -5 6 6 6 11 1 17 -2 13 -5z m754 -61 c13 -16 12 -17 -3 -4 -10 7 -18 15
|
||||
-18 17 0 8 8 3 21 -13z m681 -30 c-17 -30 -60 -66 -72 -58 -7 4 1 16 22 31 18
|
||||
13 36 31 41 40 5 9 11 13 14 11 2 -3 0 -14 -5 -24z m-30 -76 c-6 -6 -12 -28
|
||||
-15 -47 l-4 -35 -1 36 c-1 19 3 40 10 47 16 16 23 15 10 -1z m-218 -24 c2 -10
|
||||
10 -44 16 -77 7 -32 21 -83 31 -114 32 -91 21 -117 -26 -66 -24 26 -29 49 -39
|
||||
202 -4 66 6 97 18 55z m-2870 -113 c23 -69 36 -127 35 -157 l-1 -48 -8 45 c-7
|
||||
44 -54 223 -66 255 -4 8 -4 15 -1 15 3 0 22 -49 41 -110z m2681 -50 c25 -49
|
||||
43 -90 40 -90 -3 0 -25 41 -50 90 -25 50 -43 90 -40 90 3 0 25 -40 50 -90z
|
||||
m402 58 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m10 -50 c-3 -7
|
||||
-5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m10 -60 c-3 -7 -5 -2 -5 12 0
|
||||
14 2 19 5 13 2 -7 2 -19 0 -25z m1798 -91 c6 -6 -26 9 -70 32 -44 23 -84 47
|
||||
-90 53 -12 13 146 -71 160 -85z m-1788 31 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13
|
||||
2 -7 2 -19 0 -25z m694 15 c13 -16 12 -17 -3 -4 -10 7 -18 15 -18 17 0 8 8 3
|
||||
21 -13z m408 -9 c15 -15 14 -16 -6 -9 -26 7 -181 -20 -231 -41 l-34 -14 22
|
||||
-35 c12 -20 20 -38 17 -41 -3 -3 -17 15 -32 41 -27 44 -27 46 -9 60 11 8 21
|
||||
15 24 15 3 0 41 12 85 25 86 27 138 26 164 -1z m-1455 -43 c14 -26 39 -60 56
|
||||
-75 17 -14 26 -26 20 -26 -19 0 -57 45 -84 99 -15 28 -24 51 -21 51 2 0 16
|
||||
-22 29 -49z m-292 -13 c-17 -17 -25 -3 -17 29 l7 28 11 -23 c7 -16 7 -26 -1
|
||||
-34z m614 -3 c28 -13 54 -27 57 -32 5 -8 -36 9 -133 55 l-25 12 25 -6 c14 -4
|
||||
48 -17 76 -29z m41 3 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z
|
||||
m1038 -2 c-49 -12 -101 -26 -115 -30 -14 -5 -22 -5 -18 -1 11 11 167 53 198
|
||||
54 14 0 -15 -10 -65 -23z m861 -44 c-5 -4 -66 26 -66 33 0 3 16 -3 35 -12 19
|
||||
-9 33 -18 31 -21z m-1999 -52 c7 -8 13 -19 13 -24 0 -4 -9 2 -19 15 -15 18
|
||||
-28 23 -57 22 l-39 -2 30 13 c31 15 44 10 72 -24z m-2582 -10 c-11 -5 -27 -9
|
||||
-35 -9 -9 0 -8 4 5 9 11 5 27 9 35 9 9 0 8 -4 -5 -9z m2619 -100 c5 -24 4 -30
|
||||
-3 -20 -5 8 -12 33 -15 55 -8 48 8 19 18 -35z m-31 7 c5 -16 7 -31 4 -33 -7
|
||||
-8 -136 -29 -140 -23 -2 2 -7 18 -10 36 -6 31 -5 32 36 42 70 16 99 10 110
|
||||
-22z m-2116 -19 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m10 -70
|
||||
c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m10 -60 c-3 -7 -5 -2 -5
|
||||
12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m10 -60 c-3 -7 -5 -2 -5 12 0 14 2 19 5
|
||||
13 2 -7 2 -19 0 -25z m3438 -74 c17 -16 21 -20 8 -10 -27 23 -30 15 -7 -19 10
|
||||
-15 21 -22 31 -18 11 4 14 2 9 -5 -13 -22 -36 -12 -57 23 -23 38 -45 49 -83
|
||||
39 -31 -7 -34 6 -6 31 11 10 20 25 20 34 0 11 9 6 28 -15 15 -18 41 -45 57
|
||||
-60z m92 39 c-3 -10 -5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z m-3520
|
||||
-15 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m10 -55 c-3 -10 -5
|
||||
-4 -5 12 0 17 2 24 5 18 2 -7 2 -21 0 -30z m3613 17 c0 -5 -2 -10 -4 -10 -3 0
|
||||
-8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m-104 -42 l29 -33 -32 29 c-31
|
||||
28 -38 36 -30 36 2 0 16 -15 33 -32z m101 16 c-3 -3 -12 -4 -19 -1 -8 3 -5 6
|
||||
6 6 11 1 17 -2 13 -5z m-3600 -46 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2
|
||||
-19 0 -25z m3118 -91 c110 -82 107 -93 -7 -32 -59 31 -119 58 -133 59 -26 3
|
||||
-75 57 -75 83 0 18 139 -53 215 -110z m-3108 41 c-3 -7 -5 -2 -5 12 0 14 2 19
|
||||
5 13 2 -7 2 -19 0 -25z m3123 -14 c0 -7 -58 25 -65 36 -3 5 10 1 29 -11 20
|
||||
-12 36 -23 36 -25z m-2019 19 c13 -16 12 -17 -3 -4 -10 7 -18 15 -18 17 0 8 8
|
||||
3 21 -13z m-1094 -45 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z
|
||||
m-32 -238 c10 -11 16 -20 13 -20 -3 0 -13 9 -23 20 -10 11 -16 20 -13 20 3 0
|
||||
13 -9 23 -20z"/>
|
||||
<path d="M2205 4269 c395 -19 544 -32 650 -53 29 -6 29 -6 5 4 -60 27 -492 62
|
||||
-715 59 -88 -2 -81 -3 60 -10z"/>
|
||||
<path d="M3019 4147 c5 -5 24 -7 42 -5 33 3 33 4 -8 8 -23 3 -39 2 -34 -3z"/>
|
||||
<path d="M2700 4106 c0 -3 21 -19 48 -37 26 -17 77 -61 114 -97 37 -36 70 -63
|
||||
73 -60 8 8 -107 112 -176 158 -32 23 -59 39 -59 36z"/>
|
||||
<path d="M3960 3599 c0 -12 224 -18 308 -8 132 15 239 -21 289 -97 9 -14 40
|
||||
-89 70 -167 30 -78 61 -152 69 -164 17 -26 42 -29 70 -9 18 14 18 15 1 22 -13
|
||||
5 -15 9 -7 14 15 9 -41 187 -70 222 -16 20 -22 22 -48 12 -29 -11 -30 -11 -52
|
||||
42 -23 57 -62 97 -120 123 -29 13 -76 16 -272 16 -131 0 -238 -3 -238 -6z"/>
|
||||
<path d="M4041 3370 c15 -47 36 -126 46 -177 10 -50 21 -89 24 -87 4 2 5 -4 2
|
||||
-15 -4 -15 0 -18 19 -15 12 2 90 13 173 24 93 12 155 25 164 34 12 13 11 24
|
||||
-9 88 -31 99 -67 181 -86 194 -10 8 -67 11 -177 9 -130 -2 -142 -1 -62 4 84 6
|
||||
91 8 40 10 -33 1 -83 6 -111 10 l-51 7 28 -86z m375 -102 c19 -59 33 -112 29
|
||||
-118 -3 -5 -21 -9 -38 -9 -32 2 -32 2 -4 6 27 4 28 7 23 38 -4 19 -20 74 -36
|
||||
122 -16 48 -30 90 -30 93 0 18 25 -41 56 -132z m-178 95 c-15 -2 -42 -2 -60 0
|
||||
-18 2 -6 4 27 4 33 0 48 -2 33 -4z m70 -50 c-16 -2 -40 -2 -55 0 -16 2 -3 4
|
||||
27 4 30 0 43 -2 28 -4z m-120 -10 c-15 -2 -42 -2 -60 0 -18 2 -6 4 27 4 33 0
|
||||
48 -2 33 -4z m155 -40 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z
|
||||
m-153 -13 c11 -7 2 -10 -32 -10 -27 0 -48 5 -48 10 0 13 60 13 80 0z m83 3
|
||||
c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m15 -60 c-10 -2 -28 -2
|
||||
-40 0 -13 2 -5 4 17 4 22 1 32 -1 23 -4z m-90 -10 c-10 -2 -28 -2 -40 0 -13 2
|
||||
-5 4 17 4 22 1 32 -1 23 -4z m155 -50 c-13 -2 -33 -2 -45 0 -13 2 -3 4 22 4
|
||||
25 0 35 -2 23 -4z m-85 -10 c-10 -2 -26 -2 -35 0 -10 3 -2 5 17 5 19 0 27 -2
|
||||
18 -5z m-75 -10 c-13 -2 -33 -2 -45 0 -13 2 -3 4 22 4 25 0 35 -2 23 -4z"/>
|
||||
<path d="M4542 3340 c10 -30 28 -50 28 -31 0 20 -20 61 -29 61 -6 0 -6 -11 1
|
||||
-30z"/>
|
||||
<path d="M4582 3210 c0 -14 2 -19 5 -12 2 6 2 18 0 25 -3 6 -5 1 -5 -13z"/>
|
||||
<path d="M1950 3510 c0 -5 18 -10 40 -10 22 0 40 5 40 10 0 6 -18 10 -40 10
|
||||
-22 0 -40 -4 -40 -10z"/>
|
||||
<path d="M1530 3470 c0 -5 16 -10 35 -10 19 0 35 5 35 10 0 6 -16 10 -35 10
|
||||
-19 0 -35 -4 -35 -10z"/>
|
||||
<path d="M1451 3451 c-10 -6 -9 -10 3 -14 8 -3 18 -2 21 3 8 13 -9 20 -24 11z"/>
|
||||
<path d="M1216 3405 c-22 -22 -20 -42 5 -55 27 -15 51 5 47 39 -4 31 -29 38
|
||||
-52 16z"/>
|
||||
<path d="M1556 3335 c-9 -26 -7 -32 5 -12 6 10 9 21 6 23 -2 3 -7 -2 -11 -11z"/>
|
||||
<path d="M1423 3263 c9 -2 23 -2 30 0 6 3 -1 5 -18 5 -16 0 -22 -2 -12 -5z"/>
|
||||
<path d="M1353 3253 c9 -2 25 -2 35 0 9 3 1 5 -18 5 -19 0 -27 -2 -17 -5z"/>
|
||||
<path d="M1278 3243 c12 -2 30 -2 40 0 9 3 -1 5 -23 4 -22 0 -30 -2 -17 -4z"/>
|
||||
<path d="M1210 3231 c0 -5 9 -7 20 -4 11 3 20 7 20 9 0 2 -9 4 -20 4 -11 0
|
||||
-20 -4 -20 -9z"/>
|
||||
<path d="M1233 3203 c9 -2 23 -2 30 0 6 3 -1 5 -18 5 -16 0 -22 -2 -12 -5z"/>
|
||||
<path d="M1300 3200 c0 -13 30 -13 50 0 11 7 7 10 -17 10 -18 0 -33 -4 -33
|
||||
-10z"/>
|
||||
<path d="M1180 3134 c-6 -14 -10 -30 -10 -35 0 -15 47 -59 62 -59 21 1 50 48
|
||||
43 70 -17 53 -78 69 -95 24z"/>
|
||||
<path d="M1297 3114 c-8 -8 1 -24 14 -24 5 0 9 7 9 15 0 15 -12 20 -23 9z"/>
|
||||
<path d="M531 3114 c0 -11 3 -14 6 -6 3 7 2 16 -1 19 -3 4 -6 -2 -5 -13z"/>
|
||||
<path d="M511 3044 c0 -11 3 -14 6 -6 3 7 2 16 -1 19 -3 4 -6 -2 -5 -13z"/>
|
||||
<path d="M2780 3370 c0 -6 7 -10 15 -10 8 0 15 2 15 4 0 2 -7 6 -15 10 -8 3
|
||||
-15 1 -15 -4z"/>
|
||||
<path d="M2835 3290 l-30 -8 35 0 c19 0 49 4 65 8 l30 8 -35 0 c-19 0 -48 -4
|
||||
-65 -8z"/>
|
||||
<path d="M2778 3283 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M2776 3253 c-12 -12 -5 -23 14 -23 11 0 20 4 20 9 0 11 -26 22 -34
|
||||
14z"/>
|
||||
<path d="M2972 3229 c2 -7 10 -15 17 -17 8 -3 12 1 9 9 -2 7 -10 15 -17 17 -8
|
||||
3 -12 -1 -9 -9z"/>
|
||||
<path d="M2915 3220 c-3 -6 1 -7 9 -4 18 7 21 14 7 14 -6 0 -13 -4 -16 -10z"/>
|
||||
<path d="M2600 3069 c-110 -22 -231 -114 -280 -214 -22 -43 -25 -64 -24 -145
|
||||
0 -90 9 -129 49 -225 8 -18 7 -18 -8 -7 -24 20 -57 117 -64 189 -3 36 -9 59
|
||||
-13 53 -5 -8 -18 -1 -41 19 -18 17 -39 31 -46 31 -6 0 -16 6 -20 13 -4 8 -18
|
||||
16 -30 19 -21 6 -23 2 -25 -35 -1 -37 -2 -35 -9 18 -5 48 -6 43 -3 -30 4 -111
|
||||
31 -210 88 -324 106 -210 256 -392 351 -425 106 -37 268 -31 391 15 55 21 154
|
||||
91 154 110 0 6 -19 -6 -43 -25 -46 -37 -131 -80 -182 -91 -22 -5 -26 -4 -16 3
|
||||
12 9 9 16 -17 40 -18 17 -32 34 -32 39 0 4 5 1 10 -7 8 -12 10 -11 10 8 0 14
|
||||
-6 22 -17 22 -13 0 -15 2 -5 8 21 14 -16 82 -44 82 -6 0 -37 24 -69 54 l-58
|
||||
54 54 -19 c30 -10 71 -18 91 -19 87 0 206 71 258 155 35 57 80 195 80 247 0
|
||||
56 -30 153 -65 208 -90 143 -255 212 -425 179z m164 -14 c37 -8 88 -26 112
|
||||
-40 54 -32 117 -93 108 -106 -3 -5 0 -8 7 -7 18 4 68 -98 80 -166 11 -59 5
|
||||
-131 -12 -142 -5 -3 -9 -14 -9 -25 0 -35 -56 -143 -95 -183 -21 -21 -63 -50
|
||||
-93 -64 -73 -33 -177 -29 -245 11 -63 37 -142 127 -166 190 -11 28 -20 43 -20
|
||||
32 -1 -29 34 -101 70 -146 27 -34 29 -53 4 -31 -11 10 -105 46 -120 47 -5 0
|
||||
-10 7 -11 15 0 8 -10 36 -22 61 -34 73 -55 176 -48 242 15 149 137 278 296
|
||||
313 73 16 83 16 164 -1z m-203 -702 c13 -16 12 -17 -3 -4 -10 7 -18 15 -18 17
|
||||
0 8 8 3 21 -13z"/>
|
||||
<path d="M2693 2919 c157 -23 267 -152 267 -312 0 -67 -31 -149 -66 -177 -18
|
||||
-14 -18 -14 -4 5 14 19 14 19 -2 6 -10 -7 -16 -17 -13 -21 10 -16 -79 -52
|
||||
-125 -52 -49 1 -130 28 -130 43 0 5 -7 9 -16 9 -8 0 -13 4 -10 8 5 9 -23 37
|
||||
-39 38 -5 0 -23 22 -40 49 -23 38 -30 62 -33 115 -5 86 10 132 60 186 58 63
|
||||
120 77 215 49 68 -20 133 -84 161 -156 12 -30 21 -46 21 -36 2 35 -42 108 -89
|
||||
150 -54 49 -103 67 -179 67 -121 0 -211 -101 -211 -238 0 -81 24 -143 77 -202
|
||||
104 -116 249 -139 358 -56 87 66 117 234 63 349 -15 32 -32 56 -38 52 -5 -3
|
||||
-7 0 -4 9 8 21 -87 93 -148 111 -29 8 -70 14 -92 14 -37 -1 -35 -2 17 -10z"/>
|
||||
<path d="M2549 2889 l-24 -20 30 17 c39 24 40 24 28 24 -6 0 -21 -9 -34 -21z"/>
|
||||
<path d="M2990 2881 c0 -6 4 -13 10 -16 6 -3 7 1 4 9 -7 18 -14 21 -14 7z"/>
|
||||
<path d="M3011 2847 c-1 -5 4 -17 9 -27 6 -10 17 -43 25 -72 12 -41 14 -44 11
|
||||
-16 -4 33 -43 133 -45 115z"/>
|
||||
<path d="M2668 2803 c-44 -7 -78 -56 -78 -113 0 -41 5 -55 31 -85 56 -63 111
|
||||
-80 169 -50 39 20 60 53 60 93 0 98 -84 169 -182 155z m99 -33 c37 -22 49 -41
|
||||
61 -98 8 -33 6 -46 -9 -71 -20 -33 -69 -48 -111 -36 -30 9 -108 85 -108 105 0
|
||||
29 21 89 36 105 22 21 92 19 131 -5z"/>
|
||||
<path d="M2642 2758 c-7 -7 -12 -27 -12 -45 0 -28 3 -33 23 -32 16 1 18 2 5 6
|
||||
-10 2 -18 13 -18 23 0 35 12 50 41 50 l28 0 -14 -40 c-8 -22 -10 -40 -6 -40 5
|
||||
0 12 16 15 35 4 19 9 35 12 35 29 0 82 -68 66 -85 -4 -4 0 -6 8 -3 17 6 16 44
|
||||
-3 66 -29 36 -121 54 -145 30z"/>
|
||||
<path d="M2643 2658 c2 -7 9 -12 15 -11 6 2 9 -3 6 -11 -6 -15 32 -46 56 -46
|
||||
9 0 26 7 39 16 18 13 20 18 10 25 -9 6 -1 7 21 3 26 -4 31 -3 19 5 -14 9 -124
|
||||
31 -157 31 -8 0 -12 -6 -9 -12z"/>
|
||||
<path d="M2777 2595 c-15 -14 -24 -25 -19 -25 5 0 19 11 32 25 30 32 23 32
|
||||
-13 0z"/>
|
||||
<path d="M2423 2640 c0 -30 2 -43 4 -27 2 15 2 39 0 55 -2 15 -4 2 -4 -28z"/>
|
||||
<path d="M2943 2610 c0 -25 2 -35 4 -22 2 12 2 32 0 45 -2 12 -4 2 -4 -23z"/>
|
||||
<path d="M2928 2540 c-3 -14 -9 -34 -12 -45 -4 -11 0 -7 9 8 9 16 15 36 13 45
|
||||
-3 12 -6 10 -10 -8z"/>
|
||||
<path d="M2092 2885 c0 -16 2 -22 5 -12 2 9 2 23 0 30 -3 6 -5 -1 -5 -18z"/>
|
||||
<path d="M2810 2112 c0 -26 6 -30 35 -24 18 3 25 11 25 26 -1 19 -2 19 -11 4
|
||||
-12 -22 -29 -23 -29 -3 0 8 -4 15 -10 15 -5 0 -10 -8 -10 -18z"/>
|
||||
<path d="M1788 2883 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
|
||||
<path d="M1738 2873 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
|
||||
<path d="M1688 2863 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M1638 2853 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M1598 2843 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M1005 2793 c14 -29 30 -55 35 -58 12 -7 -36 85 -51 100 -6 6 1 -13
|
||||
16 -42z"/>
|
||||
<path d="M1059 2751 c13 -12 28 -21 34 -21 12 0 11 0 -28 24 l-30 17 24 -20z"/>
|
||||
<path d="M4615 2575 c-202 -63 -195 -60 -195 -94 0 -15 -7 -61 -16 -100 -9
|
||||
-40 -14 -74 -11 -77 3 -3 83 23 177 58 196 72 196 71 206 187 6 57 4 71 -7 71
|
||||
-8 -1 -77 -21 -154 -45z m142 -7 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4
|
||||
-12 1 -19z m3 -27 c0 -5 -8 -17 -17 -27 -17 -17 -18 -17 -21 1 -2 9 2 21 10
|
||||
26 17 11 28 11 28 0z m-80 -40 c0 -20 -103 -76 -121 -66 -19 13 -7 27 44 50
|
||||
56 26 77 31 77 16z m45 -31 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4
|
||||
10 3 0 8 -4 11 -10z m-221 -37 c4 -9 2 -21 -4 -27 -7 -7 -10 -3 -10 11 0 12
|
||||
-6 24 -12 26 -8 4 -7 6 3 6 9 1 20 -7 23 -16z"/>
|
||||
<path d="M3768 2283 c-27 -4 -28 -7 -28 -64 l0 -59 -32 1 c-24 1 -27 3 -10 6
|
||||
20 4 22 10 22 59 0 36 -4 54 -12 54 -7 0 -74 -9 -148 -20 -74 -11 -136 -20
|
||||
-137 -20 -8 0 -1 -230 6 -235 9 -5 266 38 299 50 7 2 12 22 12 47 1 24 7 70
|
||||
13 103 12 55 15 60 39 60 17 -1 24 4 21 12 -3 7 -8 12 -12 12 -3 -1 -18 -4
|
||||
-33 -6z m-78 -58 c0 -21 -5 -25 -29 -25 -17 0 -33 5 -36 10 -13 21 4 40 35 40
|
||||
25 0 30 -4 30 -25z m-32 -72 c-10 -2 -26 -2 -35 0 -10 3 -2 5 17 5 19 0 27 -2
|
||||
18 -5z m42 -52 c0 -19 -35 -39 -47 -27 -4 3 1 6 10 6 22 0 30 17 11 24 -8 3
|
||||
-12 2 -9 -4 3 -6 -1 -10 -9 -10 -9 0 -16 7 -16 15 0 10 10 15 30 15 23 0 30
|
||||
-5 30 -19z"/>
|
||||
<path d="M1335 1733 c34 -53 45 -67 45 -60 0 10 -51 87 -57 87 -3 0 3 -12 12
|
||||
-27z"/>
|
||||
<path d="M3303 1580 c0 -25 2 -35 4 -22 2 12 2 32 0 45 -2 12 -4 2 -4 -23z"/>
|
||||
<path d="M3313 1465 c-1 -27 2 -88 6 -135 8 -83 8 -83 8 -20 0 36 -3 97 -7
|
||||
135 -6 61 -7 64 -7 20z"/>
|
||||
<path d="M3332 1215 c0 -16 2 -22 5 -12 2 9 2 23 0 30 -3 6 -5 -1 -5 -18z"/>
|
||||
<path d="M4226 5085 c-9 -26 -7 -32 5 -12 6 10 9 21 6 23 -2 3 -7 -2 -11 -11z"/>
|
||||
<path d="M3395 5055 c6 -2 78 -15 161 -29 83 -14 166 -29 185 -32 19 -4 32 -4
|
||||
29 -1 -3 3 -68 17 -145 31 -139 25 -249 40 -230 31z"/>
|
||||
<path d="M4185 5000 c-9 -16 -13 -30 -11 -30 3 0 12 14 21 30 9 17 13 30 11
|
||||
30 -3 0 -12 -13 -21 -30z"/>
|
||||
<path d="M3788 4983 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
|
||||
<path d="M3838 4973 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
|
||||
<path d="M3898 4963 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M4140 4920 c-6 -11 -8 -20 -6 -20 3 0 10 9 16 20 6 11 8 20 6 20 -3
|
||||
0 -10 -9 -16 -20z"/>
|
||||
<path d="M4069 4813 c-13 -16 -12 -17 4 -4 9 7 17 15 17 17 0 8 -8 3 -21 -13z"/>
|
||||
<path d="M3979 4693 c-13 -16 -12 -17 4 -4 16 13 21 21 13 21 -2 0 -10 -8 -17
|
||||
-17z"/>
|
||||
<path d="M4523 4623 c9 -2 25 -2 35 0 9 3 1 5 -18 5 -19 0 -27 -2 -17 -5z"/>
|
||||
<path d="M4603 4613 c9 -2 25 -2 35 0 9 3 1 5 -18 5 -19 0 -27 -2 -17 -5z"/>
|
||||
<path d="M4673 4603 c9 -2 25 -2 35 0 9 3 1 5 -18 5 -19 0 -27 -2 -17 -5z"/>
|
||||
<path d="M4753 4593 c9 -2 25 -2 35 0 9 3 1 5 -18 5 -19 0 -27 -2 -17 -5z"/>
|
||||
<path d="M4833 4583 c9 -2 23 -2 30 0 6 3 -1 5 -18 5 -16 0 -22 -2 -12 -5z"/>
|
||||
<path d="M4898 4573 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
|
||||
<path d="M5055 4500 c-3 -5 -11 -7 -18 -4 -12 4 -527 -103 -536 -112 -6 -6
|
||||
-12 -6 200 20 107 14 245 28 307 32 l112 7 0 27 c0 20 -6 29 -22 34 -31 8 -36
|
||||
8 -43 -4z"/>
|
||||
<path d="M4468 4373 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M4418 4363 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M4813 4323 c32 -2 81 -2 110 0 29 2 3 3 -58 3 -60 0 -84 -1 -52 -3z"/>
|
||||
<path d="M4523 4313 c9 -2 25 -2 35 0 9 3 1 5 -18 5 -19 0 -27 -2 -17 -5z"/>
|
||||
<path d="M120 4230 c0 -5 5 -10 10 -10 6 0 10 5 10 10 0 6 -4 10 -10 10 -5 0
|
||||
-10 -4 -10 -10z"/>
|
||||
<path d="M4655 4224 c-88 -8 -177 -12 -197 -9 -42 6 -48 1 -18 -15 13 -7 87
|
||||
-4 257 10 131 11 270 21 308 23 39 2 12 3 -60 4 -71 0 -202 -6 -290 -13z"/>
|
||||
<path d="M4947 4203 c18 -2 50 -2 70 0 21 2 7 4 -32 4 -38 0 -55 -2 -38 -4z"/>
|
||||
<path d="M4720 4190 c-25 -4 1 -5 60 -2 58 2 107 6 109 8 7 7 -121 1 -169 -6z"/>
|
||||
<path d="M4613 4173 c9 -2 25 -2 35 0 9 3 1 5 -18 5 -19 0 -27 -2 -17 -5z"/>
|
||||
<path d="M398 4153 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
|
||||
<path d="M363 4093 c9 -2 23 -2 30 0 6 3 -1 5 -18 5 -16 0 -22 -2 -12 -5z"/>
|
||||
<path d="M268 4083 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
|
||||
<path d="M248 3983 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M158 3973 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M934 3808 l-19 -23 23 19 c21 18 27 26 19 26 -2 0 -12 -10 -23 -22z"/>
|
||||
<path d="M849 3733 l-24 -28 28 24 c25 23 32 31 24 31 -2 0 -14 -12 -28 -27z"/>
|
||||
<path d="M318 3603 l-318 -105 0 -75 0 -75 43 6 42 5 -42 -11 c-35 -9 -43 -15
|
||||
-43 -34 0 -13 2 -24 4 -24 17 0 194 69 247 96 37 19 91 43 120 54 l54 19 -70
|
||||
2 -70 2 75 9 c41 5 84 11 96 13 40 8 214 184 214 217 0 16 -36 5 -352 -99z
|
||||
m161 -67 c-5 -5 -176 -46 -191 -46 -49 0 114 47 171 49 13 1 22 -1 20 -3z
|
||||
m-292 -68 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-13 -71 c-6
|
||||
-16 -71 -43 -80 -34 -3 3 9 8 26 12 17 4 36 15 43 25 13 22 20 20 11 -3z"/>
|
||||
<path d="M799 3693 c-13 -16 -12 -17 4 -4 9 7 17 15 17 17 0 8 -8 3 -21 -13z"/>
|
||||
<path d="M735 3649 c-59 -45 -67 -57 -12 -18 42 29 65 50 55 49 -2 0 -21 -14
|
||||
-43 -31z"/>
|
||||
<path d="M635 3574 l-30 -26 33 22 c17 12 32 23 32 26 0 7 -4 5 -35 -22z"/>
|
||||
<path d="M4722 3544 c-24 -16 -28 -40 -11 -64 8 -12 9 -10 4 7 -7 24 26 53 60
|
||||
53 15 -1 11 -4 -12 -15 -22 -9 -33 -21 -33 -34 0 -12 22 -81 50 -153 62 -166
|
||||
71 -176 205 -207 55 -12 108 -25 118 -28 15 -4 17 3 17 50 0 35 -5 57 -12 60
|
||||
-10 4 -10 6 0 6 6 1 12 12 12 26 0 19 -7 26 -32 33 -18 4 -34 15 -36 24 -3 14
|
||||
3 15 32 8 35 -8 36 -7 36 20 0 16 -7 30 -16 34 -24 9 -62 7 -69 -4 -13 -21
|
||||
-43 -10 -48 18 -3 15 -4 29 -2 30 4 4 91 -13 118 -23 13 -5 17 -2 17 13 0 11
|
||||
-6 23 -12 25 -10 4 -10 6 0 6 10 1 19 51 9 51 -2 0 -74 18 -162 40 -177 44
|
||||
-201 47 -233 24z m175 -70 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13
|
||||
-5z m49 -110 c5 -26 9 -32 16 -22 6 9 7 5 3 -11 -5 -17 -4 -21 5 -16 7 4 10 2
|
||||
9 -6 -1 -8 3 -27 9 -42 14 -34 15 -47 3 -47 -9 0 -71 159 -71 181 0 24 20 -5
|
||||
26 -37z m104 -174 c0 -13 -30 -13 -50 0 -11 7 -7 10 18 10 17 0 32 -4 32 -10z
|
||||
m-33 -36 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m46 -11 c-7
|
||||
-2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m44 -9 c-3 -3 -12 -4 -19
|
||||
-1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z"/>
|
||||
<path d="M545 3519 c-27 -17 -54 -36 -60 -42 -11 -11 58 28 96 55 40 28 17 20
|
||||
-36 -13z"/>
|
||||
<path d="M436 3458 c3 -4 -10 -15 -28 -24 -42 -21 -190 -114 -203 -127 -11
|
||||
-11 16 4 155 88 111 67 116 71 91 71 -11 0 -17 -4 -15 -8z"/>
|
||||
<path d="M140 3275 c-25 -13 -41 -24 -37 -25 11 0 87 39 87 45 0 7 0 7 -50
|
||||
-20z"/>
|
||||
<path d="M40 3230 c-8 -5 -10 -10 -5 -10 6 0 17 5 25 10 8 5 11 10 5 10 -5 0
|
||||
-17 -5 -25 -10z"/>
|
||||
<path d="M4859 3072 c13 -10 77 -33 142 -49 96 -25 119 -28 119 -17 0 17 7 14
|
||||
-140 49 -63 15 -122 29 -130 32 -8 2 -4 -4 9 -15z"/>
|
||||
<path d="M0 2940 c0 -17 8 -20 68 -23 l67 -3 -67 -2 -68 -2 1 -85 c0 -47 2
|
||||
-85 4 -85 1 0 40 7 85 16 45 8 86 14 92 12 6 -2 -33 -12 -86 -22 -94 -18 -96
|
||||
-19 -96 -46 0 -19 6 -30 18 -33 16 -4 16 -5 0 -6 -12 -1 -18 -9 -18 -26 0 -30
|
||||
15 -31 88 -10 41 12 52 20 52 36 0 24 23 21 28 -4 6 -28 -33 -54 -102 -67
|
||||
l-66 -14 0 -59 c0 -51 2 -58 18 -53 59 17 295 66 299 63 4 -5 -59 -21 -245
|
||||
-62 l-72 -17 0 -38 0 -39 32 10 c18 5 40 9 48 8 8 -1 -5 -6 -29 -13 -25 -6
|
||||
-46 -17 -49 -24 -5 -17 -3 -17 220 38 214 52 234 62 223 110 -21 87 -162 324
|
||||
-237 398 -48 46 -88 62 -160 62 -41 0 -48 -3 -48 -20z m188 -55 c43 -36 208
|
||||
-285 189 -285 -2 0 -25 35 -49 78 -61 104 -134 199 -167 217 -14 8 -21 14 -14
|
||||
15 6 0 25 -11 41 -25z m-63 -54 c-11 -5 -40 -11 -65 -14 l-45 -6 50 14 c56 15
|
||||
91 18 60 6z m108 -148 c-7 -2 -21 -2 -30 0 -10 3 -4 5 12 5 17 0 24 -2 18 -5z
|
||||
m-166 -9 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m223 -63 c-8
|
||||
-5 -37 -12 -65 -15 l-50 -6 50 14 c28 8 57 14 65 15 13 0 13 -1 0 -8z m120
|
||||
-76 c0 -5 -5 -3 -10 5 -5 8 -10 20 -10 25 0 6 5 3 10 -5 5 -8 10 -19 10 -25z
|
||||
m2 -67 c-6 -6 -7 0 -4 19 5 21 7 23 10 9 2 -10 0 -22 -6 -28z m-152 -44 c-74
|
||||
-18 -142 -33 -150 -33 -20 2 240 67 265 67 11 0 -41 -15 -115 -34z"/>
|
||||
<path d="M4987 2593 c3 -10 12 -27 20 -38 7 -11 13 -27 13 -36 0 -10 18 -26
|
||||
43 -38 54 -26 57 -26 57 2 0 17 -12 28 -52 47 -89 43 -95 88 -7 56 28 -9 53
|
||||
-15 55 -13 8 8 -75 37 -106 37 -24 0 -28 -3 -23 -17z m98 -88 c39 -17 21 -18
|
||||
-25 0 -19 7 -28 14 -20 14 8 0 29 -6 45 -14z"/>
|
||||
<path d="M478 2383 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M388 2363 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M208 2323 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M158 2313 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M425 2313 c-44 -10 -333 -74 -377 -84 -46 -10 -48 -12 -48 -45 0 -19
|
||||
3 -34 8 -34 4 0 88 18 187 39 190 41 273 56 265 48 -3 -2 -107 -26 -232 -53
|
||||
-151 -32 -228 -53 -228 -61 0 -7 4 -13 8 -13 5 0 9 -7 9 -15 0 -8 -4 -12 -9
|
||||
-9 -4 3 -8 -34 -8 -81 0 -78 2 -86 18 -81 9 3 156 37 327 76 171 40 313 75
|
||||
318 79 8 8 -30 126 -57 178 -24 47 -53 63 -111 62 -27 -1 -59 -3 -70 -6z m117
|
||||
-120 c10 -9 18 -25 18 -35 0 -26 -18 -58 -33 -58 -8 0 -9 3 -1 8 6 4 14 21 17
|
||||
39 7 33 -3 47 -38 56 -19 4 -19 5 -1 6 11 0 28 -6 38 -16z m-74 -13 c-7 -10
|
||||
-14 -17 -17 -15 -4 4 18 35 25 35 2 0 -1 -9 -8 -20z m49 -7 c-13 -3 -17 -11
|
||||
-14 -24 3 -10 1 -17 -4 -13 -5 3 -9 14 -9 25 0 13 6 19 23 18 18 -1 19 -2 4
|
||||
-6z m-124 -26 c3 -8 -1 -14 -9 -14 -7 0 -11 4 -8 9 3 4 0 8 -7 8 -6 0 -9 -8
|
||||
-6 -20 5 -21 -7 -28 -18 -10 -8 13 13 40 30 40 7 0 15 -6 18 -13z m-218 -64
|
||||
c8 -24 10 -43 6 -43 -9 0 -32 78 -30 102 1 14 1 13 24 -59z m315 23 c0 -6 -7
|
||||
-1 -15 10 -8 10 -15 23 -15 28 0 6 7 1 15 -10 8 -10 15 -23 15 -28z m-207 -16
|
||||
c3 -11 1 -18 -4 -14 -5 3 -9 12 -9 20 0 20 7 17 13 -6z m-40 -37 c-7 -2 -19
|
||||
-2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m-113 -22 c-18 -10 -97 -25 -89
|
||||
-17 5 5 73 23 94 25 6 0 3 -3 -5 -8z"/>
|
||||
<path d="M68 2293 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M5025 2293 c-124 -30 -152 -134 -68 -255 14 -21 30 -38 35 -38 5 0 6
|
||||
5 3 10 -3 6 21 -4 54 -22 33 -18 56 -34 51 -36 -5 -2 -27 9 -50 23 -23 15 -44
|
||||
24 -47 21 -6 -6 63 -50 93 -60 20 -6 21 -3 23 62 2 58 -1 71 -20 88 -28 25
|
||||
-49 67 -49 99 0 29 0 29 35 13 28 -13 32 -25 10 -30 -13 -2 -12 -6 5 -16 19
|
||||
-12 20 -10 20 62 0 68 -2 74 -22 80 -25 6 -43 6 -73 -1z"/>
|
||||
<path d="M18 2283 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
|
||||
<path d="M340 1984 c-173 -41 -321 -76 -327 -79 -8 -2 -13 -22 -13 -46 0 -40
|
||||
1 -41 28 -34 210 55 441 107 494 112 81 7 154 -10 170 -41 20 -37 22 -212 4
|
||||
-306 -31 -155 -43 -186 -79 -208 -26 -16 -209 -87 -362 -140 -26 -9 -27 -11
|
||||
-7 -11 25 -1 344 113 379 135 40 25 53 58 79 205 19 109 24 163 20 224 -6 100
|
||||
-44 265 -59 264 -7 -1 -154 -34 -327 -75z"/>
|
||||
<path d="M305 1800 c-250 -65 -240 -61 -243 -97 -4 -42 13 -73 41 -73 37 0
|
||||
379 97 393 112 11 11 11 18 0 40 -8 15 -12 28 -10 31 2 2 -11 2 -29 1 -17 -2
|
||||
-23 -1 -12 2 26 8 44 24 25 24 -8 -1 -82 -18 -165 -40z m112 4 c-3 -3 -12 -4
|
||||
-19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-40 -10 c-3 -3 -12 -4 -19 -1 -8 3
|
||||
-5 6 6 6 11 1 17 -2 13 -5z m-52 -14 c-11 -5 -27 -9 -35 -9 -9 0 -8 4 5 9 11
|
||||
5 27 9 35 9 9 0 8 -4 -5 -9z m135 -21 c0 -4 -16 -10 -36 -13 -19 -4 -42 -10
|
||||
-50 -13 -8 -3 -14 0 -14 7 0 6 5 8 10 5 6 -3 10 -1 10 5 0 6 5 8 10 5 17 -10
|
||||
50 5 50 23 0 15 2 15 10 2 5 -8 10 -18 10 -21z m-193 5 c-3 -3 -12 -4 -19 -1
|
||||
-8 3 -5 6 6 6 11 1 17 -2 13 -5z m-37 -14 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11
|
||||
10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m-42 -7 c-1 -5 2 -20 6 -34 6 -21 12
|
||||
-25 34 -22 23 3 24 2 7 -5 -11 -5 -33 -12 -50 -16 -28 -7 -28 -6 -11 7 18 13
|
||||
18 16 3 45 -13 27 -13 32 -1 32 8 0 13 -3 12 -7z m120 -27 c36 4 36 4 7 -6
|
||||
-34 -11 -55 -7 -54 12 0 9 2 10 5 1 3 -7 19 -10 42 -7z m-162 -14 c2 -8 0 -8
|
||||
-3 -1 -4 8 -7 8 -13 -1 -5 -8 -9 -7 -14 5 -4 12 -1 16 11 13 9 -2 18 -9 19
|
||||
-16z m-16 -45 c17 -4 14 -5 -9 -4 -26 2 -36 7 -43 27 l-8 25 17 -22 c10 -12
|
||||
29 -24 43 -26z"/>
|
||||
<path d="M455 1684 c-44 -14 -142 -42 -218 -63 -76 -22 -141 -42 -145 -45 -6
|
||||
-7 42 -164 64 -208 8 -15 27 -34 43 -43 26 -13 35 -13 83 1 97 29 304 114 325
|
||||
133 21 20 19 44 -12 219 -7 40 -27 41 -140 6z m126 -74 c9 -30 19 -73 22 -95
|
||||
l6 -40 -14 33 c-8 17 -19 32 -23 32 -5 0 -21 23 -36 51 -16 28 -34 53 -41 55
|
||||
-12 5 -252 -60 -263 -71 -3 -3 2 -32 11 -65 23 -81 20 -99 -3 -25 -23 69 -24
|
||||
91 -9 101 27 16 277 83 304 81 26 -2 31 -7 46 -57z m-446 -40 c-3 -5 -12 -10
|
||||
-18 -10 -7 0 -6 4 3 10 19 12 23 12 15 0z m299 -8 c2 -4 -5 -9 -17 -9 -17 -2
|
||||
-19 0 -7 7 18 12 18 12 24 2z m-279 -32 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10
|
||||
0 6 2 10 4 10 3 0 8 -4 11 -10z m265 -2 c-14 -6 -37 -17 -52 -24 -15 -7 -30
|
||||
-9 -33 -4 -3 5 16 15 42 23 57 18 78 20 43 5z m165 -47 c-2 -5 -30 -16 -62
|
||||
-26 -32 -10 -98 -33 -146 -52 -49 -18 -93 -31 -97 -28 -5 3 -11 1 -15 -5 -3
|
||||
-5 -14 -10 -23 -9 -12 0 -10 3 7 10 14 6 21 15 18 23 -8 20 165 77 211 69 34
|
||||
-6 92 13 92 29 0 5 5 6 10 3 6 -4 8 -10 5 -14z m-380 -119 c-3 -3 -11 0 -18 7
|
||||
-9 10 -8 11 6 5 10 -3 15 -9 12 -12z"/>
|
||||
<path d="M5040 1602 c0 -4 18 -26 40 -47 35 -34 40 -36 40 -18 0 13 -15 30
|
||||
-40 47 -22 14 -40 23 -40 18z"/>
|
||||
<path d="M1100 1245 c19 -19 36 -35 39 -35 3 0 -10 16 -29 35 -19 19 -36 35
|
||||
-39 35 -3 0 10 -16 29 -35z"/>
|
||||
<path d="M4373 1268 c-13 -6 -23 -14 -23 -17 0 -4 19 -25 43 -46 l42 -40 -39
|
||||
42 -40 42 35 15 c19 9 27 15 19 15 -8 0 -25 -5 -37 -11z"/>
|
||||
<path d="M4470 1276 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
|
||||
13z"/>
|
||||
<path d="M4537 1213 c48 -62 48 -60 -14 -91 l-57 -29 3 -89 c1 -49 5 -91 7
|
||||
-93 2 -2 24 4 48 13 42 16 45 20 55 67 6 28 11 68 11 89 l0 39 -55 -25 c-62
|
||||
-27 -65 -28 -65 -16 0 5 27 21 60 37 33 16 60 32 60 35 0 9 -69 100 -76 100
|
||||
-3 0 7 -17 23 -37z"/>
|
||||
<path d="M880 1186 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
|
||||
13z"/>
|
||||
<path d="M940 1116 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
|
||||
13z"/>
|
||||
<path d="M1000 1046 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
|
||||
13z"/>
|
||||
<path d="M4581 926 c-13 -74 -8 -163 9 -137 11 19 32 5 168 -104 64 -52 120
|
||||
-91 124 -89 4 3 8 1 8 -5 0 -5 28 -29 63 -53 34 -24 86 -61 115 -82 l53 -39
|
||||
-2 72 c-1 39 -4 69 -7 67 -2 -3 -15 8 -29 25 -24 28 -51 41 -37 17 5 -9 2 -9
|
||||
-9 1 -20 16 -23 25 -4 15 6 -4 3 2 -7 14 -23 26 -45 30 -25 5 13 -16 12 -17
|
||||
-3 -4 -10 7 -16 17 -13 21 3 5 -32 39 -77 76 -71 58 -191 163 -289 251 l-25
|
||||
23 -13 -74z m149 -73 c0 -8 -9 0 -50 45 l-45 47 48 -45 c26 -24 47 -45 47 -47z
|
||||
m56 -45 l29 -33 -32 29 c-31 28 -38 36 -30 36 2 0 16 -15 33 -32z m64 -53 c13
|
||||
-14 21 -25 18 -25 -2 0 -15 11 -28 25 -13 14 -21 25 -18 25 2 0 15 -11 28 -25z
|
||||
m55 -45 c10 -11 16 -20 13 -20 -3 0 -13 9 -23 20 -10 11 -16 20 -13 20 3 0 13
|
||||
-9 23 -20z m176 -137 c13 -16 12 -17 -3 -4 -17 13 -22 21 -14 21 2 0 10 -8 17
|
||||
-17z"/>
|
||||
<path d="M4050 966 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
|
||||
13z"/>
|
||||
<path d="M4530 903 c-14 -7 -32 -11 -42 -9 -12 3 -17 -5 -20 -31 -4 -32 -3
|
||||
-34 21 -28 34 9 51 23 62 53 12 31 10 32 -21 15z"/>
|
||||
<path d="M4107 890 c30 -47 106 -140 114 -140 6 0 -8 21 -30 48 -57 68 -95
|
||||
109 -84 92z"/>
|
||||
<path d="M478 844 c-113 -36 -125 -47 -95 -88 12 -17 18 -16 118 14 57 18 107
|
||||
35 112 39 11 10 -3 71 -17 70 -6 0 -59 -16 -118 -35z"/>
|
||||
<path d="M555 690 c-65 -22 -79 -31 -77 -46 6 -40 84 -274 93 -280 11 -6 107
|
||||
23 128 39 9 8 11 24 7 57 -9 62 -54 242 -63 251 -5 3 -44 -6 -88 -21z"/>
|
||||
<path d="M1 313 l-1 -263 46 0 c33 0 45 4 41 13 -61 137 -61 136 -63 297 -2
|
||||
85 -8 169 -13 185 -6 21 -10 -51 -10 -232z"/>
|
||||
<path d="M1531 566 c2 -2 76 -61 164 -131 88 -71 205 -166 260 -213 68 -58 85
|
||||
-70 55 -38 -71 75 -453 386 -475 386 -4 0 -6 -2 -4 -4z"/>
|
||||
<path d="M4820 459 c-117 -70 -119 -73 -90 -104 29 -31 32 -31 83 4 23 15 60
|
||||
37 82 48 38 20 41 20 71 4 l32 -17 -80 -48 c-77 -46 -80 -47 -105 -31 -42 28
|
||||
-36 10 9 -27 55 -44 74 -54 123 -61 24 -4 32 -3 20 2 -18 7 -17 8 6 14 37 9
|
||||
149 84 149 100 0 12 -112 101 -185 147 l-31 19 -84 -50z m121 4 c21 -16 39
|
||||
-32 39 -37 0 -5 -10 0 -22 11 -13 11 -34 27 -48 36 -13 10 -21 17 -16 17 4 0
|
||||
25 -12 47 -27z"/>
|
||||
<path d="M4623 383 c-30 -12 -6 -43 95 -122 131 -102 189 -133 256 -139 40 -3
|
||||
61 2 95 20 25 13 47 30 49 38 4 12 1 11 -19 -1 -77 -50 -131 -44 -220 26 -60
|
||||
47 -81 57 -58 28 13 -16 12 -17 -3 -4 -10 7 -16 17 -13 21 4 7 -159 142 -168
|
||||
139 -1 0 -8 -3 -14 -6z"/>
|
||||
<path d="M141 349 c-2 -32 38 -166 69 -237 37 -82 61 -99 28 -19 -12 28 -38
|
||||
102 -59 162 -21 61 -38 103 -38 94z"/>
|
||||
<path d="M5089 294 c-7 -8 -33 -26 -58 -39 -25 -13 -41 -24 -36 -24 13 -1 112
|
||||
56 120 69 10 16 -11 12 -26 -6z"/>
|
||||
<path d="M5082 108 c-35 -22 -39 -28 -19 -28 16 1 63 37 57 44 -3 3 -20 -4
|
||||
-38 -16z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 69 KiB |
20
staticfiles/account/js/account.js
Normal file
@ -0,0 +1,20 @@
|
||||
(function () {
|
||||
const allauth = window.allauth = window.allauth || {}
|
||||
|
||||
function manageEmailForm (o) {
|
||||
const actions = document.getElementsByName('action_remove')
|
||||
if (actions.length) {
|
||||
actions[0].addEventListener('click', function (e) {
|
||||
if (!window.confirm(o.i18n.confirmDelete)) {
|
||||
e.preventDefault()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
allauth.account = {
|
||||
forms: {
|
||||
manageEmailForm
|
||||
}
|
||||
}
|
||||
})()
|
||||
12
staticfiles/account/js/onload.js
Normal file
@ -0,0 +1,12 @@
|
||||
(function () {
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
Array.from(document.querySelectorAll('script[data-allauth-onload]')).forEach(scriptElt => {
|
||||
const funcRef = scriptElt.dataset.allauthOnload
|
||||
if (typeof funcRef === 'string' && funcRef.startsWith('allauth.')) {
|
||||
const funcArg = JSON.parse(scriptElt.textContent)
|
||||
const func = funcRef.split('.').reduce((acc, part) => acc && acc[part], window)
|
||||
func(funcArg)
|
||||
}
|
||||
})
|
||||
})
|
||||
})()
|
||||
279
staticfiles/admin/css/autocomplete.css
Normal file
@ -0,0 +1,279 @@
|
||||
select.admin-autocomplete {
|
||||
width: 20em;
|
||||
}
|
||||
|
||||
.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: var(--body-quiet-color);
|
||||
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: var(--body-bg);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--body-fg);
|
||||
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: var(--body-quiet-color);
|
||||
}
|
||||
|
||||
.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: var(--darkened-bg);
|
||||
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: var(--body-bg);
|
||||
border: 1px solid var(--border-color);
|
||||
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 10px 5px 5px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.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: var(--body-quiet-color);
|
||||
margin-top: 5px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear {
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
font-weight: bold;
|
||||
margin: 5px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: var(--darkened-bg);
|
||||
border: 1px solid var(--border-color);
|
||||
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: var(--body-quiet-color);
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||
color: var(--body-fg);
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||
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 var(--body-quiet-color) 1px;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple {
|
||||
background-color: var(--darkened-bg);
|
||||
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 {
|
||||
background: var(--darkened-bg);
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field {
|
||||
background: var(--body-bg);
|
||||
color: var(--body-fg);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-search--inline .select2-search__field {
|
||||
background: transparent;
|
||||
color: var(--body-fg);
|
||||
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;
|
||||
color: var(--body-fg);
|
||||
background: var(--body-bg);
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-results__option[role=group] {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] {
|
||||
color: var(--body-quiet-color);
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] {
|
||||
background-color: var(--selected-bg);
|
||||
color: var(--body-fg);
|
||||
}
|
||||
|
||||
.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: var(--primary);
|
||||
color: var(--primary-fg);
|
||||
}
|
||||
|
||||
.select2-container--admin-autocomplete .select2-results__group {
|
||||
cursor: default;
|
||||
display: block;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
.errors .select2-selection {
|
||||
border: 1px solid var(--error-fg);
|
||||
}
|
||||
1179
staticfiles/admin/css/base.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);
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
61
staticfiles/admin/css/login.css
Normal file
@ -0,0 +1,61 @@
|
||||
/* LOGIN FORM */
|
||||
|
||||
.login {
|
||||
background: var(--darkened-bg);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.login #header {
|
||||
height: auto;
|
||||
padding: 15px 16px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.login #header h1 {
|
||||
font-size: 1.125rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.login #header h1 a {
|
||||
color: var(--header-link-color);
|
||||
}
|
||||
|
||||
.login #content {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.login #container {
|
||||
background: var(--body-bg);
|
||||
border: 1px solid var(--hairline-color);
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
width: 28em;
|
||||
min-width: 300px;
|
||||
margin: 100px auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.login .form-row {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.login .form-row label {
|
||||
display: block;
|
||||
line-height: 2em;
|
||||
}
|
||||
|
||||
.login .form-row #id_username, .login .form-row #id_password {
|
||||
padding: 8px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.login .submit-row {
|
||||
padding: 1em 0 0 0;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.login .password-reset-link {
|
||||
text-align: center;
|
||||
}
|
||||
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%;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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.
|
||||
481
staticfiles/admin/css/vendor/select2/select2.css
vendored
Normal file
@ -0,0 +1,481 @@
|
||||
.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;
|
||||
height: 28px;
|
||||
user-select: none;
|
||||
-webkit-user-select: none; }
|
||||
.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; }
|
||||
1
staticfiles/admin/css/vendor/select2/select2.min.css
vendored
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;
|
||||
}
|
||||
20
staticfiles/admin/img/LICENSE
Normal file
@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Code Charm Ltd
|
||||
|
||||
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.
|
||||
7
staticfiles/admin/img/README.txt
Normal file
@ -0,0 +1,7 @@
|
||||
All icons are taken from Font Awesome (https://fontawesome.com/) project.
|
||||
The Font Awesome font is licensed under the SIL OFL 1.1:
|
||||
- https://scripts.sil.org/OFL
|
||||
|
||||
SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG
|
||||
Font-Awesome-SVG-PNG is licensed under the MIT license (see file license
|
||||
in current folder).
|
||||
63
staticfiles/admin/img/calendar-icons.svg
Normal file
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="15"
|
||||
height="30"
|
||||
viewBox="0 0 1792 3584"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
sodipodi:docname="calendar-icons.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview5"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="13.3"
|
||||
inkscape:cx="15.526316"
|
||||
inkscape:cy="20.977444"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5" />
|
||||
<defs
|
||||
id="defs2">
|
||||
<g
|
||||
id="previous">
|
||||
<path
|
||||
d="m 1037,1395 102,-102 q 19,-19 19,-45 0,-26 -19,-45 L 832,896 1139,589 q 19,-19 19,-45 0,-26 -19,-45 L 1037,397 q -19,-19 -45,-19 -26,0 -45,19 L 493,851 q -19,19 -19,45 0,26 19,45 l 454,454 q 19,19 45,19 26,0 45,-19 z m 627,-499 q 0,209 -103,385.5 Q 1458,1458 1281.5,1561 1105,1664 896,1664 687,1664 510.5,1561 334,1458 231,1281.5 128,1105 128,896 128,687 231,510.5 334,334 510.5,231 687,128 896,128 1105,128 1281.5,231 1458,334 1561,510.5 1664,687 1664,896 Z"
|
||||
id="path1" />
|
||||
</g>
|
||||
<g
|
||||
id="next">
|
||||
<path
|
||||
d="m 845,1395 454,-454 q 19,-19 19,-45 0,-26 -19,-45 L 845,397 q -19,-19 -45,-19 -26,0 -45,19 L 653,499 q -19,19 -19,45 0,26 19,45 l 307,307 -307,307 q -19,19 -19,45 0,26 19,45 l 102,102 q 19,19 45,19 26,0 45,-19 z m 819,-499 q 0,209 -103,385.5 Q 1458,1458 1281.5,1561 1105,1664 896,1664 687,1664 510.5,1561 334,1458 231,1281.5 128,1105 128,896 128,687 231,510.5 334,334 510.5,231 687,128 896,128 1105,128 1281.5,231 1458,334 1561,510.5 1664,687 1664,896 Z"
|
||||
id="path2" />
|
||||
</g>
|
||||
</defs>
|
||||
<use
|
||||
xlink:href="#next"
|
||||
x="0"
|
||||
y="5376"
|
||||
fill="#000000"
|
||||
id="use5"
|
||||
transform="translate(0,-3584)" />
|
||||
<use
|
||||
xlink:href="#previous"
|
||||
x="0"
|
||||
y="0"
|
||||
fill="#333333"
|
||||
id="use2"
|
||||
style="fill:#000000;fill-opacity:1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
1
staticfiles/admin/img/gis/move_vertex_off.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#EBECE6" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9C9C9" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
1
staticfiles/admin/img/gis/move_vertex_on.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#F1C02A" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9A741" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
3
staticfiles/admin/img/icon-addlink.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#5fa225" d="M1600 796v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 331 B |
3
staticfiles/admin/img/icon-alert.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#efb80b" d="M1024 1375v-190q0-14-9.5-23.5t-22.5-9.5h-192q-13 0-22.5 9.5t-9.5 23.5v190q0 14 9.5 23.5t22.5 9.5h192q13 0 22.5-9.5t9.5-23.5zm-2-374l18-459q0-12-10-19-13-11-24-11h-220q-11 0-24 11-10 7-10 21l17 457q0 10 10 16.5t24 6.5h185q14 0 23.5-6.5t10.5-16.5zm-14-934l768 1408q35 63-2 126-17 29-46.5 46t-63.5 17h-1536q-34 0-63.5-17t-46.5-46q-37-63-2-126l768-1408q17-31 47-49t65-18 65 18 47 49z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 504 B |
9
staticfiles/admin/img/icon-calendar.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<g id="icon">
|
||||
<path d="M192 1664h288v-288h-288v288zm352 0h320v-288h-320v288zm-352-352h288v-320h-288v320zm352 0h320v-320h-320v320zm-352-384h288v-288h-288v288zm736 736h320v-288h-320v288zm-384-736h320v-288h-320v288zm768 736h288v-288h-288v288zm-384-352h320v-320h-320v320zm-352-864v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm736 864h288v-320h-288v320zm-384-384h320v-288h-320v288zm384 0h288v-288h-288v288zm32-480v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm384-64v1280q0 52-38 90t-90 38h-1408q-52 0-90-38t-38-90v-1280q0-52 38-90t90-38h128v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h384v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h128q52 0 90 38t38 90z"/>
|
||||
</g>
|
||||
</defs>
|
||||
<use xlink:href="#icon" x="0" y="0" fill="#447e9b" />
|
||||
<use xlink:href="#icon" x="0" y="1792" fill="#003366" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
3
staticfiles/admin/img/icon-changelink.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#b48c08" d="M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 380 B |
9
staticfiles/admin/img/icon-clock.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<g id="icon">
|
||||
<path d="M1024 544v448q0 14-9 23t-23 9h-320q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h224v-352q0-14 9-23t23-9h64q14 0 23 9t9 23zm416 352q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</g>
|
||||
</defs>
|
||||
<use xlink:href="#icon" x="0" y="0" fill="#447e9b" />
|
||||
<use xlink:href="#icon" x="0" y="1792" fill="#003366" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 677 B |
3
staticfiles/admin/img/icon-deletelink.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#dd4646" d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 392 B |
3
staticfiles/admin/img/icon-hidelink.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#2b70bf" d="m555 1335 78-141q-87-63-136-159t-49-203q0-121 61-225-229 117-381 353 167 258 427 375zm389-759q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm363-191q0 7-1 9-105 188-315 566t-316 567l-49 89q-10 16-28 16-12 0-134-70-16-10-16-28 0-12 44-87-143-65-263.5-173T20 1029Q0 998 0 960t20-69q153-235 380-371t496-136q89 0 180 17l54-97q10-16 28-16 5 0 18 6t31 15.5 33 18.5 31.5 18.5T1291 358q16 10 16 27zm37 447q0 139-79 253.5T1056 1250l280-502q8 45 8 84zm448 128q0 35-20 69-39 64-109 145-150 172-347.5 267T896 1536l74-132q212-18 392.5-137T1664 960q-115-179-282-294l63-112q95 64 182.5 153T1772 891q20 34 20 69z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 784 B |
3
staticfiles/admin/img/icon-no.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#dd4646" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 560 B |
3
staticfiles/admin/img/icon-unknown-alt.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#ffffff" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 655 B |
3
staticfiles/admin/img/icon-unknown.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#666666" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 655 B |
3
staticfiles/admin/img/icon-viewlink.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#2b70bf" d="M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5t-316.5 131.5-316.5-131.5-131.5-316.5q0-121 61-225-229 117-381 353 133 205 333.5 326.5t434.5 121.5 434.5-121.5 333.5-326.5zm-720-384q0-20-14-34t-34-14q-125 0-214.5 89.5t-89.5 214.5q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5t-499.5 138.5-499.5-139-376.5-368q-20-35-20-69t20-69q140-229 376.5-368t499.5-139 499.5 139 376.5 368q20 35 20 69z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 581 B |
3
staticfiles/admin/img/icon-yes.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#70bf2b" d="M1412 734q0-28-18-46l-91-90q-19-19-45-19t-45 19l-408 407-226-226q-19-19-45-19t-45 19l-91 90q-18 18-18 46 0 27 18 45l362 362q19 19 45 19 27 0 46-19l543-543q18-18 18-45zm252 162q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 436 B |
3
staticfiles/admin/img/inline-delete.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#999999" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 560 B |
3
staticfiles/admin/img/search.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="15" height="15" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#555555" d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 458 B |
34
staticfiles/admin/img/selector-icons.svg
Normal file
@ -0,0 +1,34 @@
|
||||
<svg width="16" height="192" viewBox="0 0 1792 21504" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<g id="up">
|
||||
<path d="M1412 895q0-27-18-45l-362-362-91-91q-18-18-45-18t-45 18l-91 91-362 362q-18 18-18 45t18 45l91 91q18 18 45 18t45-18l189-189v502q0 26 19 45t45 19h128q26 0 45-19t19-45v-502l189 189q19 19 45 19t45-19l91-91q18-18 18-45zm252 1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</g>
|
||||
<g id="down">
|
||||
<path d="M1412 897q0-27-18-45l-91-91q-18-18-45-18t-45 18l-189 189v-502q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v502l-189-189q-19-19-45-19t-45 19l-91 91q-18 18-18 45t18 45l362 362 91 91q18 18 45 18t45-18l91-91 362-362q18-18 18-45zm252-1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</g>
|
||||
<g id="left">
|
||||
<path d="M1408 960v-128q0-26-19-45t-45-19h-502l189-189q19-19 19-45t-19-45l-91-91q-18-18-45-18t-45 18l-362 362-91 91q-18 18-18 45t18 45l91 91 362 362q18 18 45 18t45-18l91-91q18-18 18-45t-18-45l-189-189h502q26 0 45-19t19-45zm256-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</g>
|
||||
<g id="right">
|
||||
<path d="M1413 896q0-27-18-45l-91-91-362-362q-18-18-45-18t-45 18l-91 91q-18 18-18 45t18 45l189 189h-502q-26 0-45 19t-19 45v128q0 26 19 45t45 19h502l-189 189q-19 19-19 45t19 45l91 91q18 18 45 18t45-18l362-362 91-91q18-18 18-45zm251 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</g>
|
||||
<g id="clearall">
|
||||
<path transform="translate(336, 336) scale(0.75)" d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</g>
|
||||
<g id="chooseall">
|
||||
<path transform="translate(336, 336) scale(0.75)" d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||
</g>
|
||||
</defs>
|
||||
<use xlink:href="#up" x="0" y="0" fill="#666666" />
|
||||
<use xlink:href="#up" x="0" y="1792" fill="#447e9b" />
|
||||
<use xlink:href="#down" x="0" y="3584" fill="#666666" />
|
||||
<use xlink:href="#down" x="0" y="5376" fill="#447e9b" />
|
||||
<use xlink:href="#left" x="0" y="7168" fill="#666666" />
|
||||
<use xlink:href="#left" x="0" y="8960" fill="#447e9b" />
|
||||
<use xlink:href="#right" x="0" y="10752" fill="#666666" />
|
||||
<use xlink:href="#right" x="0" y="12544" fill="#447e9b" />
|
||||
<use xlink:href="#clearall" x="0" y="14336" fill="#666666" />
|
||||
<use xlink:href="#clearall" x="0" y="16128" fill="#447e9b" />
|
||||
<use xlink:href="#chooseall" x="0" y="17920" fill="#666666" />
|
||||
<use xlink:href="#chooseall" x="0" y="19712" fill="#447e9b" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
19
staticfiles/admin/img/sorting-icons.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<svg width="14" height="84" viewBox="0 0 1792 10752" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<g id="sort">
|
||||
<path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45zm0-384q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/>
|
||||
</g>
|
||||
<g id="ascending">
|
||||
<path d="M1408 1216q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/>
|
||||
</g>
|
||||
<g id="descending">
|
||||
<path d="M1408 704q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z"/>
|
||||
</g>
|
||||
</defs>
|
||||
<use xlink:href="#sort" x="0" y="0" fill="#999999" />
|
||||
<use xlink:href="#sort" x="0" y="1792" fill="#447e9b" />
|
||||
<use xlink:href="#ascending" x="0" y="3584" fill="#999999" />
|
||||
<use xlink:href="#ascending" x="0" y="5376" fill="#447e9b" />
|
||||
<use xlink:href="#descending" x="0" y="7168" fill="#999999" />
|
||||
<use xlink:href="#descending" x="0" y="8960" fill="#447e9b" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
3
staticfiles/admin/img/tooltag-add.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#ffffff" d="M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 331 B |
3
staticfiles/admin/img/tooltag-arrowright.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#ffffff" d="M1363 877l-742 742q-19 19-45 19t-45-19l-166-166q-19-19-19-45t19-45l531-531-531-531q-19-19-19-45t19-45l166-166q19-19 45-19t45 19l742 742q19 19 19 45t-19 45z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 280 B |
116
staticfiles/admin/js/SelectBox.js
Normal file
@ -0,0 +1,116 @@
|
||||
'use strict';
|
||||
{
|
||||
const SelectBox = {
|
||||
cache: {},
|
||||
init: function(id) {
|
||||
const box = document.getElementById(id);
|
||||
SelectBox.cache[id] = [];
|
||||
const cache = SelectBox.cache[id];
|
||||
for (const node of box.options) {
|
||||
cache.push({value: node.value, text: node.text, displayed: 1});
|
||||
}
|
||||
},
|
||||
redisplay: function(id) {
|
||||
// Repopulate HTML select box from cache
|
||||
const box = document.getElementById(id);
|
||||
const scroll_value_from_top = box.scrollTop;
|
||||
box.innerHTML = '';
|
||||
for (const node of SelectBox.cache[id]) {
|
||||
if (node.displayed) {
|
||||
const new_option = new Option(node.text, node.value, false, false);
|
||||
// Shows a tooltip when hovering over the option
|
||||
new_option.title = node.text;
|
||||
box.appendChild(new_option);
|
||||
}
|
||||
}
|
||||
box.scrollTop = scroll_value_from_top;
|
||||
},
|
||||
filter: function(id, text) {
|
||||
// Redisplay the HTML select box, displaying only the choices containing ALL
|
||||
// the words in text. (It's an AND search.)
|
||||
const tokens = text.toLowerCase().split(/\s+/);
|
||||
for (const node of SelectBox.cache[id]) {
|
||||
node.displayed = 1;
|
||||
const node_text = node.text.toLowerCase();
|
||||
for (const token of tokens) {
|
||||
if (!node_text.includes(token)) {
|
||||
node.displayed = 0;
|
||||
break; // Once the first token isn't found we're done
|
||||
}
|
||||
}
|
||||
}
|
||||
SelectBox.redisplay(id);
|
||||
},
|
||||
get_hidden_node_count(id) {
|
||||
const cache = SelectBox.cache[id] || [];
|
||||
return cache.filter(node => node.displayed === 0).length;
|
||||
},
|
||||
delete_from_cache: function(id, value) {
|
||||
let delete_index = null;
|
||||
const cache = SelectBox.cache[id];
|
||||
for (const [i, node] of cache.entries()) {
|
||||
if (node.value === value) {
|
||||
delete_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
cache.splice(delete_index, 1);
|
||||
},
|
||||
add_to_cache: function(id, option) {
|
||||
SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1});
|
||||
},
|
||||
cache_contains: function(id, value) {
|
||||
// Check if an item is contained in the cache
|
||||
for (const node of SelectBox.cache[id]) {
|
||||
if (node.value === value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
move: function(from, to) {
|
||||
const from_box = document.getElementById(from);
|
||||
for (const option of from_box.options) {
|
||||
const option_value = option.value;
|
||||
if (option.selected && SelectBox.cache_contains(from, option_value)) {
|
||||
SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1});
|
||||
SelectBox.delete_from_cache(from, option_value);
|
||||
}
|
||||
}
|
||||
SelectBox.redisplay(from);
|
||||
SelectBox.redisplay(to);
|
||||
},
|
||||
move_all: function(from, to) {
|
||||
const from_box = document.getElementById(from);
|
||||
for (const option of from_box.options) {
|
||||
const option_value = option.value;
|
||||
if (SelectBox.cache_contains(from, option_value)) {
|
||||
SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1});
|
||||
SelectBox.delete_from_cache(from, option_value);
|
||||
}
|
||||
}
|
||||
SelectBox.redisplay(from);
|
||||
SelectBox.redisplay(to);
|
||||
},
|
||||
sort: function(id) {
|
||||
SelectBox.cache[id].sort(function(a, b) {
|
||||
a = a.text.toLowerCase();
|
||||
b = b.text.toLowerCase();
|
||||
if (a > b) {
|
||||
return 1;
|
||||
}
|
||||
if (a < b) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
} );
|
||||
},
|
||||
select_all: function(id) {
|
||||
const box = document.getElementById(id);
|
||||
for (const option of box.options) {
|
||||
option.selected = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
window.SelectBox = SelectBox;
|
||||
}
|
||||
286
staticfiles/admin/js/SelectFilter2.js
Normal file
@ -0,0 +1,286 @@
|
||||
/*global SelectBox, gettext, ngettext, interpolate, quickElement, SelectFilter*/
|
||||
/*
|
||||
SelectFilter2 - Turns a multiple-select box into a filter interface.
|
||||
|
||||
Requires core.js and SelectBox.js.
|
||||
*/
|
||||
'use strict';
|
||||
{
|
||||
window.SelectFilter = {
|
||||
init: function(field_id, field_name, is_stacked) {
|
||||
if (field_id.match(/__prefix__/)) {
|
||||
// Don't initialize on empty forms.
|
||||
return;
|
||||
}
|
||||
const from_box = document.getElementById(field_id);
|
||||
from_box.id += '_from'; // change its ID
|
||||
from_box.className = 'filtered';
|
||||
|
||||
for (const p of from_box.parentNode.getElementsByTagName('p')) {
|
||||
if (p.classList.contains("info")) {
|
||||
// Remove <p class="info">, because it just gets in the way.
|
||||
from_box.parentNode.removeChild(p);
|
||||
} else if (p.classList.contains("help")) {
|
||||
// Move help text up to the top so it isn't below the select
|
||||
// boxes or wrapped off on the side to the right of the add
|
||||
// button:
|
||||
from_box.parentNode.insertBefore(p, from_box.parentNode.firstChild);
|
||||
}
|
||||
}
|
||||
|
||||
// <div class="selector"> or <div class="selector stacked">
|
||||
const selector_div = quickElement('div', from_box.parentNode);
|
||||
// Make sure the selector div is at the beginning so that the
|
||||
// add link would be displayed to the right of the widget.
|
||||
from_box.parentNode.prepend(selector_div);
|
||||
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
|
||||
|
||||
// <div class="selector-available">
|
||||
const selector_available = quickElement('div', selector_div);
|
||||
selector_available.className = 'selector-available';
|
||||
const title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name]));
|
||||
quickElement(
|
||||
'span', title_available, '',
|
||||
'class', 'help help-tooltip help-icon',
|
||||
'title', interpolate(
|
||||
gettext(
|
||||
'This is the list of available %s. You may choose some by ' +
|
||||
'selecting them in the box below and then clicking the ' +
|
||||
'"Choose" arrow between the two boxes.'
|
||||
),
|
||||
[field_name]
|
||||
)
|
||||
);
|
||||
|
||||
const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter');
|
||||
filter_p.className = 'selector-filter';
|
||||
|
||||
const search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input');
|
||||
|
||||
quickElement(
|
||||
'span', search_filter_label, '',
|
||||
'class', 'help-tooltip search-label-icon',
|
||||
'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name])
|
||||
);
|
||||
|
||||
filter_p.appendChild(document.createTextNode(' '));
|
||||
|
||||
const filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter"));
|
||||
filter_input.id = field_id + '_input';
|
||||
|
||||
selector_available.appendChild(from_box);
|
||||
const choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link');
|
||||
choose_all.className = 'selector-chooseall';
|
||||
|
||||
// <ul class="selector-chooser">
|
||||
const selector_chooser = quickElement('ul', selector_div);
|
||||
selector_chooser.className = 'selector-chooser';
|
||||
const add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link');
|
||||
add_link.className = 'selector-add';
|
||||
const remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link');
|
||||
remove_link.className = 'selector-remove';
|
||||
|
||||
// <div class="selector-chosen">
|
||||
const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen');
|
||||
selector_chosen.className = 'selector-chosen';
|
||||
const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name]));
|
||||
quickElement(
|
||||
'span', title_chosen, '',
|
||||
'class', 'help help-tooltip help-icon',
|
||||
'title', interpolate(
|
||||
gettext(
|
||||
'This is the list of chosen %s. You may remove some by ' +
|
||||
'selecting them in the box below and then clicking the ' +
|
||||
'"Remove" arrow between the two boxes.'
|
||||
),
|
||||
[field_name]
|
||||
)
|
||||
);
|
||||
|
||||
const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected');
|
||||
filter_selected_p.className = 'selector-filter';
|
||||
|
||||
const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input');
|
||||
|
||||
quickElement(
|
||||
'span', search_filter_selected_label, '',
|
||||
'class', 'help-tooltip search-label-icon',
|
||||
'title', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name])
|
||||
);
|
||||
|
||||
filter_selected_p.appendChild(document.createTextNode(' '));
|
||||
|
||||
const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter"));
|
||||
filter_selected_input.id = field_id + '_selected_input';
|
||||
|
||||
const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name);
|
||||
to_box.className = 'filtered';
|
||||
|
||||
const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display');
|
||||
quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text');
|
||||
quickElement('span', warning_footer, ' (click to clear)', 'class', 'list-footer-display__clear');
|
||||
|
||||
const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link');
|
||||
clear_all.className = 'selector-clearall';
|
||||
|
||||
from_box.name = from_box.name + '_old';
|
||||
|
||||
// Set up the JavaScript event handlers for the select box filter interface
|
||||
const move_selection = function(e, elem, move_func, from, to) {
|
||||
if (elem.classList.contains('active')) {
|
||||
move_func(from, to);
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
SelectFilter.refresh_filtered_selects(field_id);
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
}
|
||||
e.preventDefault();
|
||||
};
|
||||
choose_all.addEventListener('click', function(e) {
|
||||
move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to');
|
||||
});
|
||||
add_link.addEventListener('click', function(e) {
|
||||
move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to');
|
||||
});
|
||||
remove_link.addEventListener('click', function(e) {
|
||||
move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from');
|
||||
});
|
||||
clear_all.addEventListener('click', function(e) {
|
||||
move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from');
|
||||
});
|
||||
warning_footer.addEventListener('click', function(e) {
|
||||
filter_selected_input.value = '';
|
||||
SelectBox.filter(field_id + '_to', '');
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
});
|
||||
filter_input.addEventListener('keypress', function(e) {
|
||||
SelectFilter.filter_key_press(e, field_id, '_from', '_to');
|
||||
});
|
||||
filter_input.addEventListener('keyup', function(e) {
|
||||
SelectFilter.filter_key_up(e, field_id, '_from');
|
||||
});
|
||||
filter_input.addEventListener('keydown', function(e) {
|
||||
SelectFilter.filter_key_down(e, field_id, '_from', '_to');
|
||||
});
|
||||
filter_selected_input.addEventListener('keypress', function(e) {
|
||||
SelectFilter.filter_key_press(e, field_id, '_to', '_from');
|
||||
});
|
||||
filter_selected_input.addEventListener('keyup', function(e) {
|
||||
SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input');
|
||||
});
|
||||
filter_selected_input.addEventListener('keydown', function(e) {
|
||||
SelectFilter.filter_key_down(e, field_id, '_to', '_from');
|
||||
});
|
||||
selector_div.addEventListener('change', function(e) {
|
||||
if (e.target.tagName === 'SELECT') {
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
}
|
||||
});
|
||||
selector_div.addEventListener('dblclick', function(e) {
|
||||
if (e.target.tagName === 'OPTION') {
|
||||
if (e.target.closest('select').id === field_id + '_to') {
|
||||
SelectBox.move(field_id + '_to', field_id + '_from');
|
||||
} else {
|
||||
SelectBox.move(field_id + '_from', field_id + '_to');
|
||||
}
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
}
|
||||
});
|
||||
from_box.closest('form').addEventListener('submit', function() {
|
||||
SelectBox.filter(field_id + '_to', '');
|
||||
SelectBox.select_all(field_id + '_to');
|
||||
});
|
||||
SelectBox.init(field_id + '_from');
|
||||
SelectBox.init(field_id + '_to');
|
||||
// Move selected from_box options to to_box
|
||||
SelectBox.move(field_id + '_from', field_id + '_to');
|
||||
|
||||
// Initial icon refresh
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
},
|
||||
any_selected: function(field) {
|
||||
// Temporarily add the required attribute and check validity.
|
||||
field.required = true;
|
||||
const any_selected = field.checkValidity();
|
||||
field.required = false;
|
||||
return any_selected;
|
||||
},
|
||||
refresh_filtered_warning: function(field_id) {
|
||||
const count = SelectBox.get_hidden_node_count(field_id + '_to');
|
||||
const selector = document.getElementById(field_id + '_selector_chosen');
|
||||
const warning = document.getElementById(field_id + '_list-footer-display-text');
|
||||
selector.className = selector.className.replace('selector-chosen--with-filtered', '');
|
||||
warning.textContent = interpolate(ngettext(
|
||||
'%s selected option not visible',
|
||||
'%s selected options not visible',
|
||||
count
|
||||
), [count]);
|
||||
if(count > 0) {
|
||||
selector.className += ' selector-chosen--with-filtered';
|
||||
}
|
||||
},
|
||||
refresh_filtered_selects: function(field_id) {
|
||||
SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value);
|
||||
SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value);
|
||||
},
|
||||
refresh_icons: function(field_id) {
|
||||
const from = document.getElementById(field_id + '_from');
|
||||
const to = document.getElementById(field_id + '_to');
|
||||
// Active if at least one item is selected
|
||||
document.getElementById(field_id + '_add_link').classList.toggle('active', SelectFilter.any_selected(from));
|
||||
document.getElementById(field_id + '_remove_link').classList.toggle('active', SelectFilter.any_selected(to));
|
||||
// Active if the corresponding box isn't empty
|
||||
document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option'));
|
||||
document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option'));
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
},
|
||||
filter_key_press: function(event, field_id, source, target) {
|
||||
const source_box = document.getElementById(field_id + source);
|
||||
// don't submit form if user pressed Enter
|
||||
if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) {
|
||||
source_box.selectedIndex = 0;
|
||||
SelectBox.move(field_id + source, field_id + target);
|
||||
source_box.selectedIndex = 0;
|
||||
event.preventDefault();
|
||||
}
|
||||
},
|
||||
filter_key_up: function(event, field_id, source, filter_input) {
|
||||
const input = filter_input || '_input';
|
||||
const source_box = document.getElementById(field_id + source);
|
||||
const temp = source_box.selectedIndex;
|
||||
SelectBox.filter(field_id + source, document.getElementById(field_id + input).value);
|
||||
source_box.selectedIndex = temp;
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
},
|
||||
filter_key_down: function(event, field_id, source, target) {
|
||||
const source_box = document.getElementById(field_id + source);
|
||||
// right key (39) or left key (37)
|
||||
const direction = source === '_from' ? 39 : 37;
|
||||
// right arrow -- move across
|
||||
if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) {
|
||||
const old_index = source_box.selectedIndex;
|
||||
SelectBox.move(field_id + source, field_id + target);
|
||||
SelectFilter.refresh_filtered_selects(field_id);
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index;
|
||||
return;
|
||||
}
|
||||
// down arrow -- wrap around
|
||||
if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) {
|
||||
source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1;
|
||||
}
|
||||
// up arrow -- wrap around
|
||||
if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) {
|
||||
source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('load', function(e) {
|
||||
document.querySelectorAll('select.selectfilter, select.selectfilterstacked').forEach(function(el) {
|
||||
const data = el.dataset;
|
||||
SelectFilter.init(el.id, data.fieldName, parseInt(data.isStacked, 10));
|
||||
});
|
||||
});
|
||||
}
|
||||
204
staticfiles/admin/js/actions.js
Normal file
@ -0,0 +1,204 @@
|
||||
/*global gettext, interpolate, ngettext, Actions*/
|
||||
'use strict';
|
||||
{
|
||||
function show(selector) {
|
||||
document.querySelectorAll(selector).forEach(function(el) {
|
||||
el.classList.remove('hidden');
|
||||
});
|
||||
}
|
||||
|
||||
function hide(selector) {
|
||||
document.querySelectorAll(selector).forEach(function(el) {
|
||||
el.classList.add('hidden');
|
||||
});
|
||||
}
|
||||
|
||||
function showQuestion(options) {
|
||||
hide(options.acrossClears);
|
||||
show(options.acrossQuestions);
|
||||
hide(options.allContainer);
|
||||
}
|
||||
|
||||
function showClear(options) {
|
||||
show(options.acrossClears);
|
||||
hide(options.acrossQuestions);
|
||||
document.querySelector(options.actionContainer).classList.remove(options.selectedClass);
|
||||
show(options.allContainer);
|
||||
hide(options.counterContainer);
|
||||
}
|
||||
|
||||
function reset(options) {
|
||||
hide(options.acrossClears);
|
||||
hide(options.acrossQuestions);
|
||||
hide(options.allContainer);
|
||||
show(options.counterContainer);
|
||||
}
|
||||
|
||||
function clearAcross(options) {
|
||||
reset(options);
|
||||
const acrossInputs = document.querySelectorAll(options.acrossInput);
|
||||
acrossInputs.forEach(function(acrossInput) {
|
||||
acrossInput.value = 0;
|
||||
});
|
||||
document.querySelector(options.actionContainer).classList.remove(options.selectedClass);
|
||||
}
|
||||
|
||||
function checker(actionCheckboxes, options, checked) {
|
||||
if (checked) {
|
||||
showQuestion(options);
|
||||
} else {
|
||||
reset(options);
|
||||
}
|
||||
actionCheckboxes.forEach(function(el) {
|
||||
el.checked = checked;
|
||||
el.closest('tr').classList.toggle(options.selectedClass, checked);
|
||||
});
|
||||
}
|
||||
|
||||
function updateCounter(actionCheckboxes, options) {
|
||||
const sel = Array.from(actionCheckboxes).filter(function(el) {
|
||||
return el.checked;
|
||||
}).length;
|
||||
const counter = document.querySelector(options.counterContainer);
|
||||
// data-actions-icnt is defined in the generated HTML
|
||||
// and contains the total amount of objects in the queryset
|
||||
const actions_icnt = Number(counter.dataset.actionsIcnt);
|
||||
counter.textContent = interpolate(
|
||||
ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
|
||||
sel: sel,
|
||||
cnt: actions_icnt
|
||||
}, true);
|
||||
const allToggle = document.getElementById(options.allToggleId);
|
||||
allToggle.checked = sel === actionCheckboxes.length;
|
||||
if (allToggle.checked) {
|
||||
showQuestion(options);
|
||||
} else {
|
||||
clearAcross(options);
|
||||
}
|
||||
}
|
||||
|
||||
const defaults = {
|
||||
actionContainer: "div.actions",
|
||||
counterContainer: "span.action-counter",
|
||||
allContainer: "div.actions span.all",
|
||||
acrossInput: "div.actions input.select-across",
|
||||
acrossQuestions: "div.actions span.question",
|
||||
acrossClears: "div.actions span.clear",
|
||||
allToggleId: "action-toggle",
|
||||
selectedClass: "selected"
|
||||
};
|
||||
|
||||
window.Actions = function(actionCheckboxes, options) {
|
||||
options = Object.assign({}, defaults, options);
|
||||
let list_editable_changed = false;
|
||||
let lastChecked = null;
|
||||
let shiftPressed = false;
|
||||
|
||||
document.addEventListener('keydown', (event) => {
|
||||
shiftPressed = event.shiftKey;
|
||||
});
|
||||
|
||||
document.addEventListener('keyup', (event) => {
|
||||
shiftPressed = event.shiftKey;
|
||||
});
|
||||
|
||||
document.getElementById(options.allToggleId).addEventListener('click', function(event) {
|
||||
checker(actionCheckboxes, options, this.checked);
|
||||
updateCounter(actionCheckboxes, options);
|
||||
});
|
||||
|
||||
document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) {
|
||||
el.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
const acrossInputs = document.querySelectorAll(options.acrossInput);
|
||||
acrossInputs.forEach(function(acrossInput) {
|
||||
acrossInput.value = 1;
|
||||
});
|
||||
showClear(options);
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll(options.acrossClears + " a").forEach(function(el) {
|
||||
el.addEventListener('click', function(event) {
|
||||
event.preventDefault();
|
||||
document.getElementById(options.allToggleId).checked = false;
|
||||
clearAcross(options);
|
||||
checker(actionCheckboxes, options, false);
|
||||
updateCounter(actionCheckboxes, options);
|
||||
});
|
||||
});
|
||||
|
||||
function affectedCheckboxes(target, withModifier) {
|
||||
const multiSelect = (lastChecked && withModifier && lastChecked !== target);
|
||||
if (!multiSelect) {
|
||||
return [target];
|
||||
}
|
||||
const checkboxes = Array.from(actionCheckboxes);
|
||||
const targetIndex = checkboxes.findIndex(el => el === target);
|
||||
const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked);
|
||||
const startIndex = Math.min(targetIndex, lastCheckedIndex);
|
||||
const endIndex = Math.max(targetIndex, lastCheckedIndex);
|
||||
const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex));
|
||||
return filtered;
|
||||
};
|
||||
|
||||
Array.from(document.getElementById('result_list').tBodies).forEach(function(el) {
|
||||
el.addEventListener('change', function(event) {
|
||||
const target = event.target;
|
||||
if (target.classList.contains('action-select')) {
|
||||
const checkboxes = affectedCheckboxes(target, shiftPressed);
|
||||
checker(checkboxes, options, target.checked);
|
||||
updateCounter(actionCheckboxes, options);
|
||||
lastChecked = target;
|
||||
} else {
|
||||
list_editable_changed = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) {
|
||||
if (list_editable_changed) {
|
||||
const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
|
||||
if (!confirmed) {
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const el = document.querySelector('#changelist-form input[name=_save]');
|
||||
// The button does not exist if no fields are editable.
|
||||
if (el) {
|
||||
el.addEventListener('click', function(event) {
|
||||
if (document.querySelector('[name=action]').value) {
|
||||
const text = list_editable_changed
|
||||
? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.")
|
||||
: gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button.");
|
||||
if (!confirm(text)) {
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
// Sync counter when navigating to the page, such as through the back
|
||||
// button.
|
||||
window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options));
|
||||
};
|
||||
|
||||
// Call function fn when the DOM is loaded and ready. If it is already
|
||||
// loaded, call the function now.
|
||||
// http://youmightnotneedjquery.com/#ready
|
||||
function ready(fn) {
|
||||
if (document.readyState !== 'loading') {
|
||||
fn();
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', fn);
|
||||
}
|
||||
}
|
||||
|
||||
ready(function() {
|
||||
const actionsEls = document.querySelectorAll('tr input.action-select');
|
||||
if (actionsEls.length > 0) {
|
||||
Actions(actionsEls);
|
||||
}
|
||||
});
|
||||
}
|
||||
408
staticfiles/admin/js/admin/DateTimeShortcuts.js
Normal file
@ -0,0 +1,408 @@
|
||||
/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/
|
||||
// Inserts shortcut buttons after all of the following:
|
||||
// <input type="text" class="vDateField">
|
||||
// <input type="text" class="vTimeField">
|
||||
'use strict';
|
||||
{
|
||||
const DateTimeShortcuts = {
|
||||
calendars: [],
|
||||
calendarInputs: [],
|
||||
clockInputs: [],
|
||||
clockHours: {
|
||||
default_: [
|
||||
[gettext_noop('Now'), -1],
|
||||
[gettext_noop('Midnight'), 0],
|
||||
[gettext_noop('6 a.m.'), 6],
|
||||
[gettext_noop('Noon'), 12],
|
||||
[gettext_noop('6 p.m.'), 18]
|
||||
]
|
||||
},
|
||||
dismissClockFunc: [],
|
||||
dismissCalendarFunc: [],
|
||||
calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
|
||||
calendarDivName2: 'calendarin', // name of <div> that contains calendar
|
||||
calendarLinkName: 'calendarlink', // name of the link that is used to toggle
|
||||
clockDivName: 'clockbox', // name of clock <div> that gets toggled
|
||||
clockLinkName: 'clocklink', // name of the link that is used to toggle
|
||||
shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
|
||||
timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
|
||||
timezoneOffset: 0,
|
||||
init: function() {
|
||||
const serverOffset = document.body.dataset.adminUtcOffset;
|
||||
if (serverOffset) {
|
||||
const localOffset = new Date().getTimezoneOffset() * -60;
|
||||
DateTimeShortcuts.timezoneOffset = localOffset - serverOffset;
|
||||
}
|
||||
|
||||
for (const inp of document.getElementsByTagName('input')) {
|
||||
if (inp.type === 'text' && inp.classList.contains('vTimeField')) {
|
||||
DateTimeShortcuts.addClock(inp);
|
||||
DateTimeShortcuts.addTimezoneWarning(inp);
|
||||
}
|
||||
else if (inp.type === 'text' && inp.classList.contains('vDateField')) {
|
||||
DateTimeShortcuts.addCalendar(inp);
|
||||
DateTimeShortcuts.addTimezoneWarning(inp);
|
||||
}
|
||||
}
|
||||
},
|
||||
// Return the current time while accounting for the server timezone.
|
||||
now: function() {
|
||||
const serverOffset = document.body.dataset.adminUtcOffset;
|
||||
if (serverOffset) {
|
||||
const localNow = new Date();
|
||||
const localOffset = localNow.getTimezoneOffset() * -60;
|
||||
localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset));
|
||||
return localNow;
|
||||
} else {
|
||||
return new Date();
|
||||
}
|
||||
},
|
||||
// Add a warning when the time zone in the browser and backend do not match.
|
||||
addTimezoneWarning: function(inp) {
|
||||
const warningClass = DateTimeShortcuts.timezoneWarningClass;
|
||||
let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600;
|
||||
|
||||
// Only warn if there is a time zone mismatch.
|
||||
if (!timezoneOffset) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if warning is already there.
|
||||
if (inp.parentNode.querySelectorAll('.' + warningClass).length) {
|
||||
return;
|
||||
}
|
||||
|
||||
let message;
|
||||
if (timezoneOffset > 0) {
|
||||
message = ngettext(
|
||||
'Note: You are %s hour ahead of server time.',
|
||||
'Note: You are %s hours ahead of server time.',
|
||||
timezoneOffset
|
||||
);
|
||||
}
|
||||
else {
|
||||
timezoneOffset *= -1;
|
||||
message = ngettext(
|
||||
'Note: You are %s hour behind server time.',
|
||||
'Note: You are %s hours behind server time.',
|
||||
timezoneOffset
|
||||
);
|
||||
}
|
||||
message = interpolate(message, [timezoneOffset]);
|
||||
|
||||
const warning = document.createElement('div');
|
||||
warning.classList.add('help', warningClass);
|
||||
warning.textContent = message;
|
||||
inp.parentNode.appendChild(warning);
|
||||
},
|
||||
// Add clock widget to a given field
|
||||
addClock: function(inp) {
|
||||
const num = DateTimeShortcuts.clockInputs.length;
|
||||
DateTimeShortcuts.clockInputs[num] = inp;
|
||||
DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; };
|
||||
|
||||
// Shortcut links (clock icon and "Now" link)
|
||||
const shortcuts_span = document.createElement('span');
|
||||
shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
|
||||
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
||||
const now_link = document.createElement('a');
|
||||
now_link.href = "#";
|
||||
now_link.textContent = gettext('Now');
|
||||
now_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.handleClockQuicklink(num, -1);
|
||||
});
|
||||
const clock_link = document.createElement('a');
|
||||
clock_link.href = '#';
|
||||
clock_link.id = DateTimeShortcuts.clockLinkName + num;
|
||||
clock_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
// avoid triggering the document click handler to dismiss the clock
|
||||
e.stopPropagation();
|
||||
DateTimeShortcuts.openClock(num);
|
||||
});
|
||||
|
||||
quickElement(
|
||||
'span', clock_link, '',
|
||||
'class', 'clock-icon',
|
||||
'title', gettext('Choose a Time')
|
||||
);
|
||||
shortcuts_span.appendChild(document.createTextNode('\u00A0'));
|
||||
shortcuts_span.appendChild(now_link);
|
||||
shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
||||
shortcuts_span.appendChild(clock_link);
|
||||
|
||||
// Create clock link div
|
||||
//
|
||||
// Markup looks like:
|
||||
// <div id="clockbox1" class="clockbox module">
|
||||
// <h2>Choose a time</h2>
|
||||
// <ul class="timelist">
|
||||
// <li><a href="#">Now</a></li>
|
||||
// <li><a href="#">Midnight</a></li>
|
||||
// <li><a href="#">6 a.m.</a></li>
|
||||
// <li><a href="#">Noon</a></li>
|
||||
// <li><a href="#">6 p.m.</a></li>
|
||||
// </ul>
|
||||
// <p class="calendar-cancel"><a href="#">Cancel</a></p>
|
||||
// </div>
|
||||
|
||||
const clock_box = document.createElement('div');
|
||||
clock_box.style.display = 'none';
|
||||
clock_box.style.position = 'absolute';
|
||||
clock_box.className = 'clockbox module';
|
||||
clock_box.id = DateTimeShortcuts.clockDivName + num;
|
||||
document.body.appendChild(clock_box);
|
||||
clock_box.addEventListener('click', function(e) { e.stopPropagation(); });
|
||||
|
||||
quickElement('h2', clock_box, gettext('Choose a time'));
|
||||
const time_list = quickElement('ul', clock_box);
|
||||
time_list.className = 'timelist';
|
||||
// The list of choices can be overridden in JavaScript like this:
|
||||
// DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]];
|
||||
// where name is the name attribute of the <input>.
|
||||
const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name;
|
||||
DateTimeShortcuts.clockHours[name].forEach(function(element) {
|
||||
const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#');
|
||||
time_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.handleClockQuicklink(num, element[1]);
|
||||
});
|
||||
});
|
||||
|
||||
const cancel_p = quickElement('p', clock_box);
|
||||
cancel_p.className = 'calendar-cancel';
|
||||
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#');
|
||||
cancel_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.dismissClock(num);
|
||||
});
|
||||
|
||||
document.addEventListener('keyup', function(event) {
|
||||
if (event.which === 27) {
|
||||
// ESC key closes popup
|
||||
DateTimeShortcuts.dismissClock(num);
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
openClock: function(num) {
|
||||
const clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num);
|
||||
const clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num);
|
||||
|
||||
// Recalculate the clockbox position
|
||||
// is it left-to-right or right-to-left layout ?
|
||||
if (window.getComputedStyle(document.body).direction !== 'rtl') {
|
||||
clock_box.style.left = findPosX(clock_link) + 17 + 'px';
|
||||
}
|
||||
else {
|
||||
// since style's width is in em, it'd be tough to calculate
|
||||
// px value of it. let's use an estimated px for now
|
||||
clock_box.style.left = findPosX(clock_link) - 110 + 'px';
|
||||
}
|
||||
clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px';
|
||||
|
||||
// Show the clock box
|
||||
clock_box.style.display = 'block';
|
||||
document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]);
|
||||
},
|
||||
dismissClock: function(num) {
|
||||
document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none';
|
||||
document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]);
|
||||
},
|
||||
handleClockQuicklink: function(num, val) {
|
||||
let d;
|
||||
if (val === -1) {
|
||||
d = DateTimeShortcuts.now();
|
||||
}
|
||||
else {
|
||||
d = new Date(1970, 1, 1, val, 0, 0, 0);
|
||||
}
|
||||
DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]);
|
||||
DateTimeShortcuts.clockInputs[num].focus();
|
||||
DateTimeShortcuts.dismissClock(num);
|
||||
},
|
||||
// Add calendar widget to a given field.
|
||||
addCalendar: function(inp) {
|
||||
const num = DateTimeShortcuts.calendars.length;
|
||||
|
||||
DateTimeShortcuts.calendarInputs[num] = inp;
|
||||
DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; };
|
||||
|
||||
// Shortcut links (calendar icon and "Today" link)
|
||||
const shortcuts_span = document.createElement('span');
|
||||
shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
|
||||
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
||||
const today_link = document.createElement('a');
|
||||
today_link.href = '#';
|
||||
today_link.appendChild(document.createTextNode(gettext('Today')));
|
||||
today_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.handleCalendarQuickLink(num, 0);
|
||||
});
|
||||
const cal_link = document.createElement('a');
|
||||
cal_link.href = '#';
|
||||
cal_link.id = DateTimeShortcuts.calendarLinkName + num;
|
||||
cal_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
// avoid triggering the document click handler to dismiss the calendar
|
||||
e.stopPropagation();
|
||||
DateTimeShortcuts.openCalendar(num);
|
||||
});
|
||||
quickElement(
|
||||
'span', cal_link, '',
|
||||
'class', 'date-icon',
|
||||
'title', gettext('Choose a Date')
|
||||
);
|
||||
shortcuts_span.appendChild(document.createTextNode('\u00A0'));
|
||||
shortcuts_span.appendChild(today_link);
|
||||
shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
||||
shortcuts_span.appendChild(cal_link);
|
||||
|
||||
// Create calendarbox div.
|
||||
//
|
||||
// Markup looks like:
|
||||
//
|
||||
// <div id="calendarbox3" class="calendarbox module">
|
||||
// <h2>
|
||||
// <a href="#" class="link-previous">‹</a>
|
||||
// <a href="#" class="link-next">›</a> February 2003
|
||||
// </h2>
|
||||
// <div class="calendar" id="calendarin3">
|
||||
// <!-- (cal) -->
|
||||
// </div>
|
||||
// <div class="calendar-shortcuts">
|
||||
// <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a>
|
||||
// </div>
|
||||
// <p class="calendar-cancel"><a href="#">Cancel</a></p>
|
||||
// </div>
|
||||
const cal_box = document.createElement('div');
|
||||
cal_box.style.display = 'none';
|
||||
cal_box.style.position = 'absolute';
|
||||
cal_box.className = 'calendarbox module';
|
||||
cal_box.id = DateTimeShortcuts.calendarDivName1 + num;
|
||||
document.body.appendChild(cal_box);
|
||||
cal_box.addEventListener('click', function(e) { e.stopPropagation(); });
|
||||
|
||||
// next-prev links
|
||||
const cal_nav = quickElement('div', cal_box);
|
||||
const cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#');
|
||||
cal_nav_prev.className = 'calendarnav-previous';
|
||||
cal_nav_prev.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.drawPrev(num);
|
||||
});
|
||||
|
||||
const cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#');
|
||||
cal_nav_next.className = 'calendarnav-next';
|
||||
cal_nav_next.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.drawNext(num);
|
||||
});
|
||||
|
||||
// main box
|
||||
const cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num);
|
||||
cal_main.className = 'calendar';
|
||||
DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num));
|
||||
DateTimeShortcuts.calendars[num].drawCurrent();
|
||||
|
||||
// calendar shortcuts
|
||||
const shortcuts = quickElement('div', cal_box);
|
||||
shortcuts.className = 'calendar-shortcuts';
|
||||
let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#');
|
||||
day_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.handleCalendarQuickLink(num, -1);
|
||||
});
|
||||
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
||||
day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#');
|
||||
day_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.handleCalendarQuickLink(num, 0);
|
||||
});
|
||||
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
||||
day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#');
|
||||
day_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.handleCalendarQuickLink(num, +1);
|
||||
});
|
||||
|
||||
// cancel bar
|
||||
const cancel_p = quickElement('p', cal_box);
|
||||
cancel_p.className = 'calendar-cancel';
|
||||
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#');
|
||||
cancel_link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
DateTimeShortcuts.dismissCalendar(num);
|
||||
});
|
||||
document.addEventListener('keyup', function(event) {
|
||||
if (event.which === 27) {
|
||||
// ESC key closes popup
|
||||
DateTimeShortcuts.dismissCalendar(num);
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
openCalendar: function(num) {
|
||||
const cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num);
|
||||
const cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num);
|
||||
const inp = DateTimeShortcuts.calendarInputs[num];
|
||||
|
||||
// Determine if the current value in the input has a valid date.
|
||||
// If so, draw the calendar with that date's year and month.
|
||||
if (inp.value) {
|
||||
const format = get_format('DATE_INPUT_FORMATS')[0];
|
||||
const selected = inp.value.strptime(format);
|
||||
const year = selected.getUTCFullYear();
|
||||
const month = selected.getUTCMonth() + 1;
|
||||
const re = /\d{4}/;
|
||||
if (re.test(year.toString()) && month >= 1 && month <= 12) {
|
||||
DateTimeShortcuts.calendars[num].drawDate(month, year, selected);
|
||||
}
|
||||
}
|
||||
|
||||
// Recalculate the clockbox position
|
||||
// is it left-to-right or right-to-left layout ?
|
||||
if (window.getComputedStyle(document.body).direction !== 'rtl') {
|
||||
cal_box.style.left = findPosX(cal_link) + 17 + 'px';
|
||||
}
|
||||
else {
|
||||
// since style's width is in em, it'd be tough to calculate
|
||||
// px value of it. let's use an estimated px for now
|
||||
cal_box.style.left = findPosX(cal_link) - 180 + 'px';
|
||||
}
|
||||
cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px';
|
||||
|
||||
cal_box.style.display = 'block';
|
||||
document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]);
|
||||
},
|
||||
dismissCalendar: function(num) {
|
||||
document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none';
|
||||
document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]);
|
||||
},
|
||||
drawPrev: function(num) {
|
||||
DateTimeShortcuts.calendars[num].drawPreviousMonth();
|
||||
},
|
||||
drawNext: function(num) {
|
||||
DateTimeShortcuts.calendars[num].drawNextMonth();
|
||||
},
|
||||
handleCalendarCallback: function(num) {
|
||||
const format = get_format('DATE_INPUT_FORMATS')[0];
|
||||
return function(y, m, d) {
|
||||
DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format);
|
||||
DateTimeShortcuts.calendarInputs[num].focus();
|
||||
document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none';
|
||||
};
|
||||
},
|
||||
handleCalendarQuickLink: function(num, offset) {
|
||||
const d = DateTimeShortcuts.now();
|
||||
d.setDate(d.getDate() + offset);
|
||||
DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]);
|
||||
DateTimeShortcuts.calendarInputs[num].focus();
|
||||
DateTimeShortcuts.dismissCalendar(num);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('load', DateTimeShortcuts.init);
|
||||
window.DateTimeShortcuts = DateTimeShortcuts;
|
||||
}
|
||||
240
staticfiles/admin/js/admin/RelatedObjectLookups.js
Normal file
@ -0,0 +1,240 @@
|
||||
/*global SelectBox, interpolate*/
|
||||
// Handles related-objects functionality: lookup link for raw_id_fields
|
||||
// and Add Another links.
|
||||
'use strict';
|
||||
{
|
||||
const $ = django.jQuery;
|
||||
let popupIndex = 0;
|
||||
const relatedWindows = [];
|
||||
|
||||
function dismissChildPopups() {
|
||||
relatedWindows.forEach(function(win) {
|
||||
if(!win.closed) {
|
||||
win.dismissChildPopups();
|
||||
win.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setPopupIndex() {
|
||||
if(document.getElementsByName("_popup").length > 0) {
|
||||
const index = window.name.lastIndexOf("__") + 2;
|
||||
popupIndex = parseInt(window.name.substring(index));
|
||||
} else {
|
||||
popupIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function addPopupIndex(name) {
|
||||
return name + "__" + (popupIndex + 1);
|
||||
}
|
||||
|
||||
function removePopupIndex(name) {
|
||||
return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), '');
|
||||
}
|
||||
|
||||
function showAdminPopup(triggeringLink, name_regexp, add_popup) {
|
||||
const name = addPopupIndex(triggeringLink.id.replace(name_regexp, ''));
|
||||
const href = new URL(triggeringLink.href);
|
||||
if (add_popup) {
|
||||
href.searchParams.set('_popup', 1);
|
||||
}
|
||||
const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
||||
relatedWindows.push(win);
|
||||
win.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
function showRelatedObjectLookupPopup(triggeringLink) {
|
||||
return showAdminPopup(triggeringLink, /^lookup_/, true);
|
||||
}
|
||||
|
||||
function dismissRelatedLookupPopup(win, chosenId) {
|
||||
const name = removePopupIndex(win.name);
|
||||
const elem = document.getElementById(name);
|
||||
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
|
||||
elem.value += ',' + chosenId;
|
||||
} else {
|
||||
document.getElementById(name).value = chosenId;
|
||||
}
|
||||
const index = relatedWindows.indexOf(win);
|
||||
if (index > -1) {
|
||||
relatedWindows.splice(index, 1);
|
||||
}
|
||||
win.close();
|
||||
}
|
||||
|
||||
function showRelatedObjectPopup(triggeringLink) {
|
||||
return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false);
|
||||
}
|
||||
|
||||
function updateRelatedObjectLinks(triggeringLink) {
|
||||
const $this = $(triggeringLink);
|
||||
const siblings = $this.nextAll('.view-related, .change-related, .delete-related');
|
||||
if (!siblings.length) {
|
||||
return;
|
||||
}
|
||||
const value = $this.val();
|
||||
if (value) {
|
||||
siblings.each(function() {
|
||||
const elm = $(this);
|
||||
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
|
||||
elm.removeAttr('aria-disabled');
|
||||
});
|
||||
} else {
|
||||
siblings.removeAttr('href');
|
||||
siblings.attr('aria-disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId) {
|
||||
// After create/edit a model from the options next to the current
|
||||
// select (+ or :pencil:) update ForeignKey PK of the rest of selects
|
||||
// in the page.
|
||||
|
||||
const path = win.location.pathname;
|
||||
// Extract the model from the popup url '.../<model>/add/' or
|
||||
// '.../<model>/<id>/change/' depending the action (add or change).
|
||||
const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)];
|
||||
// Select elements with a specific model reference and context of "available-source".
|
||||
const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] [data-context="available-source"]`);
|
||||
|
||||
selectsRelated.forEach(function(select) {
|
||||
if (currentSelect === select) {
|
||||
return;
|
||||
}
|
||||
|
||||
let option = select.querySelector(`option[value="${objId}"]`);
|
||||
|
||||
if (!option) {
|
||||
option = new Option(newRepr, newId);
|
||||
select.options.add(option);
|
||||
return;
|
||||
}
|
||||
|
||||
option.textContent = newRepr;
|
||||
option.value = newId;
|
||||
});
|
||||
}
|
||||
|
||||
function dismissAddRelatedObjectPopup(win, newId, newRepr) {
|
||||
const name = removePopupIndex(win.name);
|
||||
const elem = document.getElementById(name);
|
||||
if (elem) {
|
||||
const elemName = elem.nodeName.toUpperCase();
|
||||
if (elemName === 'SELECT') {
|
||||
elem.options[elem.options.length] = new Option(newRepr, newId, true, true);
|
||||
updateRelatedSelectsOptions(elem, win, null, newRepr, newId);
|
||||
} else if (elemName === 'INPUT') {
|
||||
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
|
||||
elem.value += ',' + newId;
|
||||
} else {
|
||||
elem.value = newId;
|
||||
}
|
||||
}
|
||||
// Trigger a change event to update related links if required.
|
||||
$(elem).trigger('change');
|
||||
} else {
|
||||
const toId = name + "_to";
|
||||
const o = new Option(newRepr, newId);
|
||||
SelectBox.add_to_cache(toId, o);
|
||||
SelectBox.redisplay(toId);
|
||||
}
|
||||
const index = relatedWindows.indexOf(win);
|
||||
if (index > -1) {
|
||||
relatedWindows.splice(index, 1);
|
||||
}
|
||||
win.close();
|
||||
}
|
||||
|
||||
function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
|
||||
const id = removePopupIndex(win.name.replace(/^edit_/, ''));
|
||||
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
|
||||
const selects = $(selectsSelector);
|
||||
selects.find('option').each(function() {
|
||||
if (this.value === objId) {
|
||||
this.textContent = newRepr;
|
||||
this.value = newId;
|
||||
}
|
||||
}).trigger('change');
|
||||
updateRelatedSelectsOptions(selects[0], win, objId, newRepr, newId);
|
||||
selects.next().find('.select2-selection__rendered').each(function() {
|
||||
// The element can have a clear button as a child.
|
||||
// Use the lastChild to modify only the displayed value.
|
||||
this.lastChild.textContent = newRepr;
|
||||
this.title = newRepr;
|
||||
});
|
||||
const index = relatedWindows.indexOf(win);
|
||||
if (index > -1) {
|
||||
relatedWindows.splice(index, 1);
|
||||
}
|
||||
win.close();
|
||||
}
|
||||
|
||||
function dismissDeleteRelatedObjectPopup(win, objId) {
|
||||
const id = removePopupIndex(win.name.replace(/^delete_/, ''));
|
||||
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
|
||||
const selects = $(selectsSelector);
|
||||
selects.find('option').each(function() {
|
||||
if (this.value === objId) {
|
||||
$(this).remove();
|
||||
}
|
||||
}).trigger('change');
|
||||
const index = relatedWindows.indexOf(win);
|
||||
if (index > -1) {
|
||||
relatedWindows.splice(index, 1);
|
||||
}
|
||||
win.close();
|
||||
}
|
||||
|
||||
window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup;
|
||||
window.dismissRelatedLookupPopup = dismissRelatedLookupPopup;
|
||||
window.showRelatedObjectPopup = showRelatedObjectPopup;
|
||||
window.updateRelatedObjectLinks = updateRelatedObjectLinks;
|
||||
window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup;
|
||||
window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup;
|
||||
window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup;
|
||||
window.dismissChildPopups = dismissChildPopups;
|
||||
|
||||
// Kept for backward compatibility
|
||||
window.showAddAnotherPopup = showRelatedObjectPopup;
|
||||
window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup;
|
||||
|
||||
window.addEventListener('unload', function(evt) {
|
||||
window.dismissChildPopups();
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
setPopupIndex();
|
||||
$("a[data-popup-opener]").on('click', function(event) {
|
||||
event.preventDefault();
|
||||
opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener"));
|
||||
});
|
||||
$('body').on('click', '.related-widget-wrapper-link[data-popup="yes"]', function(e) {
|
||||
e.preventDefault();
|
||||
if (this.href) {
|
||||
const event = $.Event('django:show-related', {href: this.href});
|
||||
$(this).trigger(event);
|
||||
if (!event.isDefaultPrevented()) {
|
||||
showRelatedObjectPopup(this);
|
||||
}
|
||||
}
|
||||
});
|
||||
$('body').on('change', '.related-widget-wrapper select', function(e) {
|
||||
const event = $.Event('django:update-related');
|
||||
$(this).trigger(event);
|
||||
if (!event.isDefaultPrevented()) {
|
||||
updateRelatedObjectLinks(this);
|
||||
}
|
||||
});
|
||||
$('.related-widget-wrapper select').trigger('change');
|
||||
$('body').on('click', '.related-lookup', function(e) {
|
||||
e.preventDefault();
|
||||
const event = $.Event('django:lookup-related');
|
||||
$(this).trigger(event);
|
||||
if (!event.isDefaultPrevented()) {
|
||||
showRelatedObjectLookupPopup(this);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
33
staticfiles/admin/js/autocomplete.js
Normal file
@ -0,0 +1,33 @@
|
||||
'use strict';
|
||||
{
|
||||
const $ = django.jQuery;
|
||||
|
||||
$.fn.djangoAdminSelect2 = function() {
|
||||
$.each(this, function(i, element) {
|
||||
$(element).select2({
|
||||
ajax: {
|
||||
data: (params) => {
|
||||
return {
|
||||
term: params.term,
|
||||
page: params.page,
|
||||
app_label: element.dataset.appLabel,
|
||||
model_name: element.dataset.modelName,
|
||||
field_name: element.dataset.fieldName
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
return this;
|
||||
};
|
||||
|
||||
$(function() {
|
||||
// Initialize all autocomplete widgets except the one in the template
|
||||
// form used when a new formset is added.
|
||||
$('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2();
|
||||
});
|
||||
|
||||
document.addEventListener('formset:added', (event) => {
|
||||
$(event.target).find('.admin-autocomplete').djangoAdminSelect2();
|
||||
});
|
||||
}
|
||||
239
staticfiles/admin/js/calendar.js
Normal file
@ -0,0 +1,239 @@
|
||||
/*global gettext, pgettext, get_format, quickElement, removeChildren*/
|
||||
/*
|
||||
calendar.js - Calendar functions by Adrian Holovaty
|
||||
depends on core.js for utility functions like removeChildren or quickElement
|
||||
*/
|
||||
'use strict';
|
||||
{
|
||||
// CalendarNamespace -- Provides a collection of HTML calendar-related helper functions
|
||||
const CalendarNamespace = {
|
||||
monthsOfYear: [
|
||||
gettext('January'),
|
||||
gettext('February'),
|
||||
gettext('March'),
|
||||
gettext('April'),
|
||||
gettext('May'),
|
||||
gettext('June'),
|
||||
gettext('July'),
|
||||
gettext('August'),
|
||||
gettext('September'),
|
||||
gettext('October'),
|
||||
gettext('November'),
|
||||
gettext('December')
|
||||
],
|
||||
monthsOfYearAbbrev: [
|
||||
pgettext('abbrev. month January', 'Jan'),
|
||||
pgettext('abbrev. month February', 'Feb'),
|
||||
pgettext('abbrev. month March', 'Mar'),
|
||||
pgettext('abbrev. month April', 'Apr'),
|
||||
pgettext('abbrev. month May', 'May'),
|
||||
pgettext('abbrev. month June', 'Jun'),
|
||||
pgettext('abbrev. month July', 'Jul'),
|
||||
pgettext('abbrev. month August', 'Aug'),
|
||||
pgettext('abbrev. month September', 'Sep'),
|
||||
pgettext('abbrev. month October', 'Oct'),
|
||||
pgettext('abbrev. month November', 'Nov'),
|
||||
pgettext('abbrev. month December', 'Dec')
|
||||
],
|
||||
daysOfWeek: [
|
||||
gettext('Sunday'),
|
||||
gettext('Monday'),
|
||||
gettext('Tuesday'),
|
||||
gettext('Wednesday'),
|
||||
gettext('Thursday'),
|
||||
gettext('Friday'),
|
||||
gettext('Saturday')
|
||||
],
|
||||
daysOfWeekAbbrev: [
|
||||
pgettext('abbrev. day Sunday', 'Sun'),
|
||||
pgettext('abbrev. day Monday', 'Mon'),
|
||||
pgettext('abbrev. day Tuesday', 'Tue'),
|
||||
pgettext('abbrev. day Wednesday', 'Wed'),
|
||||
pgettext('abbrev. day Thursday', 'Thur'),
|
||||
pgettext('abbrev. day Friday', 'Fri'),
|
||||
pgettext('abbrev. day Saturday', 'Sat')
|
||||
],
|
||||
daysOfWeekInitial: [
|
||||
pgettext('one letter Sunday', 'S'),
|
||||
pgettext('one letter Monday', 'M'),
|
||||
pgettext('one letter Tuesday', 'T'),
|
||||
pgettext('one letter Wednesday', 'W'),
|
||||
pgettext('one letter Thursday', 'T'),
|
||||
pgettext('one letter Friday', 'F'),
|
||||
pgettext('one letter Saturday', 'S')
|
||||
],
|
||||
firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')),
|
||||
isLeapYear: function(year) {
|
||||
return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0));
|
||||
},
|
||||
getDaysInMonth: function(month, year) {
|
||||
let days;
|
||||
if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) {
|
||||
days = 31;
|
||||
}
|
||||
else if (month === 4 || month === 6 || month === 9 || month === 11) {
|
||||
days = 30;
|
||||
}
|
||||
else if (month === 2 && CalendarNamespace.isLeapYear(year)) {
|
||||
days = 29;
|
||||
}
|
||||
else {
|
||||
days = 28;
|
||||
}
|
||||
return days;
|
||||
},
|
||||
draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999
|
||||
const today = new Date();
|
||||
const todayDay = today.getDate();
|
||||
const todayMonth = today.getMonth() + 1;
|
||||
const todayYear = today.getFullYear();
|
||||
let todayClass = '';
|
||||
|
||||
// Use UTC functions here because the date field does not contain time
|
||||
// and using the UTC function variants prevent the local time offset
|
||||
// from altering the date, specifically the day field. For example:
|
||||
//
|
||||
// ```
|
||||
// var x = new Date('2013-10-02');
|
||||
// var day = x.getDate();
|
||||
// ```
|
||||
//
|
||||
// The day variable above will be 1 instead of 2 in, say, US Pacific time
|
||||
// zone.
|
||||
let isSelectedMonth = false;
|
||||
if (typeof selected !== 'undefined') {
|
||||
isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month);
|
||||
}
|
||||
|
||||
month = parseInt(month);
|
||||
year = parseInt(year);
|
||||
const calDiv = document.getElementById(div_id);
|
||||
removeChildren(calDiv);
|
||||
const calTable = document.createElement('table');
|
||||
quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year);
|
||||
const tableBody = quickElement('tbody', calTable);
|
||||
|
||||
// Draw days-of-week header
|
||||
let tableRow = quickElement('tr', tableBody);
|
||||
for (let i = 0; i < 7; i++) {
|
||||
quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]);
|
||||
}
|
||||
|
||||
const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
|
||||
const days = CalendarNamespace.getDaysInMonth(month, year);
|
||||
|
||||
let nonDayCell;
|
||||
|
||||
// Draw blanks before first of month
|
||||
tableRow = quickElement('tr', tableBody);
|
||||
for (let i = 0; i < startingPos; i++) {
|
||||
nonDayCell = quickElement('td', tableRow, ' ');
|
||||
nonDayCell.className = "nonday";
|
||||
}
|
||||
|
||||
function calendarMonth(y, m) {
|
||||
function onClick(e) {
|
||||
e.preventDefault();
|
||||
callback(y, m, this.textContent);
|
||||
}
|
||||
return onClick;
|
||||
}
|
||||
|
||||
// Draw days of month
|
||||
let currentDay = 1;
|
||||
for (let i = startingPos; currentDay <= days; i++) {
|
||||
if (i % 7 === 0 && currentDay !== 1) {
|
||||
tableRow = quickElement('tr', tableBody);
|
||||
}
|
||||
if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) {
|
||||
todayClass = 'today';
|
||||
} else {
|
||||
todayClass = '';
|
||||
}
|
||||
|
||||
// use UTC function; see above for explanation.
|
||||
if (isSelectedMonth && currentDay === selected.getUTCDate()) {
|
||||
if (todayClass !== '') {
|
||||
todayClass += " ";
|
||||
}
|
||||
todayClass += "selected";
|
||||
}
|
||||
|
||||
const cell = quickElement('td', tableRow, '', 'class', todayClass);
|
||||
const link = quickElement('a', cell, currentDay, 'href', '#');
|
||||
link.addEventListener('click', calendarMonth(year, month));
|
||||
currentDay++;
|
||||
}
|
||||
|
||||
// Draw blanks after end of month (optional, but makes for valid code)
|
||||
while (tableRow.childNodes.length < 7) {
|
||||
nonDayCell = quickElement('td', tableRow, ' ');
|
||||
nonDayCell.className = "nonday";
|
||||
}
|
||||
|
||||
calDiv.appendChild(calTable);
|
||||
}
|
||||
};
|
||||
|
||||
// Calendar -- A calendar instance
|
||||
function Calendar(div_id, callback, selected) {
|
||||
// div_id (string) is the ID of the element in which the calendar will
|
||||
// be displayed
|
||||
// callback (string) is the name of a JavaScript function that will be
|
||||
// called with the parameters (year, month, day) when a day in the
|
||||
// calendar is clicked
|
||||
this.div_id = div_id;
|
||||
this.callback = callback;
|
||||
this.today = new Date();
|
||||
this.currentMonth = this.today.getMonth() + 1;
|
||||
this.currentYear = this.today.getFullYear();
|
||||
if (typeof selected !== 'undefined') {
|
||||
this.selected = selected;
|
||||
}
|
||||
}
|
||||
Calendar.prototype = {
|
||||
drawCurrent: function() {
|
||||
CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected);
|
||||
},
|
||||
drawDate: function(month, year, selected) {
|
||||
this.currentMonth = month;
|
||||
this.currentYear = year;
|
||||
|
||||
if(selected) {
|
||||
this.selected = selected;
|
||||
}
|
||||
|
||||
this.drawCurrent();
|
||||
},
|
||||
drawPreviousMonth: function() {
|
||||
if (this.currentMonth === 1) {
|
||||
this.currentMonth = 12;
|
||||
this.currentYear--;
|
||||
}
|
||||
else {
|
||||
this.currentMonth--;
|
||||
}
|
||||
this.drawCurrent();
|
||||
},
|
||||
drawNextMonth: function() {
|
||||
if (this.currentMonth === 12) {
|
||||
this.currentMonth = 1;
|
||||
this.currentYear++;
|
||||
}
|
||||
else {
|
||||
this.currentMonth++;
|
||||
}
|
||||
this.drawCurrent();
|
||||
},
|
||||
drawPreviousYear: function() {
|
||||
this.currentYear--;
|
||||
this.drawCurrent();
|
||||
},
|
||||
drawNextYear: function() {
|
||||
this.currentYear++;
|
||||
this.drawCurrent();
|
||||
}
|
||||
};
|
||||
window.Calendar = Calendar;
|
||||
window.CalendarNamespace = CalendarNamespace;
|
||||
}
|
||||
29
staticfiles/admin/js/cancel.js
Normal file
@ -0,0 +1,29 @@
|
||||
'use strict';
|
||||
{
|
||||
// Call function fn when the DOM is loaded and ready. If it is already
|
||||
// loaded, call the function now.
|
||||
// http://youmightnotneedjquery.com/#ready
|
||||
function ready(fn) {
|
||||
if (document.readyState !== 'loading') {
|
||||
fn();
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', fn);
|
||||
}
|
||||
}
|
||||
|
||||
ready(function() {
|
||||
function handleClick(event) {
|
||||
event.preventDefault();
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
if (params.has('_popup')) {
|
||||
window.close(); // Close the popup.
|
||||
} else {
|
||||
window.history.back(); // Otherwise, go back.
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll('.cancel-link').forEach(function(el) {
|
||||
el.addEventListener('click', handleClick);
|
||||
});
|
||||
});
|
||||
}
|
||||
16
staticfiles/admin/js/change_form.js
Normal file
@ -0,0 +1,16 @@
|
||||
'use strict';
|
||||
{
|
||||
const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];
|
||||
const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName;
|
||||
if (modelName) {
|
||||
const form = document.getElementById(modelName + '_form');
|
||||
for (const element of form.elements) {
|
||||
// HTMLElement.offsetParent returns null when the element is not
|
||||
// rendered.
|
||||
if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) {
|
||||
element.focus();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
184
staticfiles/admin/js/core.js
Normal file
@ -0,0 +1,184 @@
|
||||
// Core JavaScript helper functions
|
||||
'use strict';
|
||||
|
||||
// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]);
|
||||
function quickElement() {
|
||||
const obj = document.createElement(arguments[0]);
|
||||
if (arguments[2]) {
|
||||
const textNode = document.createTextNode(arguments[2]);
|
||||
obj.appendChild(textNode);
|
||||
}
|
||||
const len = arguments.length;
|
||||
for (let i = 3; i < len; i += 2) {
|
||||
obj.setAttribute(arguments[i], arguments[i + 1]);
|
||||
}
|
||||
arguments[1].appendChild(obj);
|
||||
return obj;
|
||||
}
|
||||
|
||||
// "a" is reference to an object
|
||||
function removeChildren(a) {
|
||||
while (a.hasChildNodes()) {
|
||||
a.removeChild(a.lastChild);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Find-position functions by PPK
|
||||
// See https://www.quirksmode.org/js/findpos.html
|
||||
// ----------------------------------------------------------------------------
|
||||
function findPosX(obj) {
|
||||
let curleft = 0;
|
||||
if (obj.offsetParent) {
|
||||
while (obj.offsetParent) {
|
||||
curleft += obj.offsetLeft - obj.scrollLeft;
|
||||
obj = obj.offsetParent;
|
||||
}
|
||||
} else if (obj.x) {
|
||||
curleft += obj.x;
|
||||
}
|
||||
return curleft;
|
||||
}
|
||||
|
||||
function findPosY(obj) {
|
||||
let curtop = 0;
|
||||
if (obj.offsetParent) {
|
||||
while (obj.offsetParent) {
|
||||
curtop += obj.offsetTop - obj.scrollTop;
|
||||
obj = obj.offsetParent;
|
||||
}
|
||||
} else if (obj.y) {
|
||||
curtop += obj.y;
|
||||
}
|
||||
return curtop;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Date object extensions
|
||||
// ----------------------------------------------------------------------------
|
||||
{
|
||||
Date.prototype.getTwelveHours = function() {
|
||||
return this.getHours() % 12 || 12;
|
||||
};
|
||||
|
||||
Date.prototype.getTwoDigitMonth = function() {
|
||||
return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1);
|
||||
};
|
||||
|
||||
Date.prototype.getTwoDigitDate = function() {
|
||||
return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate();
|
||||
};
|
||||
|
||||
Date.prototype.getTwoDigitTwelveHour = function() {
|
||||
return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours();
|
||||
};
|
||||
|
||||
Date.prototype.getTwoDigitHour = function() {
|
||||
return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours();
|
||||
};
|
||||
|
||||
Date.prototype.getTwoDigitMinute = function() {
|
||||
return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
|
||||
};
|
||||
|
||||
Date.prototype.getTwoDigitSecond = function() {
|
||||
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
|
||||
};
|
||||
|
||||
Date.prototype.getAbbrevDayName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? '0' + this.getDay()
|
||||
: window.CalendarNamespace.daysOfWeekAbbrev[this.getDay()];
|
||||
};
|
||||
|
||||
Date.prototype.getFullDayName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? '0' + this.getDay()
|
||||
: window.CalendarNamespace.daysOfWeek[this.getDay()];
|
||||
};
|
||||
|
||||
Date.prototype.getAbbrevMonthName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? this.getTwoDigitMonth()
|
||||
: window.CalendarNamespace.monthsOfYearAbbrev[this.getMonth()];
|
||||
};
|
||||
|
||||
Date.prototype.getFullMonthName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? this.getTwoDigitMonth()
|
||||
: window.CalendarNamespace.monthsOfYear[this.getMonth()];
|
||||
};
|
||||
|
||||
Date.prototype.strftime = function(format) {
|
||||
const fields = {
|
||||
a: this.getAbbrevDayName(),
|
||||
A: this.getFullDayName(),
|
||||
b: this.getAbbrevMonthName(),
|
||||
B: this.getFullMonthName(),
|
||||
c: this.toString(),
|
||||
d: this.getTwoDigitDate(),
|
||||
H: this.getTwoDigitHour(),
|
||||
I: this.getTwoDigitTwelveHour(),
|
||||
m: this.getTwoDigitMonth(),
|
||||
M: this.getTwoDigitMinute(),
|
||||
p: (this.getHours() >= 12) ? 'PM' : 'AM',
|
||||
S: this.getTwoDigitSecond(),
|
||||
w: '0' + this.getDay(),
|
||||
x: this.toLocaleDateString(),
|
||||
X: this.toLocaleTimeString(),
|
||||
y: ('' + this.getFullYear()).substr(2, 4),
|
||||
Y: '' + this.getFullYear(),
|
||||
'%': '%'
|
||||
};
|
||||
let result = '', i = 0;
|
||||
while (i < format.length) {
|
||||
if (format.charAt(i) === '%') {
|
||||
result += fields[format.charAt(i + 1)];
|
||||
++i;
|
||||
}
|
||||
else {
|
||||
result += format.charAt(i);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// String object extensions
|
||||
// ----------------------------------------------------------------------------
|
||||
String.prototype.strptime = function(format) {
|
||||
const split_format = format.split(/[.\-/]/);
|
||||
const date = this.split(/[.\-/]/);
|
||||
let i = 0;
|
||||
let day, month, year;
|
||||
while (i < split_format.length) {
|
||||
switch (split_format[i]) {
|
||||
case "%d":
|
||||
day = date[i];
|
||||
break;
|
||||
case "%m":
|
||||
month = date[i] - 1;
|
||||
break;
|
||||
case "%Y":
|
||||
year = date[i];
|
||||
break;
|
||||
case "%y":
|
||||
// A %y value in the range of [00, 68] is in the current
|
||||
// century, while [69, 99] is in the previous century,
|
||||
// according to the Open Group Specification.
|
||||
if (parseInt(date[i], 10) >= 69) {
|
||||
year = date[i];
|
||||
} else {
|
||||
year = (new Date(Date.UTC(date[i], 0))).getUTCFullYear() + 100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
// Create Date object from UTC since the parsed value is supposed to be
|
||||
// in UTC, not local time. Also, the calendar uses UTC functions for
|
||||
// date extraction.
|
||||
return new Date(Date.UTC(year, month, day));
|
||||
};
|
||||
}
|
||||
30
staticfiles/admin/js/filters.js
Normal file
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Persist changelist filters state (collapsed/expanded).
|
||||
*/
|
||||
'use strict';
|
||||
{
|
||||
// Init filters.
|
||||
let filters = JSON.parse(sessionStorage.getItem('django.admin.filtersState'));
|
||||
|
||||
if (!filters) {
|
||||
filters = {};
|
||||
}
|
||||
|
||||
Object.entries(filters).forEach(([key, value]) => {
|
||||
const detailElement = document.querySelector(`[data-filter-title='${CSS.escape(key)}']`);
|
||||
|
||||
// Check if the filter is present, it could be from other view.
|
||||
if (detailElement) {
|
||||
value ? detailElement.setAttribute('open', '') : detailElement.removeAttribute('open');
|
||||
}
|
||||
});
|
||||
|
||||
// Save filter state when clicks.
|
||||
const details = document.querySelectorAll('details');
|
||||
details.forEach(detail => {
|
||||
detail.addEventListener('toggle', event => {
|
||||
filters[`${event.target.dataset.filterTitle}`] = detail.open;
|
||||
sessionStorage.setItem('django.admin.filtersState', JSON.stringify(filters));
|
||||
});
|
||||
});
|
||||
}
|
||||
359
staticfiles/admin/js/inlines.js
Normal file
@ -0,0 +1,359 @@
|
||||
/*global DateTimeShortcuts, SelectFilter*/
|
||||
/**
|
||||
* Django admin inlines
|
||||
*
|
||||
* Based on jQuery Formset 1.1
|
||||
* @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com)
|
||||
* @requires jQuery 1.2.6 or later
|
||||
*
|
||||
* Copyright (c) 2009, Stanislaus Madueke
|
||||
* All rights reserved.
|
||||
*
|
||||
* Spiced up with Code from Zain Memon's GSoC project 2009
|
||||
* and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip.
|
||||
*
|
||||
* Licensed under the New BSD License
|
||||
* See: https://opensource.org/licenses/bsd-license.php
|
||||
*/
|
||||
'use strict';
|
||||
{
|
||||
const $ = django.jQuery;
|
||||
$.fn.formset = function(opts) {
|
||||
const options = $.extend({}, $.fn.formset.defaults, opts);
|
||||
const $this = $(this);
|
||||
const $parent = $this.parent();
|
||||
const updateElementIndex = function(el, prefix, ndx) {
|
||||
const id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))");
|
||||
const replacement = prefix + "-" + ndx;
|
||||
if ($(el).prop("for")) {
|
||||
$(el).prop("for", $(el).prop("for").replace(id_regex, replacement));
|
||||
}
|
||||
if (el.id) {
|
||||
el.id = el.id.replace(id_regex, replacement);
|
||||
}
|
||||
if (el.name) {
|
||||
el.name = el.name.replace(id_regex, replacement);
|
||||
}
|
||||
};
|
||||
const totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off");
|
||||
let nextIndex = parseInt(totalForms.val(), 10);
|
||||
const maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off");
|
||||
const minForms = $("#id_" + options.prefix + "-MIN_NUM_FORMS").prop("autocomplete", "off");
|
||||
let addButton;
|
||||
|
||||
/**
|
||||
* The "Add another MyModel" button below the inline forms.
|
||||
*/
|
||||
const addInlineAddButton = function() {
|
||||
if (addButton === null) {
|
||||
if ($this.prop("tagName") === "TR") {
|
||||
// If forms are laid out as table rows, insert the
|
||||
// "add" button in a new table row:
|
||||
const numCols = $this.eq(-1).children().length;
|
||||
$parent.append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="#">' + options.addText + "</a></tr>");
|
||||
addButton = $parent.find("tr:last a");
|
||||
} else {
|
||||
// Otherwise, insert it immediately after the last form:
|
||||
$this.filter(":last").after('<div class="' + options.addCssClass + '"><a href="#">' + options.addText + "</a></div>");
|
||||
addButton = $this.filter(":last").next().find("a");
|
||||
}
|
||||
}
|
||||
addButton.on('click', addInlineClickHandler);
|
||||
};
|
||||
|
||||
const addInlineClickHandler = function(e) {
|
||||
e.preventDefault();
|
||||
const template = $("#" + options.prefix + "-empty");
|
||||
const row = template.clone(true);
|
||||
row.removeClass(options.emptyCssClass)
|
||||
.addClass(options.formCssClass)
|
||||
.attr("id", options.prefix + "-" + nextIndex);
|
||||
addInlineDeleteButton(row);
|
||||
row.find("*").each(function() {
|
||||
updateElementIndex(this, options.prefix, totalForms.val());
|
||||
});
|
||||
// Insert the new form when it has been fully edited.
|
||||
row.insertBefore($(template));
|
||||
// Update number of total forms.
|
||||
$(totalForms).val(parseInt(totalForms.val(), 10) + 1);
|
||||
nextIndex += 1;
|
||||
// Hide the add button if there's a limit and it's been reached.
|
||||
if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) {
|
||||
addButton.parent().hide();
|
||||
}
|
||||
// Show the remove buttons if there are more than min_num.
|
||||
toggleDeleteButtonVisibility(row.closest('.inline-group'));
|
||||
|
||||
// Pass the new form to the post-add callback, if provided.
|
||||
if (options.added) {
|
||||
options.added(row);
|
||||
}
|
||||
row.get(0).dispatchEvent(new CustomEvent("formset:added", {
|
||||
bubbles: true,
|
||||
detail: {
|
||||
formsetName: options.prefix
|
||||
}
|
||||
}));
|
||||
};
|
||||
|
||||
/**
|
||||
* The "X" button that is part of every unsaved inline.
|
||||
* (When saved, it is replaced with a "Delete" checkbox.)
|
||||
*/
|
||||
const addInlineDeleteButton = function(row) {
|
||||
if (row.is("tr")) {
|
||||
// If the forms are laid out in table rows, insert
|
||||
// the remove button into the last table cell:
|
||||
row.children(":last").append('<div><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></div>");
|
||||
} else if (row.is("ul") || row.is("ol")) {
|
||||
// If they're laid out as an ordered/unordered list,
|
||||
// insert an <li> after the last list item:
|
||||
row.append('<li><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></li>");
|
||||
} else {
|
||||
// Otherwise, just insert the remove button as the
|
||||
// last child element of the form's container:
|
||||
row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></span>");
|
||||
}
|
||||
// Add delete handler for each row.
|
||||
row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this));
|
||||
};
|
||||
|
||||
const inlineDeleteHandler = function(e1) {
|
||||
e1.preventDefault();
|
||||
const deleteButton = $(e1.target);
|
||||
const row = deleteButton.closest('.' + options.formCssClass);
|
||||
const inlineGroup = row.closest('.inline-group');
|
||||
// Remove the parent form containing this button,
|
||||
// and also remove the relevant row with non-field errors:
|
||||
const prevRow = row.prev();
|
||||
if (prevRow.length && prevRow.hasClass('row-form-errors')) {
|
||||
prevRow.remove();
|
||||
}
|
||||
row.remove();
|
||||
nextIndex -= 1;
|
||||
// Pass the deleted form to the post-delete callback, if provided.
|
||||
if (options.removed) {
|
||||
options.removed(row);
|
||||
}
|
||||
document.dispatchEvent(new CustomEvent("formset:removed", {
|
||||
detail: {
|
||||
formsetName: options.prefix
|
||||
}
|
||||
}));
|
||||
// Update the TOTAL_FORMS form count.
|
||||
const forms = $("." + options.formCssClass);
|
||||
$("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length);
|
||||
// Show add button again once below maximum number.
|
||||
if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) {
|
||||
addButton.parent().show();
|
||||
}
|
||||
// Hide the remove buttons if at min_num.
|
||||
toggleDeleteButtonVisibility(inlineGroup);
|
||||
// Also, update names and ids for all remaining form controls so
|
||||
// they remain in sequence:
|
||||
let i, formCount;
|
||||
const updateElementCallback = function() {
|
||||
updateElementIndex(this, options.prefix, i);
|
||||
};
|
||||
for (i = 0, formCount = forms.length; i < formCount; i++) {
|
||||
updateElementIndex($(forms).get(i), options.prefix, i);
|
||||
$(forms.get(i)).find("*").each(updateElementCallback);
|
||||
}
|
||||
};
|
||||
|
||||
const toggleDeleteButtonVisibility = function(inlineGroup) {
|
||||
if ((minForms.val() !== '') && (minForms.val() - totalForms.val()) >= 0) {
|
||||
inlineGroup.find('.inline-deletelink').hide();
|
||||
} else {
|
||||
inlineGroup.find('.inline-deletelink').show();
|
||||
}
|
||||
};
|
||||
|
||||
$this.each(function(i) {
|
||||
$(this).not("." + options.emptyCssClass).addClass(options.formCssClass);
|
||||
});
|
||||
|
||||
// Create the delete buttons for all unsaved inlines:
|
||||
$this.filter('.' + options.formCssClass + ':not(.has_original):not(.' + options.emptyCssClass + ')').each(function() {
|
||||
addInlineDeleteButton($(this));
|
||||
});
|
||||
toggleDeleteButtonVisibility($this);
|
||||
|
||||
// Create the add button, initially hidden.
|
||||
addButton = options.addButton;
|
||||
addInlineAddButton();
|
||||
|
||||
// Show the add button if allowed to add more items.
|
||||
// Note that max_num = None translates to a blank string.
|
||||
const showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0;
|
||||
if ($this.length && showAddButton) {
|
||||
addButton.parent().show();
|
||||
} else {
|
||||
addButton.parent().hide();
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/* Setup plugin defaults */
|
||||
$.fn.formset.defaults = {
|
||||
prefix: "form", // The form prefix for your django formset
|
||||
addText: "add another", // Text for the add link
|
||||
deleteText: "remove", // Text for the delete link
|
||||
addCssClass: "add-row", // CSS class applied to the add link
|
||||
deleteCssClass: "delete-row", // CSS class applied to the delete link
|
||||
emptyCssClass: "empty-row", // CSS class applied to the empty row
|
||||
formCssClass: "dynamic-form", // CSS class applied to each form in a formset
|
||||
added: null, // Function called each time a new form is added
|
||||
removed: null, // Function called each time a form is deleted
|
||||
addButton: null // Existing add button to use
|
||||
};
|
||||
|
||||
|
||||
// Tabular inlines ---------------------------------------------------------
|
||||
$.fn.tabularFormset = function(selector, options) {
|
||||
const $rows = $(this);
|
||||
|
||||
const reinitDateTimeShortCuts = function() {
|
||||
// Reinitialize the calendar and clock widgets by force
|
||||
if (typeof DateTimeShortcuts !== "undefined") {
|
||||
$(".datetimeshortcuts").remove();
|
||||
DateTimeShortcuts.init();
|
||||
}
|
||||
};
|
||||
|
||||
const updateSelectFilter = function() {
|
||||
// If any SelectFilter widgets are a part of the new form,
|
||||
// instantiate a new SelectFilter instance for it.
|
||||
if (typeof SelectFilter !== 'undefined') {
|
||||
$('.selectfilter').each(function(index, value) {
|
||||
SelectFilter.init(value.id, this.dataset.fieldName, false);
|
||||
});
|
||||
$('.selectfilterstacked').each(function(index, value) {
|
||||
SelectFilter.init(value.id, this.dataset.fieldName, true);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const initPrepopulatedFields = function(row) {
|
||||
row.find('.prepopulated_field').each(function() {
|
||||
const field = $(this),
|
||||
input = field.find('input, select, textarea'),
|
||||
dependency_list = input.data('dependency_list') || [],
|
||||
dependencies = [];
|
||||
$.each(dependency_list, function(i, field_name) {
|
||||
dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id'));
|
||||
});
|
||||
if (dependencies.length) {
|
||||
input.prepopulate(dependencies, input.attr('maxlength'));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$rows.formset({
|
||||
prefix: options.prefix,
|
||||
addText: options.addText,
|
||||
formCssClass: "dynamic-" + options.prefix,
|
||||
deleteCssClass: "inline-deletelink",
|
||||
deleteText: options.deleteText,
|
||||
emptyCssClass: "empty-form",
|
||||
added: function(row) {
|
||||
initPrepopulatedFields(row);
|
||||
reinitDateTimeShortCuts();
|
||||
updateSelectFilter();
|
||||
},
|
||||
addButton: options.addButton
|
||||
});
|
||||
|
||||
return $rows;
|
||||
};
|
||||
|
||||
// Stacked inlines ---------------------------------------------------------
|
||||
$.fn.stackedFormset = function(selector, options) {
|
||||
const $rows = $(this);
|
||||
const updateInlineLabel = function(row) {
|
||||
$(selector).find(".inline_label").each(function(i) {
|
||||
const count = i + 1;
|
||||
$(this).html($(this).html().replace(/(#\d+)/g, "#" + count));
|
||||
});
|
||||
};
|
||||
|
||||
const reinitDateTimeShortCuts = function() {
|
||||
// Reinitialize the calendar and clock widgets by force, yuck.
|
||||
if (typeof DateTimeShortcuts !== "undefined") {
|
||||
$(".datetimeshortcuts").remove();
|
||||
DateTimeShortcuts.init();
|
||||
}
|
||||
};
|
||||
|
||||
const updateSelectFilter = function() {
|
||||
// If any SelectFilter widgets were added, instantiate a new instance.
|
||||
if (typeof SelectFilter !== "undefined") {
|
||||
$(".selectfilter").each(function(index, value) {
|
||||
SelectFilter.init(value.id, this.dataset.fieldName, false);
|
||||
});
|
||||
$(".selectfilterstacked").each(function(index, value) {
|
||||
SelectFilter.init(value.id, this.dataset.fieldName, true);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const initPrepopulatedFields = function(row) {
|
||||
row.find('.prepopulated_field').each(function() {
|
||||
const field = $(this),
|
||||
input = field.find('input, select, textarea'),
|
||||
dependency_list = input.data('dependency_list') || [],
|
||||
dependencies = [];
|
||||
$.each(dependency_list, function(i, field_name) {
|
||||
// Dependency in a fieldset.
|
||||
let field_element = row.find('.form-row .field-' + field_name);
|
||||
// Dependency without a fieldset.
|
||||
if (!field_element.length) {
|
||||
field_element = row.find('.form-row.field-' + field_name);
|
||||
}
|
||||
dependencies.push('#' + field_element.find('input, select, textarea').attr('id'));
|
||||
});
|
||||
if (dependencies.length) {
|
||||
input.prepopulate(dependencies, input.attr('maxlength'));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$rows.formset({
|
||||
prefix: options.prefix,
|
||||
addText: options.addText,
|
||||
formCssClass: "dynamic-" + options.prefix,
|
||||
deleteCssClass: "inline-deletelink",
|
||||
deleteText: options.deleteText,
|
||||
emptyCssClass: "empty-form",
|
||||
removed: updateInlineLabel,
|
||||
added: function(row) {
|
||||
initPrepopulatedFields(row);
|
||||
reinitDateTimeShortCuts();
|
||||
updateSelectFilter();
|
||||
updateInlineLabel(row);
|
||||
},
|
||||
addButton: options.addButton
|
||||
});
|
||||
|
||||
return $rows;
|
||||
};
|
||||
|
||||
$(document).ready(function() {
|
||||
$(".js-inline-admin-formset").each(function() {
|
||||
const data = $(this).data(),
|
||||
inlineOptions = data.inlineFormset;
|
||||
let selector;
|
||||
switch(data.inlineType) {
|
||||
case "stacked":
|
||||
selector = inlineOptions.name + "-group .inline-related";
|
||||
$(selector).stackedFormset(selector, inlineOptions.options);
|
||||
break;
|
||||
case "tabular":
|
||||
selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr.form-row";
|
||||
$(selector).tabularFormset(selector, inlineOptions.options);
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
8
staticfiles/admin/js/jquery.init.js
Normal file
@ -0,0 +1,8 @@
|
||||
/*global jQuery:false*/
|
||||
'use strict';
|
||||
/* Puts the included jQuery into our own namespace using noConflict and passing
|
||||
* it 'true'. This ensures that the included jQuery doesn't pollute the global
|
||||
* namespace (i.e. this preserves pre-existing values for both window.$ and
|
||||
* window.jQuery).
|
||||
*/
|
||||
window.django = {jQuery: jQuery.noConflict(true)};
|
||||
79
staticfiles/admin/js/nav_sidebar.js
Normal file
@ -0,0 +1,79 @@
|
||||
'use strict';
|
||||
{
|
||||
const toggleNavSidebar = document.getElementById('toggle-nav-sidebar');
|
||||
if (toggleNavSidebar !== null) {
|
||||
const navSidebar = document.getElementById('nav-sidebar');
|
||||
const main = document.getElementById('main');
|
||||
let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen');
|
||||
if (navSidebarIsOpen === null) {
|
||||
navSidebarIsOpen = 'true';
|
||||
}
|
||||
main.classList.toggle('shifted', navSidebarIsOpen === 'true');
|
||||
navSidebar.setAttribute('aria-expanded', navSidebarIsOpen);
|
||||
|
||||
toggleNavSidebar.addEventListener('click', function() {
|
||||
if (navSidebarIsOpen === 'true') {
|
||||
navSidebarIsOpen = 'false';
|
||||
} else {
|
||||
navSidebarIsOpen = 'true';
|
||||
}
|
||||
localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen);
|
||||
main.classList.toggle('shifted');
|
||||
navSidebar.setAttribute('aria-expanded', navSidebarIsOpen);
|
||||
});
|
||||
}
|
||||
|
||||
function initSidebarQuickFilter() {
|
||||
const options = [];
|
||||
const navSidebar = document.getElementById('nav-sidebar');
|
||||
if (!navSidebar) {
|
||||
return;
|
||||
}
|
||||
navSidebar.querySelectorAll('th[scope=row] a').forEach((container) => {
|
||||
options.push({title: container.innerHTML, node: container});
|
||||
});
|
||||
|
||||
function checkValue(event) {
|
||||
let filterValue = event.target.value;
|
||||
if (filterValue) {
|
||||
filterValue = filterValue.toLowerCase();
|
||||
}
|
||||
if (event.key === 'Escape') {
|
||||
filterValue = '';
|
||||
event.target.value = ''; // clear input
|
||||
}
|
||||
let matches = false;
|
||||
for (const o of options) {
|
||||
let displayValue = '';
|
||||
if (filterValue) {
|
||||
if (o.title.toLowerCase().indexOf(filterValue) === -1) {
|
||||
displayValue = 'none';
|
||||
} else {
|
||||
matches = true;
|
||||
}
|
||||
}
|
||||
// show/hide parent <TR>
|
||||
o.node.parentNode.parentNode.style.display = displayValue;
|
||||
}
|
||||
if (!filterValue || matches) {
|
||||
event.target.classList.remove('no-results');
|
||||
} else {
|
||||
event.target.classList.add('no-results');
|
||||
}
|
||||
sessionStorage.setItem('django.admin.navSidebarFilterValue', filterValue);
|
||||
}
|
||||
|
||||
const nav = document.getElementById('nav-filter');
|
||||
nav.addEventListener('change', checkValue, false);
|
||||
nav.addEventListener('input', checkValue, false);
|
||||
nav.addEventListener('keyup', checkValue, false);
|
||||
|
||||
const storedValue = sessionStorage.getItem('django.admin.navSidebarFilterValue');
|
||||
if (storedValue) {
|
||||
nav.value = storedValue;
|
||||
checkValue({target: nav, key: ''});
|
||||
}
|
||||
}
|
||||
window.initSidebarQuickFilter = initSidebarQuickFilter;
|
||||
initSidebarQuickFilter();
|
||||
}
|
||||
15
staticfiles/admin/js/popup_response.js
Normal file
@ -0,0 +1,15 @@
|
||||
'use strict';
|
||||
{
|
||||
const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse);
|
||||
switch(initData.action) {
|
||||
case 'change':
|
||||
opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value);
|
||||
break;
|
||||
case 'delete':
|
||||
opener.dismissDeleteRelatedObjectPopup(window, initData.value);
|
||||
break;
|
||||
default:
|
||||
opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
43
staticfiles/admin/js/prepopulate.js
Normal file
@ -0,0 +1,43 @@
|
||||
/*global URLify*/
|
||||
'use strict';
|
||||
{
|
||||
const $ = django.jQuery;
|
||||
$.fn.prepopulate = function(dependencies, maxLength, allowUnicode) {
|
||||
/*
|
||||
Depends on urlify.js
|
||||
Populates a selected field with the values of the dependent fields,
|
||||
URLifies and shortens the string.
|
||||
dependencies - array of dependent fields ids
|
||||
maxLength - maximum length of the URLify'd string
|
||||
allowUnicode - Unicode support of the URLify'd string
|
||||
*/
|
||||
return this.each(function() {
|
||||
const prepopulatedField = $(this);
|
||||
|
||||
const populate = function() {
|
||||
// Bail if the field's value has been changed by the user
|
||||
if (prepopulatedField.data('_changed')) {
|
||||
return;
|
||||
}
|
||||
|
||||
const values = [];
|
||||
$.each(dependencies, function(i, field) {
|
||||
field = $(field);
|
||||
if (field.val().length > 0) {
|
||||
values.push(field.val());
|
||||
}
|
||||
});
|
||||
prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode));
|
||||
};
|
||||
|
||||
prepopulatedField.data('_changed', false);
|
||||
prepopulatedField.on('change', function() {
|
||||
prepopulatedField.data('_changed', true);
|
||||
});
|
||||
|
||||
if (!prepopulatedField.val()) {
|
||||
$(dependencies.join(',')).on('keyup change focus', populate);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
15
staticfiles/admin/js/prepopulate_init.js
Normal file
@ -0,0 +1,15 @@
|
||||
'use strict';
|
||||
{
|
||||
const $ = django.jQuery;
|
||||
const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields');
|
||||
$.each(fields, function(index, field) {
|
||||
$(
|
||||
'.empty-form .form-row .field-' + field.name +
|
||||
', .empty-form.form-row .field-' + field.name +
|
||||
', .empty-form .form-row.field-' + field.name
|
||||
).addClass('prepopulated_field');
|
||||
$(field.id).data('dependency_list', field.dependency_list).prepopulate(
|
||||
field.dependency_ids, field.maxLength, field.allowUnicode
|
||||
);
|
||||
});
|
||||
}
|
||||
51
staticfiles/admin/js/theme.js
Normal file
@ -0,0 +1,51 @@
|
||||
'use strict';
|
||||
{
|
||||
function setTheme(mode) {
|
||||
if (mode !== "light" && mode !== "dark" && mode !== "auto") {
|
||||
console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);
|
||||
mode = "auto";
|
||||
}
|
||||
document.documentElement.dataset.theme = mode;
|
||||
localStorage.setItem("theme", mode);
|
||||
}
|
||||
|
||||
function cycleTheme() {
|
||||
const currentTheme = localStorage.getItem("theme") || "auto";
|
||||
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
||||
|
||||
if (prefersDark) {
|
||||
// Auto (dark) -> Light -> Dark
|
||||
if (currentTheme === "auto") {
|
||||
setTheme("light");
|
||||
} else if (currentTheme === "light") {
|
||||
setTheme("dark");
|
||||
} else {
|
||||
setTheme("auto");
|
||||
}
|
||||
} else {
|
||||
// Auto (light) -> Dark -> Light
|
||||
if (currentTheme === "auto") {
|
||||
setTheme("dark");
|
||||
} else if (currentTheme === "dark") {
|
||||
setTheme("light");
|
||||
} else {
|
||||
setTheme("auto");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function initTheme() {
|
||||
// set theme defined in localStorage if there is one, or fallback to auto mode
|
||||
const currentTheme = localStorage.getItem("theme");
|
||||
currentTheme ? setTheme(currentTheme) : setTheme("auto");
|
||||
}
|
||||
|
||||
window.addEventListener('load', function(_) {
|
||||
const buttons = document.getElementsByClassName("theme-toggle");
|
||||
Array.from(buttons).forEach((btn) => {
|
||||
btn.addEventListener("click", cycleTheme);
|
||||
});
|
||||
});
|
||||
|
||||
initTheme();
|
||||
}
|
||||
29
staticfiles/admin/js/unusable_password_field.js
Normal file
@ -0,0 +1,29 @@
|
||||
"use strict";
|
||||
// Fallback JS for browsers which do not support :has selector used in
|
||||
// admin/css/unusable_password_fields.css
|
||||
// Remove file once all supported browsers support :has selector
|
||||
try {
|
||||
// If browser does not support :has selector this will raise an error
|
||||
document.querySelector("form:has(input)");
|
||||
} catch (error) {
|
||||
console.log("Defaulting to javascript for usable password form management: " + error);
|
||||
// JS replacement for unsupported :has selector
|
||||
document.querySelectorAll('input[name="usable_password"]').forEach(option => {
|
||||
option.addEventListener('change', function() {
|
||||
const usablePassword = (this.value === "true" ? this.checked : !this.checked);
|
||||
const submit1 = document.querySelector('input[type="submit"].set-password');
|
||||
const submit2 = document.querySelector('input[type="submit"].unset-password');
|
||||
const messages = document.querySelector('#id_unusable_warning');
|
||||
document.getElementById('id_password1').closest('.form-row').hidden = !usablePassword;
|
||||
document.getElementById('id_password2').closest('.form-row').hidden = !usablePassword;
|
||||
if (messages) {
|
||||
messages.hidden = usablePassword;
|
||||
}
|
||||
if (submit1 && submit2) {
|
||||
submit1.hidden = !usablePassword;
|
||||
submit2.hidden = usablePassword;
|
||||
}
|
||||
});
|
||||
option.dispatchEvent(new Event('change'));
|
||||
});
|
||||
}
|
||||
169
staticfiles/admin/js/urlify.js
Normal file
@ -0,0 +1,169 @@
|
||||
/*global XRegExp*/
|
||||
'use strict';
|
||||
{
|
||||
const LATIN_MAP = {
|
||||
'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE',
|
||||
'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I',
|
||||
'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O',
|
||||
'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U',
|
||||
'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à': 'a',
|
||||
'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c',
|
||||
'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i',
|
||||
'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o',
|
||||
'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u',
|
||||
'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y'
|
||||
};
|
||||
const LATIN_SYMBOLS_MAP = {
|
||||
'©': '(c)'
|
||||
};
|
||||
const GREEK_MAP = {
|
||||
'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h',
|
||||
'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3',
|
||||
'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f',
|
||||
'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o',
|
||||
'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's', 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y',
|
||||
'ΐ': 'i', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z',
|
||||
'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N',
|
||||
'Ξ': '3', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y',
|
||||
'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I',
|
||||
'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I', 'Ϋ': 'Y'
|
||||
};
|
||||
const TURKISH_MAP = {
|
||||
'ş': 's', 'Ş': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u',
|
||||
'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ğ': 'g', 'Ğ': 'G'
|
||||
};
|
||||
const ROMANIAN_MAP = {
|
||||
'ă': 'a', 'î': 'i', 'ș': 's', 'ț': 't', 'â': 'a',
|
||||
'Ă': 'A', 'Î': 'I', 'Ș': 'S', 'Ț': 'T', 'Â': 'A'
|
||||
};
|
||||
const RUSSIAN_MAP = {
|
||||
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo',
|
||||
'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm',
|
||||
'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u',
|
||||
'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '',
|
||||
'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya',
|
||||
'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo',
|
||||
'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M',
|
||||
'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U',
|
||||
'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '',
|
||||
'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya'
|
||||
};
|
||||
const UKRAINIAN_MAP = {
|
||||
'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G', 'є': 'ye', 'і': 'i',
|
||||
'ї': 'yi', 'ґ': 'g'
|
||||
};
|
||||
const CZECH_MAP = {
|
||||
'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't',
|
||||
'ů': 'u', 'ž': 'z', 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R',
|
||||
'Š': 'S', 'Ť': 'T', 'Ů': 'U', 'Ž': 'Z'
|
||||
};
|
||||
const SLOVAK_MAP = {
|
||||
'á': 'a', 'ä': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'í': 'i', 'ľ': 'l',
|
||||
'ĺ': 'l', 'ň': 'n', 'ó': 'o', 'ô': 'o', 'ŕ': 'r', 'š': 's', 'ť': 't',
|
||||
'ú': 'u', 'ý': 'y', 'ž': 'z',
|
||||
'Á': 'a', 'Ä': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Í': 'I', 'Ľ': 'L',
|
||||
'Ĺ': 'L', 'Ň': 'N', 'Ó': 'O', 'Ô': 'O', 'Ŕ': 'R', 'Š': 'S', 'Ť': 'T',
|
||||
'Ú': 'U', 'Ý': 'Y', 'Ž': 'Z'
|
||||
};
|
||||
const POLISH_MAP = {
|
||||
'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's',
|
||||
'ź': 'z', 'ż': 'z',
|
||||
'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S',
|
||||
'Ź': 'Z', 'Ż': 'Z'
|
||||
};
|
||||
const LATVIAN_MAP = {
|
||||
'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l',
|
||||
'ņ': 'n', 'š': 's', 'ū': 'u', 'ž': 'z',
|
||||
'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ļ': 'L',
|
||||
'Ņ': 'N', 'Š': 'S', 'Ū': 'U', 'Ž': 'Z'
|
||||
};
|
||||
const ARABIC_MAP = {
|
||||
'أ': 'a', 'ب': 'b', 'ت': 't', 'ث': 'th', 'ج': 'g', 'ح': 'h', 'خ': 'kh', 'د': 'd',
|
||||
'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'ش': 'sh', 'ص': 's', 'ض': 'd', 'ط': 't',
|
||||
'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'ف': 'f', 'ق': 'k', 'ك': 'k', 'ل': 'l', 'م': 'm',
|
||||
'ن': 'n', 'ه': 'h', 'و': 'o', 'ي': 'y'
|
||||
};
|
||||
const LITHUANIAN_MAP = {
|
||||
'ą': 'a', 'č': 'c', 'ę': 'e', 'ė': 'e', 'į': 'i', 'š': 's', 'ų': 'u',
|
||||
'ū': 'u', 'ž': 'z',
|
||||
'Ą': 'A', 'Č': 'C', 'Ę': 'E', 'Ė': 'E', 'Į': 'I', 'Š': 'S', 'Ų': 'U',
|
||||
'Ū': 'U', 'Ž': 'Z'
|
||||
};
|
||||
const SERBIAN_MAP = {
|
||||
'ђ': 'dj', 'ј': 'j', 'љ': 'lj', 'њ': 'nj', 'ћ': 'c', 'џ': 'dz',
|
||||
'đ': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C',
|
||||
'Џ': 'Dz', 'Đ': 'Dj'
|
||||
};
|
||||
const AZERBAIJANI_MAP = {
|
||||
'ç': 'c', 'ə': 'e', 'ğ': 'g', 'ı': 'i', 'ö': 'o', 'ş': 's', 'ü': 'u',
|
||||
'Ç': 'C', 'Ə': 'E', 'Ğ': 'G', 'İ': 'I', 'Ö': 'O', 'Ş': 'S', 'Ü': 'U'
|
||||
};
|
||||
const GEORGIAN_MAP = {
|
||||
'ა': 'a', 'ბ': 'b', 'გ': 'g', 'დ': 'd', 'ე': 'e', 'ვ': 'v', 'ზ': 'z',
|
||||
'თ': 't', 'ი': 'i', 'კ': 'k', 'ლ': 'l', 'მ': 'm', 'ნ': 'n', 'ო': 'o',
|
||||
'პ': 'p', 'ჟ': 'j', 'რ': 'r', 'ს': 's', 'ტ': 't', 'უ': 'u', 'ფ': 'f',
|
||||
'ქ': 'q', 'ღ': 'g', 'ყ': 'y', 'შ': 'sh', 'ჩ': 'ch', 'ც': 'c', 'ძ': 'dz',
|
||||
'წ': 'w', 'ჭ': 'ch', 'ხ': 'x', 'ჯ': 'j', 'ჰ': 'h'
|
||||
};
|
||||
|
||||
const ALL_DOWNCODE_MAPS = [
|
||||
LATIN_MAP,
|
||||
LATIN_SYMBOLS_MAP,
|
||||
GREEK_MAP,
|
||||
TURKISH_MAP,
|
||||
ROMANIAN_MAP,
|
||||
RUSSIAN_MAP,
|
||||
UKRAINIAN_MAP,
|
||||
CZECH_MAP,
|
||||
SLOVAK_MAP,
|
||||
POLISH_MAP,
|
||||
LATVIAN_MAP,
|
||||
ARABIC_MAP,
|
||||
LITHUANIAN_MAP,
|
||||
SERBIAN_MAP,
|
||||
AZERBAIJANI_MAP,
|
||||
GEORGIAN_MAP
|
||||
];
|
||||
|
||||
const Downcoder = {
|
||||
'Initialize': function() {
|
||||
if (Downcoder.map) { // already made
|
||||
return;
|
||||
}
|
||||
Downcoder.map = {};
|
||||
for (const lookup of ALL_DOWNCODE_MAPS) {
|
||||
Object.assign(Downcoder.map, lookup);
|
||||
}
|
||||
Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g');
|
||||
}
|
||||
};
|
||||
|
||||
function downcode(slug) {
|
||||
Downcoder.Initialize();
|
||||
return slug.replace(Downcoder.regex, function(m) {
|
||||
return Downcoder.map[m];
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function URLify(s, num_chars, allowUnicode) {
|
||||
// changes, e.g., "Petty theft" to "petty-theft"
|
||||
if (!allowUnicode) {
|
||||
s = downcode(s);
|
||||
}
|
||||
s = s.toLowerCase(); // convert to lowercase
|
||||
// if downcode doesn't hit, the char will be stripped here
|
||||
if (allowUnicode) {
|
||||
// Keep Unicode letters including both lowercase and uppercase
|
||||
// characters, whitespace, and dash; remove other characters.
|
||||
s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), '');
|
||||
} else {
|
||||
s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars
|
||||
}
|
||||
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
|
||||
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
|
||||
s = s.substring(0, num_chars); // trim to first num_chars chars
|
||||
return s.replace(/-+$/g, ''); // trim any trailing hyphens
|
||||
}
|
||||
window.URLify = URLify;
|
||||
}
|
||||
20
staticfiles/admin/js/vendor/jquery/LICENSE.txt
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
Copyright OpenJS Foundation and other contributors, https://openjsf.org/
|
||||
|
||||
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.
|
||||
10716
staticfiles/admin/js/vendor/jquery/jquery.js
vendored
Normal file
2
staticfiles/admin/js/vendor/jquery/jquery.min.js
vendored
Normal file
21
staticfiles/admin/js/vendor/select2/LICENSE.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.
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/af.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Verwyders asseblief "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Voer asseblief "+(e.minimum-e.input.length)+" of meer karakters"},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var n="Kies asseblief net "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"},removeAllItems:function(){return"Verwyder alle items"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/ar.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(n){return"الرجاء حذف "+(n.input.length-n.maximum)+" عناصر"},inputTooShort:function(n){return"الرجاء إضافة "+(n.minimum-n.input.length)+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(n){return"تستطيع إختيار "+n.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"},removeAllItems:function(){return"قم بإزالة كل العناصر"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/az.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/az",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+" simvol silin"},inputTooShort:function(n){return n.minimum-n.input.length+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(n){return"Sadəcə "+n.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"},removeAllItems:function(){return"Bütün elementləri sil"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/bg.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bg",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u="Моля въведете с "+e+" по-малко символ";return e>1&&(u+="a"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u="Моля въведете още "+e+" символ";return e>1&&(u+="a"),u},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(n){var e="Можете да направите до "+n.maximum+" ";return n.maximum>1?e+="избора":e+="избор",e},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"},removeAllItems:function(){return"Премахнете всички елементи"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/bn.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bn",[],function(){return{errorLoading:function(){return"ফলাফলগুলি লোড করা যায়নি।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।";return 1!=e&&(u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।"),u},inputTooShort:function(n){return n.minimum-n.input.length+" টি অক্ষর অথবা অধিক অক্ষর লিখুন।"},loadingMore:function(){return"আরো ফলাফল লোড হচ্ছে ..."},maximumSelected:function(n){var e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।";return 1!=n.maximum&&(e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।"),e},noResults:function(){return"কোন ফলাফল পাওয়া যায়নি।"},searching:function(){return"অনুসন্ধান করা হচ্ছে ..."}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/bs.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/bs",[],function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspijelo."},inputTooLong:function(n){var r=n.input.length-n.maximum,t="Obrišite "+r+" simbol";return t+=e(r,"","a","a")},inputTooShort:function(n){var r=n.minimum-n.input.length,t="Ukucajte bar još "+r+" simbol";return t+=e(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(n){var r="Možete izabrati samo "+n.maximum+" stavk";return r+=e(n.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Uklonite sve stavke"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/ca.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Si us plau, elimina "+n+" car";return r+=1==n?"àcter":"àcters"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Si us plau, introdueix "+n+" car";return r+=1==n?"àcter":"àcters"},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var n="Només es pot seleccionar "+e.maximum+" element";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"},removeAllItems:function(){return"Treu tots els elements"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/cs.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/cs",[],function(){function e(e,n){switch(e){case 2:return n?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadejte o jeden znak méně.":t<=4?"Prosím, zadejte o "+e(t,!0)+" znaky méně.":"Prosím, zadejte o "+t+" znaků méně."},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadejte ještě jeden znak.":t<=4?"Prosím, zadejte ještě další "+e(t,!0)+" znaky.":"Prosím, zadejte ještě dalších "+t+" znaků."},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(n){var t=n.maximum;return 1==t?"Můžete zvolit jen jednu položku.":t<=4?"Můžete zvolit maximálně "+e(t,!1)+" položky.":"Můžete zvolit maximálně "+t+" položek."},noResults:function(){return"Nenalezeny žádné položky."},searching:function(){return"Vyhledávání…"},removeAllItems:function(){return"Odstraňte všechny položky"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/da.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){return"Angiv venligst "+(e.input.length-e.maximum)+" tegn mindre"},inputTooShort:function(e){return"Angiv venligst "+(e.minimum-e.input.length)+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var n="Du kan kun vælge "+e.maximum+" emne";return 1!=e.maximum&&(n+="r"),n},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/de.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+=" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/dsb.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/dsb",[],function(){var n=["znamuško","znamušce","znamuška","znamuškow"],e=["zapisk","zapiska","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njejsu se dali zacytaś."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Pšosym lašuj "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Pšosym zapódaj nanejmjenjej "+a+" "+u(a,n)},loadingMore:function(){return"Dalšne wuslědki se zacytaju…"},maximumSelected:function(n){return"Móžoš jano "+n.maximum+" "+u(n.maximum,e)+"wubraś."},noResults:function(){return"Žedne wuslědki namakane"},searching:function(){return"Pyta se…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/el.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(n){var e=n.input.length-n.maximum,u="Παρακαλώ διαγράψτε "+e+" χαρακτήρ";return 1==e&&(u+="α"),1!=e&&(u+="ες"),u},inputTooShort:function(n){return"Παρακαλώ συμπληρώστε "+(n.minimum-n.input.length)+" ή περισσότερους χαρακτήρες"},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(n){var e="Μπορείτε να επιλέξετε μόνο "+n.maximum+" επιλογ";return 1==n.maximum&&(e+="ή"),1!=n.maximum&&(e+="ές"),e},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"},removeAllItems:function(){return"Καταργήστε όλα τα στοιχεία"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/en.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Please delete "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var n="You can only select "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/es.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"No se pudieron cargar los resultados"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Por favor, elimine "+n+" car";return r+=1==n?"ácter":"acteres"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Por favor, introduzca "+n+" car";return r+=1==n?"ácter":"acteres"},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var n="Sólo puede seleccionar "+e.maximum+" elemento";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Eliminar todos los elementos"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/et.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" vähem"},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" rohkem"},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var n="Saad vaid "+e.maximum+" tulemus";return 1==e.maximum?n+="e":n+="t",n+=" valida"},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"},removeAllItems:function(){return"Eemalda kõik esemed"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/eu.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gutxiago"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gehiago"},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return 1===e.maximum?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"},removeAllItems:function(){return"Kendu elementu guztiak"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/fa.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(n){return"لطفاً "+(n.input.length-n.maximum)+" کاراکتر را حذف نمایید"},inputTooShort:function(n){return"لطفاً تعداد "+(n.minimum-n.input.length)+" کاراکتر یا بیشتر وارد نمایید"},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(n){return"شما تنها میتوانید "+n.maximum+" آیتم را انتخاب نمایید"},noResults:function(){return"هیچ نتیجهای یافت نشد"},searching:function(){return"در حال جستجو..."},removeAllItems:function(){return"همه موارد را حذف کنید"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/fi.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fi",[],function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(n){return"Ole hyvä ja anna "+(n.input.length-n.maximum)+" merkkiä vähemmän"},inputTooShort:function(n){return"Ole hyvä ja anna "+(n.minimum-n.input.length)+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(n){return"Voit valita ainoastaan "+n.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"},removeAllItems:function(){return"Poista kaikki kohteet"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/fr.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Supprimez "+n+" caractère"+(n>1?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/gl.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/gl",[],function(){return{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?"Elimine un carácter":"Elimine "+n+" caracteres"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?"Engada un carácter":"Engada "+n+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return 1===e.maximum?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Elimina todos os elementos"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/he.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="נא למחוק ";return r+=1===e?"תו אחד":e+" תווים"},inputTooShort:function(n){var e=n.minimum-n.input.length,r="נא להכניס ";return r+=1===e?"תו אחד":e+" תווים",r+=" או יותר"},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(n){var e="באפשרותך לבחור עד ";return 1===n.maximum?e+="פריט אחד":e+=n.maximum+" פריטים",e},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"},removeAllItems:function(){return"הסר את כל הפריטים"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/hi.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+" अक्षर को हटा दें";return e>1&&(r=e+" अक्षरों को हटा दें "),r},inputTooShort:function(n){return"कृपया "+(n.minimum-n.input.length)+" या अधिक अक्षर दर्ज करें"},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(n){return"आप केवल "+n.maximum+" आइटम का चयन कर सकते हैं"},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."},removeAllItems:function(){return"सभी वस्तुओं को हटा दें"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/hr.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hr",[],function(){function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+="a"):e+="ova",e}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(e){return"Unesite "+n(e.input.length-e.maximum)},inputTooShort:function(e){return"Unesite još "+n(e.minimum-e.input.length)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(n){return"Maksimalan broj odabranih stavki je "+n.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Ukloni sve stavke"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/hsb.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hsb",[],function(){var n=["znamješko","znamješce","znamješka","znamješkow"],e=["zapisk","zapiskaj","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njedachu so začitać."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Prošu zhašej "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Prošu zapodaj znajmjeńša "+a+" "+u(a,n)},loadingMore:function(){return"Dalše wuslědki so začitaja…"},maximumSelected:function(n){return"Móžeš jenož "+n.maximum+" "+u(n.maximum,e)+"wubrać"},noResults:function(){return"Žane wuslědki namakane"},searching:function(){return"Pyta so…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/hu.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/hu",[],function(){return{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},inputTooLong:function(e){return"Túl hosszú. "+(e.input.length-e.maximum)+" karakterrel több, mint kellene."},inputTooShort:function(e){return"Túl rövid. Még "+(e.minimum-e.input.length)+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"},removeAllItems:function(){return"Távolítson el minden elemet"}}}),e.define,e.require}();
|
||||
3
staticfiles/admin/js/vendor/select2/i18n/hy.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hy",[],function(){return{errorLoading:function(){return"Արդյունքները հնարավոր չէ բեռնել։"},inputTooLong:function(n){return"Խնդրում ենք հեռացնել "+(n.input.length-n.maximum)+" նշան"},inputTooShort:function(n){return"Խնդրում ենք մուտքագրել "+(n.minimum-n.input.length)+" կամ ավել նշաններ"},loadingMore:function(){return"Բեռնվում են նոր արդյունքներ․․․"},maximumSelected:function(n){return"Դուք կարող եք ընտրել առավելագույնը "+n.maximum+" կետ"},noResults:function(){return"Արդյունքներ չեն գտնվել"},searching:function(){return"Որոնում․․․"},removeAllItems:function(){return"Հեռացնել բոլոր տարրերը"}}}),n.define,n.require}();
|
||||