This commit is contained in:
IGNY8 VPS (Salman)
2025-12-14 02:01:53 +00:00
parent 1acecd8639
commit d161378bd9
63 changed files with 849 additions and 9565 deletions

View File

@@ -18,9 +18,6 @@ from import_export import resources
from rangefilter.filters import DateRangeFilter from rangefilter.filters import DateRangeFilter
from rangefilter.filters import DateRangeFilter
class CreditTransactionResource(resources.ModelResource): class CreditTransactionResource(resources.ModelResource):
"""Resource class for exporting Credit Transactions""" """Resource class for exporting Credit Transactions"""
class Meta: class Meta:

View File

@@ -36,10 +36,7 @@ ALLOWED_HOSTS = [
] ]
INSTALLED_APPS = [ INSTALLED_APPS = [
# Django Admin Enhancements (must be before django.contrib.admin) # Core Django apps - Custom admin with IGNY8 branding
'admin_interface',
'colorfield',
# Core Django apps
'igny8_core.admin.apps.Igny8AdminConfig', # Custom admin config 'igny8_core.admin.apps.Igny8AdminConfig', # Custom admin config
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
@@ -207,6 +204,9 @@ USE_TZ = True
STATIC_URL = '/static/' STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'igny8_core', 'static'),
]
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
@@ -600,9 +600,6 @@ LOGGING = {
}, },
} }
# Admin Interface Configuration
X_FRAME_OPTIONS = 'SAMEORIGIN' # Required for django-admin-interface
# Celery Results Backend # Celery Results Backend
CELERY_RESULT_BACKEND = 'django-db' CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache' CELERY_CACHE_BACKEND = 'django-cache'

View File

@@ -1,40 +1,177 @@
/* IGNY8 Custom Admin Styles */ /* ===================================================================
IGNY8 CUSTOM ADMIN STYLES
===================================================================
Using IGNY8 brand colors from frontend design system
=================================================================== */
/* IGNY8 Brand Color Variables */
:root {
--igny8-primary: #0693e3; /* Primary brand blue */
--igny8-primary-dark: #0472b8; /* Primary dark */
--igny8-success: #0bbf87; /* Success teal-green */
--igny8-success-dark: #08966b; /* Success dark */
--igny8-warning: #ff7a00; /* Warning orange */
--igny8-warning-dark: #cc5f00; /* Warning dark */
--igny8-danger: #ef4444; /* Danger red */
--igny8-danger-dark: #d13333; /* Danger dark */
--igny8-purple: #5d4ae3; /* Purple accent */
--igny8-purple-dark: #3a2f94; /* Purple dark */
--igny8-navy: #0d1b2a; /* Dark navy background */
--igny8-navy-light: #142b3f; /* Navy light */
--igny8-surface: #f8fafc; /* Page background */
--igny8-panel: #ffffff; /* Panel background */
--igny8-text: #555a68; /* Main text */
--igny8-text-dim: #64748b; /* Dimmed text */
--igny8-stroke: #e2e8f0; /* Borders */
}
/* ===================================================================
HEADER & BRANDING - IGNY8 Primary Blue with Gradient
=================================================================== */
#header {
background: linear-gradient(135deg, var(--igny8-primary) 0%, var(--igny8-primary-dark) 100%) !important;
color: white !important;
box-shadow: 0 2px 4px rgba(0,0,0,0.1) !important;
}
#header a:link, #header a:visited {
color: white !important;
}
#branding h1, #branding h1 a:link, #branding h1 a:visited {
color: white !important;
}
.header-user-tools a {
color: white !important;
}
/* ===================================================================
SIDEBAR NAVIGATION - IGNY8 Navy Background for Readability
=================================================================== */
#changelist-filter {
background: var(--igny8-surface) !important;
}
#changelist-filter h2 {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px !important;
margin: 0 0 10px 0 !important;
border-radius: 4px !important;
}
#changelist-filter h3 {
color: var(--igny8-text) !important;
font-weight: bold !important;
margin-top: 15px !important;
padding: 8px 10px !important;
background: var(--igny8-surface) !important;
border-left: 3px solid var(--igny8-primary) !important;
}
#changelist-filter li {
padding: 5px 10px !important;
}
#changelist-filter li.selected {
background: rgba(6, 147, 227, 0.1) !important;
border-left: 3px solid var(--igny8-primary) !important;
}
/* Module headers - Navy instead of bright blue */
.module h2, .inline-group h2 {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px !important;
border-radius: 4px 4px 0 0 !important;
}
/* Table headers - White with blue text for readability */
.module caption, .module th, thead th {
background: var(--igny8-surface) !important;
color: var(--igny8-primary) !important;
font-weight: 600 !important;
border-bottom: 2px solid var(--igny8-primary) !important;
}
#result_list thead th {
background: var(--igny8-surface) !important;
color: var(--igny8-primary) !important;
padding: 12px 10px !important;
border-bottom: 2px solid var(--igny8-primary) !important;
}
/* Table header links */
#result_list thead th a:link,
#result_list thead th a:visited {
color: var(--igny8-primary) !important;
font-weight: 600 !important;
}
/* ===================================================================
BUTTONS - IGNY8 Primary Blue
=================================================================== */
.button, input[type=submit], input[type=button], .submit-row input, button, .btn {
background: var(--igny8-primary) !important;
color: white !important;
border: none !important;
padding: 10px 15px !important;
border-radius: 4px !important;
cursor: pointer !important;
font-weight: 500 !important;
}
.button:hover, input[type=submit]:hover, input[type=button]:hover, button:hover, .btn:hover {
background: var(--igny8-primary-dark) !important;
color: white !important;
}
.button:active, .button:focus {
background: var(--igny8-primary-dark) !important;
}
/* Default action button */
.default, input[type=submit].default {
background: var(--igny8-primary) !important;
border: 2px solid var(--igny8-primary-dark) !important;
}
/* Status badges */ /* Status badges */
.status-active { .status-active {
color: #28a745 !important; color: var(--igny8-success) !important;
font-weight: bold; font-weight: bold;
} }
.status-inactive { .status-inactive {
color: #dc3545 !important; color: var(--igny8-danger) !important;
} }
.status-pending { .status-pending {
color: #ffc107 !important; color: var(--igny8-warning) !important;
font-weight: bold; font-weight: bold;
} }
.status-succeeded, .status-completed { .status-succeeded, .status-completed {
color: #28a745 !important; color: var(--igny8-success) !important;
} }
.status-failed, .status-error { .status-failed, .status-error {
color: #dc3545 !important; color: var(--igny8-danger) !important;
} }
/* Credit indicators */ /* Credit indicators */
.credits-low { .credits-low {
color: #dc3545 !important; color: var(--igny8-danger) !important;
font-weight: bold; font-weight: bold;
} }
.credits-medium { .credits-medium {
color: #ffc107 !important; color: var(--igny8-warning) !important;
} }
.credits-high { .credits-high {
color: #28a745 !important; color: var(--igny8-success) !important;
} }
/* Quick action buttons */ /* Quick action buttons */
@@ -45,25 +182,25 @@
text-decoration: none; text-decoration: none;
display: inline-block; display: inline-block;
margin: 2px; margin: 2px;
background-color: #417690; background-color: var(--igny8-primary);
color: white; color: white;
border: none; border: none;
} }
.admin-action-button:hover { .admin-action-button:hover {
background-color: #305d75; background-color: var(--igny8-primary-dark);
color: white; color: white;
text-decoration: none; text-decoration: none;
} }
/* List view enhancements */ /* List view enhancements */
#content-main table tr:hover { #content-main table tr:hover {
background-color: #f8f9fa !important; background-color: var(--igny8-surface) !important;
} }
/* Improve sidebar menu appearance */ /* Improve sidebar menu appearance */
#content-related h3 { #content-related h3 {
background: #417690; background: var(--igny8-primary);
color: white; color: white;
padding: 10px; padding: 10px;
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
@@ -77,42 +214,42 @@
/* Highlight required fields */ /* Highlight required fields */
.required label:after { .required label:after {
content: " *"; content: " *";
color: #dc3545; color: var(--igny8-danger);
} }
/* Success messages */ /* Success messages */
.success, .messagelist .success { .success, .messagelist .success {
background-color: #d4edda !important; background-color: rgba(11, 191, 135, 0.1) !important;
border-color: #c3e6cb !important; border-color: var(--igny8-success) !important;
color: #155724 !important; color: var(--igny8-success-dark) !important;
} }
/* Warning messages */ /* Warning messages */
.warning, .messagelist .warning { .warning, .messagelist .warning {
background-color: #fff3cd !important; background-color: rgba(255, 122, 0, 0.1) !important;
border-color: #ffeaa7 !important; border-color: var(--igny8-warning) !important;
color: #856404 !important; color: var(--igny8-warning-dark) !important;
} }
/* Error messages */ /* Error messages */
.error, .messagelist .error { .error, .messagelist .error {
background-color: #f8d7da !important; background-color: rgba(239, 68, 68, 0.1) !important;
border-color: #f5c6cb !important; border-color: var(--igny8-danger) !important;
color: #721c24 !important; color: var(--igny8-danger-dark) !important;
} }
/* Improve table readability */ /* Improve table readability */
#result_list tbody tr:nth-child(odd) { #result_list tbody tr:nth-child(odd) {
background-color: #f9f9f9; background-color: var(--igny8-surface);
} }
#result_list tbody tr:nth-child(even) { #result_list tbody tr:nth-child(even) {
background-color: #ffffff; background-color: var(--igny8-panel);
} }
/* Better button styling */ /* Better button styling */
.button, input[type=submit], input[type=button], .submit-row input { .button, input[type=submit], input[type=button], .submit-row input {
background: #417690 !important; background: var(--igny8-primary) !important;
color: white !important; color: white !important;
border: none !important; border: none !important;
padding: 10px 15px !important; padding: 10px 15px !important;
@@ -121,21 +258,112 @@
} }
.button:hover, input[type=submit]:hover, input[type=button]:hover { .button:hover, input[type=submit]:hover, input[type=button]:hover {
background: #305d75 !important; background: var(--igny8-primary-dark) !important;
} }
/* Delete button styling */ /* Delete button styling */
.deletelink, .deletelink-box a { .deletelink, .deletelink-box a, a.deletelink:link, a.deletelink:visited {
background: #dc3545 !important; background: var(--igny8-danger) !important;
color: white !important;
} }
.deletelink:hover, .deletelink-box a:hover { .deletelink:hover, .deletelink-box a:hover {
background: #c82333 !important; background: var(--igny8-danger-dark) !important;
}
/* ===================================================================
LINKS - IGNY8 Primary Blue
=================================================================== */
a, a:link, a:visited {
color: var(--igny8-primary) !important;
}
a:hover, a:focus {
color: var(--igny8-primary-dark) !important;
}
.breadcrumbs a {
color: white !important;
}
/* ===================================================================
ACTION BAR - IGNY8 Surface Color
=================================================================== */
.actions {
background: var(--igny8-surface) !important;
border-radius: 4px !important;
padding: 10px !important;
}
.actions select {
border: 1px solid var(--igny8-stroke) !important;
padding: 5px !important;
border-radius: 3px !important;
}
.actions .button, .actions button {
background: var(--igny8-primary) !important;
}
/* ===================================================================
CHECKBOXES & ICONS - IGNY8 Colors
=================================================================== */
input[type="checkbox"]:checked {
accent-color: var(--igny8-primary) !important;
}
.vCheckboxLabel {
display: inline !important;
}
/* ===================================================================
SIDEBAR SECTIONS - Better Contrast
=================================================================== */
#content-related .module {
background: var(--igny8-panel) !important;
border: 1px solid var(--igny8-stroke) !important;
}
#content-related h3 {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px !important;
border-radius: 4px 4px 0 0 !important;
margin: 0 !important;
}
/* ===================================================================
FIELDSET LEGENDS - Navy Background
=================================================================== */
fieldset.module h2, .collapse h2 {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px !important;
border-radius: 4px 4px 0 0 !important;
}
/* ===================================================================
BREADCRUMBS - Better Visibility
=================================================================== */
.breadcrumbs {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px 15px !important;
}
.breadcrumbs a {
color: white !important;
opacity: 0.9;
}
.breadcrumbs a:hover {
opacity: 1;
text-decoration: underline;
} }
/* Improve filter sidebar */ /* Improve filter sidebar */
#changelist-filter h2 { #changelist-filter h2 {
background: #417690; background: var(--igny8-primary);
color: white; color: white;
padding: 8px 10px; padding: 8px 10px;
margin-bottom: 0; margin-bottom: 0;
@@ -145,27 +373,27 @@
font-weight: bold; font-weight: bold;
margin-top: 15px; margin-top: 15px;
padding-bottom: 5px; padding-bottom: 5px;
border-bottom: 1px solid #ddd; border-bottom: 1px solid var(--igny8-stroke);
} }
/* Better pagination */ /* Better pagination */
.paginator { .paginator {
font-size: 14px; font-size: 14px;
padding: 10px; padding: 10px;
background: #f8f9fa; background: var(--igny8-surface);
border-radius: 4px; border-radius: 4px;
} }
.paginator a { .paginator a {
padding: 5px 10px; padding: 5px 10px;
margin: 0 2px; margin: 0 2px;
background: white; background: var(--igny8-panel);
border: 1px solid #ddd; border: 1px solid var(--igny8-stroke);
border-radius: 3px; border-radius: 3px;
} }
.paginator a:hover { .paginator a:hover {
background: #417690; background: var(--igny8-primary);
color: white; color: white;
text-decoration: none; text-decoration: none;
} }
@@ -183,8 +411,9 @@
/* Admin header improvements */ /* Admin header improvements */
#header { #header {
background: #417690; background: linear-gradient(135deg, var(--igny8-primary) 0%, var(--igny8-primary-dark) 100%);
color: white; color: white;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
} }
#header a:link, #header a:visited { #header a:link, #header a:visited {
@@ -197,7 +426,7 @@
/* Fieldset legend styling */ /* Fieldset legend styling */
fieldset.module h2 { fieldset.module h2 {
background: #417690; background: var(--igny8-primary);
color: white; color: white;
padding: 8px 10px; padding: 8px 10px;
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
@@ -205,7 +434,7 @@ fieldset.module h2 {
/* Inline forms */ /* Inline forms */
.inline-group { .inline-group {
border: 1px solid #ddd; border: 1px solid var(--igny8-stroke);
border-radius: 4px; border-radius: 4px;
margin-bottom: 20px; margin-bottom: 20px;
} }
@@ -217,15 +446,15 @@ fieldset.module h2 {
/* Help text styling */ /* Help text styling */
.help { .help {
font-size: 12px; font-size: 12px;
color: #666; color: var(--igny8-text-dim);
display: block; display: block;
margin-top: 5px; margin-top: 5px;
} }
/* Dashboard widget styling */ /* Dashboard widget styling */
.dashboard-card { .dashboard-card {
background: white; background: var(--igny8-panel);
border: 1px solid #ddd; border: 1px solid var(--igny8-stroke);
border-radius: 8px; border-radius: 8px;
padding: 20px; padding: 20px;
margin: 10px 0; margin: 10px 0;
@@ -234,7 +463,7 @@ fieldset.module h2 {
.dashboard-card h2 { .dashboard-card h2 {
margin-top: 0; margin-top: 0;
border-bottom: 2px solid #417690; border-bottom: 2px solid var(--igny8-primary);
padding-bottom: 10px; padding-bottom: 10px;
} }
@@ -246,13 +475,13 @@ fieldset.module h2 {
.metric-value { .metric-value {
font-size: 32px; font-size: 32px;
font-weight: bold; font-weight: bold;
color: #417690; color: var(--igny8-primary);
display: block; display: block;
} }
.metric-label { .metric-label {
font-size: 12px; font-size: 12px;
color: #666; color: var(--igny8-text-dim);
display: block; display: block;
margin-top: 5px; margin-top: 5px;
} }
@@ -266,25 +495,25 @@ fieldset.module h2 {
} }
.alert-error { .alert-error {
background-color: #f8d7da; background-color: rgba(239, 68, 68, 0.1);
border-left-color: #dc3545; border-left-color: var(--igny8-danger);
color: #721c24; color: var(--igny8-danger-dark);
} }
.alert-warning { .alert-warning {
background-color: #fff3cd; background-color: rgba(255, 122, 0, 0.1);
border-left-color: #ffc107; border-left-color: var(--igny8-warning);
color: #856404; color: var(--igny8-warning-dark);
} }
.alert-info { .alert-info {
background-color: #d1ecf1; background-color: rgba(6, 147, 227, 0.1);
border-left-color: #17a2b8; border-left-color: var(--igny8-primary);
color: #0c5460; color: var(--igny8-primary-dark);
} }
.alert-success { .alert-success {
background-color: #d4edda; background-color: rgba(11, 191, 135, 0.1);
border-left-color: #28a745; border-left-color: var(--igny8-success);
color: #155724; color: var(--igny8-success-dark);
} }

View File

@@ -0,0 +1,519 @@
/* ===================================================================
IGNY8 CUSTOM ADMIN STYLES
===================================================================
Using IGNY8 brand colors from frontend design system
=================================================================== */
/* IGNY8 Brand Color Variables */
:root {
--igny8-primary: #0693e3; /* Primary brand blue */
--igny8-primary-dark: #0472b8; /* Primary dark */
--igny8-success: #0bbf87; /* Success teal-green */
--igny8-success-dark: #08966b; /* Success dark */
--igny8-warning: #ff7a00; /* Warning orange */
--igny8-warning-dark: #cc5f00; /* Warning dark */
--igny8-danger: #ef4444; /* Danger red */
--igny8-danger-dark: #d13333; /* Danger dark */
--igny8-purple: #5d4ae3; /* Purple accent */
--igny8-purple-dark: #3a2f94; /* Purple dark */
--igny8-navy: #0d1b2a; /* Dark navy background */
--igny8-navy-light: #142b3f; /* Navy light */
--igny8-surface: #f8fafc; /* Page background */
--igny8-panel: #ffffff; /* Panel background */
--igny8-text: #555a68; /* Main text */
--igny8-text-dim: #64748b; /* Dimmed text */
--igny8-stroke: #e2e8f0; /* Borders */
}
/* ===================================================================
HEADER & BRANDING - IGNY8 Primary Blue with Gradient
=================================================================== */
#header {
background: linear-gradient(135deg, var(--igny8-primary) 0%, var(--igny8-primary-dark) 100%) !important;
color: white !important;
box-shadow: 0 2px 4px rgba(0,0,0,0.1) !important;
}
#header a:link, #header a:visited {
color: white !important;
}
#branding h1, #branding h1 a:link, #branding h1 a:visited {
color: white !important;
}
.header-user-tools a {
color: white !important;
}
/* ===================================================================
SIDEBAR NAVIGATION - IGNY8 Navy Background for Readability
=================================================================== */
#changelist-filter {
background: var(--igny8-surface) !important;
}
#changelist-filter h2 {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px !important;
margin: 0 0 10px 0 !important;
border-radius: 4px !important;
}
#changelist-filter h3 {
color: var(--igny8-text) !important;
font-weight: bold !important;
margin-top: 15px !important;
padding: 8px 10px !important;
background: var(--igny8-surface) !important;
border-left: 3px solid var(--igny8-primary) !important;
}
#changelist-filter li {
padding: 5px 10px !important;
}
#changelist-filter li.selected {
background: rgba(6, 147, 227, 0.1) !important;
border-left: 3px solid var(--igny8-primary) !important;
}
/* Module headers - Navy instead of bright blue */
.module h2, .inline-group h2 {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px !important;
border-radius: 4px 4px 0 0 !important;
}
/* Table headers - White with blue text for readability */
.module caption, .module th, thead th {
background: var(--igny8-surface) !important;
color: var(--igny8-primary) !important;
font-weight: 600 !important;
border-bottom: 2px solid var(--igny8-primary) !important;
}
#result_list thead th {
background: var(--igny8-surface) !important;
color: var(--igny8-primary) !important;
padding: 12px 10px !important;
border-bottom: 2px solid var(--igny8-primary) !important;
}
/* Table header links */
#result_list thead th a:link,
#result_list thead th a:visited {
color: var(--igny8-primary) !important;
font-weight: 600 !important;
}
/* ===================================================================
BUTTONS - IGNY8 Primary Blue
=================================================================== */
.button, input[type=submit], input[type=button], .submit-row input, button, .btn {
background: var(--igny8-primary) !important;
color: white !important;
border: none !important;
padding: 10px 15px !important;
border-radius: 4px !important;
cursor: pointer !important;
font-weight: 500 !important;
}
.button:hover, input[type=submit]:hover, input[type=button]:hover, button:hover, .btn:hover {
background: var(--igny8-primary-dark) !important;
color: white !important;
}
.button:active, .button:focus {
background: var(--igny8-primary-dark) !important;
}
/* Default action button */
.default, input[type=submit].default {
background: var(--igny8-primary) !important;
border: 2px solid var(--igny8-primary-dark) !important;
}
/* Status badges */
.status-active {
color: var(--igny8-success) !important;
font-weight: bold;
}
.status-inactive {
color: var(--igny8-danger) !important;
}
.status-pending {
color: var(--igny8-warning) !important;
font-weight: bold;
}
.status-succeeded, .status-completed {
color: var(--igny8-success) !important;
}
.status-failed, .status-error {
color: var(--igny8-danger) !important;
}
/* Credit indicators */
.credits-low {
color: var(--igny8-danger) !important;
font-weight: bold;
}
.credits-medium {
color: var(--igny8-warning) !important;
}
.credits-high {
color: var(--igny8-success) !important;
}
/* Quick action buttons */
.admin-action-button {
padding: 5px 15px;
border-radius: 4px;
cursor: pointer;
text-decoration: none;
display: inline-block;
margin: 2px;
background-color: var(--igny8-primary);
color: white;
border: none;
}
.admin-action-button:hover {
background-color: var(--igny8-primary-dark);
color: white;
text-decoration: none;
}
/* List view enhancements */
#content-main table tr:hover {
background-color: var(--igny8-surface) !important;
}
/* Improve sidebar menu appearance */
#content-related h3 {
background: var(--igny8-primary);
color: white;
padding: 10px;
border-radius: 4px 4px 0 0;
}
/* Better form field spacing */
.form-row {
padding: 10px;
}
/* Highlight required fields */
.required label:after {
content: " *";
color: var(--igny8-danger);
}
/* Success messages */
.success, .messagelist .success {
background-color: rgba(11, 191, 135, 0.1) !important;
border-color: var(--igny8-success) !important;
color: var(--igny8-success-dark) !important;
}
/* Warning messages */
.warning, .messagelist .warning {
background-color: rgba(255, 122, 0, 0.1) !important;
border-color: var(--igny8-warning) !important;
color: var(--igny8-warning-dark) !important;
}
/* Error messages */
.error, .messagelist .error {
background-color: rgba(239, 68, 68, 0.1) !important;
border-color: var(--igny8-danger) !important;
color: var(--igny8-danger-dark) !important;
}
/* Improve table readability */
#result_list tbody tr:nth-child(odd) {
background-color: var(--igny8-surface);
}
#result_list tbody tr:nth-child(even) {
background-color: var(--igny8-panel);
}
/* Better button styling */
.button, input[type=submit], input[type=button], .submit-row input {
background: var(--igny8-primary) !important;
color: white !important;
border: none !important;
padding: 10px 15px !important;
border-radius: 4px !important;
cursor: pointer !important;
}
.button:hover, input[type=submit]:hover, input[type=button]:hover {
background: var(--igny8-primary-dark) !important;
}
/* Delete button styling */
.deletelink, .deletelink-box a, a.deletelink:link, a.deletelink:visited {
background: var(--igny8-danger) !important;
color: white !important;
}
.deletelink:hover, .deletelink-box a:hover {
background: var(--igny8-danger-dark) !important;
}
/* ===================================================================
LINKS - IGNY8 Primary Blue
=================================================================== */
a, a:link, a:visited {
color: var(--igny8-primary) !important;
}
a:hover, a:focus {
color: var(--igny8-primary-dark) !important;
}
.breadcrumbs a {
color: white !important;
}
/* ===================================================================
ACTION BAR - IGNY8 Surface Color
=================================================================== */
.actions {
background: var(--igny8-surface) !important;
border-radius: 4px !important;
padding: 10px !important;
}
.actions select {
border: 1px solid var(--igny8-stroke) !important;
padding: 5px !important;
border-radius: 3px !important;
}
.actions .button, .actions button {
background: var(--igny8-primary) !important;
}
/* ===================================================================
CHECKBOXES & ICONS - IGNY8 Colors
=================================================================== */
input[type="checkbox"]:checked {
accent-color: var(--igny8-primary) !important;
}
.vCheckboxLabel {
display: inline !important;
}
/* ===================================================================
SIDEBAR SECTIONS - Better Contrast
=================================================================== */
#content-related .module {
background: var(--igny8-panel) !important;
border: 1px solid var(--igny8-stroke) !important;
}
#content-related h3 {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px !important;
border-radius: 4px 4px 0 0 !important;
margin: 0 !important;
}
/* ===================================================================
FIELDSET LEGENDS - Navy Background
=================================================================== */
fieldset.module h2, .collapse h2 {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px !important;
border-radius: 4px 4px 0 0 !important;
}
/* ===================================================================
BREADCRUMBS - Better Visibility
=================================================================== */
.breadcrumbs {
background: var(--igny8-navy) !important;
color: white !important;
padding: 10px 15px !important;
}
.breadcrumbs a {
color: white !important;
opacity: 0.9;
}
.breadcrumbs a:hover {
opacity: 1;
text-decoration: underline;
}
/* Improve filter sidebar */
#changelist-filter h2 {
background: var(--igny8-primary);
color: white;
padding: 8px 10px;
margin-bottom: 0;
}
#changelist-filter h3 {
font-weight: bold;
margin-top: 15px;
padding-bottom: 5px;
border-bottom: 1px solid var(--igny8-stroke);
}
/* Better pagination */
.paginator {
font-size: 14px;
padding: 10px;
background: var(--igny8-surface);
border-radius: 4px;
}
.paginator a {
padding: 5px 10px;
margin: 0 2px;
background: var(--igny8-panel);
border: 1px solid var(--igny8-stroke);
border-radius: 3px;
}
.paginator a:hover {
background: var(--igny8-primary);
color: white;
text-decoration: none;
}
/* Responsive improvements */
@media (max-width: 768px) {
#content-main {
padding: 10px;
}
.module table {
font-size: 12px;
}
}
/* Admin header improvements */
#header {
background: linear-gradient(135deg, var(--igny8-primary) 0%, var(--igny8-primary-dark) 100%);
color: white;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
#header a:link, #header a:visited {
color: white;
}
#branding h1 {
color: white;
}
/* Fieldset legend styling */
fieldset.module h2 {
background: var(--igny8-primary);
color: white;
padding: 8px 10px;
border-radius: 4px 4px 0 0;
}
/* Inline forms */
.inline-group {
border: 1px solid var(--igny8-stroke);
border-radius: 4px;
margin-bottom: 20px;
}
.inline-group .tabular {
overflow-x: auto;
}
/* Help text styling */
.help {
font-size: 12px;
color: var(--igny8-text-dim);
display: block;
margin-top: 5px;
}
/* Dashboard widget styling */
.dashboard-card {
background: var(--igny8-panel);
border: 1px solid var(--igny8-stroke);
border-radius: 8px;
padding: 20px;
margin: 10px 0;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.dashboard-card h2 {
margin-top: 0;
border-bottom: 2px solid var(--igny8-primary);
padding-bottom: 10px;
}
.metric {
display: inline-block;
margin: 10px 20px 10px 0;
}
.metric-value {
font-size: 32px;
font-weight: bold;
color: var(--igny8-primary);
display: block;
}
.metric-label {
font-size: 12px;
color: var(--igny8-text-dim);
display: block;
margin-top: 5px;
}
/* Alert styling */
.alert {
padding: 15px;
margin: 10px 0;
border-radius: 4px;
border-left: 4px solid;
}
.alert-error {
background-color: rgba(239, 68, 68, 0.1);
border-left-color: var(--igny8-danger);
color: var(--igny8-danger-dark);
}
.alert-warning {
background-color: rgba(255, 122, 0, 0.1);
border-left-color: var(--igny8-warning);
color: var(--igny8-warning-dark);
}
.alert-info {
background-color: rgba(6, 147, 227, 0.1);
border-left-color: var(--igny8-primary);
color: var(--igny8-primary-dark);
}
.alert-success {
background-color: rgba(11, 191, 135, 0.1);
border-left-color: var(--igny8-success);
color: var(--igny8-success-dark);
}

View File

@@ -1,20 +1,29 @@
/** global: django */ '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);
}
}
if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined') { ready(function() {
(function($) { function handleClick(event) {
'use strict'; event.preventDefault();
$(document).ready(function() { const params = new URLSearchParams(window.location.search);
$('.cancel-link').click(function(e) { if (params.has('_popup')) {
e.preventDefault(); window.close(); // Close the popup.
var parentWindow = window.parent; } else {
if (parentWindow && typeof(parentWindow.dismissRelatedObjectModal) === 'function' && parentWindow !== window) { window.history.back(); // Otherwise, go back.
parentWindow.dismissRelatedObjectModal(); }
} else { }
// fallback to default behavior
window.history.back(); document.querySelectorAll('.cancel-link').forEach(function(el) {
} el.addEventListener('click', handleClick);
return false;
});
}); });
})(django.jQuery); });
} }

View File

@@ -1,49 +0,0 @@
/*global gettext*/
/* copied from django 4.0.7 */
'use strict';
{
window.addEventListener('load', function() {
// Add anchor tag for Show/Hide link
const fieldsets = document.querySelectorAll('fieldset.collapse');
for (const [i, elem] of fieldsets.entries()) {
// Don't hide if fields in this fieldset have errors
if (elem.querySelectorAll('div.errors, ul.errorlist').length === 0) {
const h2 = elem.querySelector('h2');
const link = document.createElement('a');
link.id = 'fieldsetcollapser' + i;
link.className = 'collapse-toggle';
link.href = '#';
// changed: can opt into starting visible
if (elem.classList.contains('expanded')) {
link.textContent = gettext('Hide');
} else {
link.textContent = gettext('Show');
elem.classList.add('collapsed');
}
h2.appendChild(document.createTextNode(' ('));
h2.appendChild(link);
h2.appendChild(document.createTextNode(')'));
}
}
// Add toggle to hide/show anchor tag
const toggleFunc = function(ev) {
if (ev.target.matches('.collapse-toggle')) {
ev.preventDefault();
ev.stopPropagation();
const fieldset = ev.target.closest('fieldset');
if (fieldset.classList.contains('collapsed')) {
// Show
ev.target.textContent = gettext('Hide');
fieldset.classList.remove('collapsed');
} else {
// Hide
ev.target.textContent = gettext('Show');
fieldset.classList.add('collapsed');
}
}
};
document.querySelectorAll('fieldset.module').forEach(function(el) {
el.addEventListener('click', toggleFunc);
});
});
}

View File

@@ -1,48 +1,15 @@
(function() { 'use strict';
{
'use strict'; const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse);
switch(initData.action) {
var windowRef = window; case 'change':
var windowRefProxy; opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value);
var windowName, widgetName; break;
var openerRef = windowRef.opener; case 'delete':
if (!openerRef) { opener.dismissDeleteRelatedObjectPopup(window, initData.value);
// related modal is active break;
openerRef = windowRef.parent; default:
windowName = windowRef.name; opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj);
widgetName = windowName.replace(/^(change|add|delete|lookup)_/, ''); break;
if (typeof(openerRef.id_to_windowname) === 'function') {
// django < 3.1 compatibility
widgetName = openerRef.id_to_windowname(widgetName);
}
windowRefProxy = {
name: widgetName,
location: windowRef.location,
close: function() {
openerRef.dismissRelatedObjectModal();
}
};
windowRef = windowRefProxy;
} }
}
// default django popup_response.js
var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse);
switch (initData.action) {
case 'change':
if (typeof(openerRef.dismissChangeRelatedObjectPopup) === 'function') {
openerRef.dismissChangeRelatedObjectPopup(windowRef, initData.value, initData.obj, initData.new_value);
}
break;
case 'delete':
if (typeof(openerRef.dismissDeleteRelatedObjectPopup) === 'function') {
openerRef.dismissDeleteRelatedObjectPopup(windowRef, initData.value);
}
break;
default:
if (typeof(openerRef.dismissAddRelatedObjectPopup) === 'function') {
openerRef.dismissAddRelatedObjectPopup(windowRef, initData.value, initData.obj);
}
break;
}
})();

View File

@@ -1,45 +0,0 @@
/** global: django */
if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
{
(function($) {
$(document).ready(function(){
function collapsibleInline(scope, collapsed) {
var fieldsetCollapsed = collapsed;
var fieldsetEl = $(scope).find('> fieldset.module');
fieldsetEl.addClass('collapse');
var fieldsetHasErrors = (fieldsetEl.children('.errors').length > 0);
if (fieldsetHasErrors === true) {
fieldsetCollapsed = false;
}
if (fieldsetCollapsed === true) {
fieldsetEl.addClass('collapsed');
}
var collapseToggleText = (fieldsetCollapsed ? gettext('Show') : gettext('Hide'));
var collapseToggleHTML = ' (<a class="collapse-toggle" href="#">' + collapseToggleText + '</a>)';
var headerEl = fieldsetEl.find('> h2,> h3');
headerEl.append(collapseToggleHTML);
}
var stackedInlinesOptionSel = '.admin-interface.collapsible-stacked-inlines';
var stackedInlinesSel = stackedInlinesOptionSel + ' .inline-group[data-inline-type="stacked"]';
var stackedInlinesCollapsed = $(stackedInlinesOptionSel).hasClass('collapsible-stacked-inlines-collapsed');
var tabularInlinesOptionSel = '.admin-interface.collapsible-tabular-inlines';
var tabularInlinesSel = tabularInlinesOptionSel + ' .inline-group[data-inline-type="tabular"] .inline-related.tabular';
var tabularInlinesCollapsed = $(stackedInlinesOptionSel).hasClass('collapsible-tabular-inlines-collapsed');
$(stackedInlinesSel).each(function() {
collapsibleInline(this, stackedInlinesCollapsed);
});
$(tabularInlinesSel).each(function() {
collapsibleInline(this, tabularInlinesCollapsed);
});
});
})(django.jQuery);
}

View File

@@ -1,610 +0,0 @@
.admin-interface {
overflow-x: hidden;
}
/* fix login */
.admin-interface.login #container {
width: 100%;
max-width: 360px;
margin: 15px auto;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.admin-interface.login #content {
padding: 15px 30px 30px 30px;
}
@media (min-width:768px){
.admin-interface.login #container {
margin: 90px auto;
}
}
.admin-interface.login #header {
min-height: auto;
padding: 10px 30px;
line-height: 30px;
align-items: center;
justify-content: flex-start;
}
.admin-interface.login #header #branding h1 {
margin-right:0;
}
.admin-interface.login #header #branding h1 img.logo {
margin-right: 0;
}
.admin-interface.login #header #branding h1 img.logo+span {
display: block;
}
.admin-interface.login #login-form {
display: flex;
flex-direction: column;
}
.admin-interface.login .submit-row {
float: left;
width: 100%;
margin-top: 20px;
padding-top: 0;
padding-left: 0;
text-align: right;
}
.admin-interface.login .submit-row label {
display: none;
}
.admin-interface.login .submit-row input[type="submit"] {
width: 100%;
text-transform: uppercase;
}
.admin-interface.login #footer {
display: none;
}
/* end login fix*/
.admin-interface #header {
height: auto;
min-height: 55px;
box-sizing: border-box;
display: flex;
justify-content: space-between;
align-items: center;
}
@media (max-width:1024px) {
.admin-interface #header {
align-items: start;
}
}
.admin-interface #branding h1 img.logo {
margin-top:10px;
margin-bottom:10px;
margin-right:15px;
display:inline-block !important; /* override inline display:none; */
}
.admin-interface #branding h1 span {
display: inline-block;
}
.admin-interface #branding h1 img.logo+span {
white-space:nowrap;
}
.admin-interface #user-tools {
margin-top: 10px;
margin-bottom: 10px;
white-space: nowrap;
align-self: flex-start;
}
.admin-interface #user-tools br {
display: none;
}
@media (max-width: 768px) {
.admin-interface #user-tools br {
display: block;
}
}
.admin-interface fieldset.collapse {
border: 1px solid transparent;
}
.admin-interface fieldset.collapse.collapsed a.collapse-toggle,
.admin-interface fieldset.collapse a.collapse-toggle,
.admin-interface .inline-group .inline-related fieldset.module a.collapse-toggle,
.admin-interface .inline-group .inline-related fieldset.module.collapsed a.collapse-toggle {
font-weight: normal;
text-transform: lowercase;
font-size: 12px;
text-decoration: underline;
padding: 0 1px;
}
@media (min-width: 1024px) {
.admin-interface #changelist .actions .button,
.admin-interface #changelist .actions .action-counter {
margin-left: 8px;
}
}
.admin-interface #changelist .paginator {
margin-top:-1px; /* merge 2 borders into 1 */
line-height:42px;
}
.admin-interface .paginator a,
.admin-interface .paginator a:link,
.admin-interface .paginator a:visited,
.admin-interface .paginator .this-page {
padding:7px 12px;
}
.admin-interface .paginator a,
.admin-interface .paginator .this-page {
margin-left:0px;
}
.admin-interface .paginator .this-page,
.admin-interface .paginator a.end {
margin-right:25px;
}
.admin-interface .paginator .this-page + a:not(.showall) {
margin-left:-25px;
}
body.admin-interface .paginator a.showall,
body.admin-interface .paginator a.showall:link,
body.admin-interface .paginator a.showall:visited {
margin-left:20px;
}
/* fix help text icon on newline */
.admin-interface .inline-group thead th {
white-space:nowrap;
}
.admin-interface .inline-group thead th img {
vertical-align: -2px;
margin-left: 5px;
}
.admin-interface .inline-group .inlinechangelink {
background-size: contain;
padding-left: 15px;
margin-left: 10px;
}
.admin-interface .file-thumbnail > a {
display: inline-block;
}
.admin-interface .aligned p.file-upload {
display:table;
}
.admin-interface form .form-row p.file-upload > a {
margin-right:20px;
}
.admin-interface form .form-row p.file-upload .clearable-file-input {
display:inline-block;
}
.admin-interface form .form-row p.file-upload .clearable-file-input label {
padding-bottom:0px;
margin-left:2px;
}
.admin-interface form .form-row p.file-upload > input[type="file"] {
margin-top: 0px;
}
@media (max-width:767px){
.admin-interface form .form-row p.file-upload {
width: 100%;
}
.admin-interface form .form-row p.file-upload > a {
margin-right:0px;
display: block;
white-space: pre-wrap;
word-break: break-word;
}
.admin-interface form .form-row p.file-upload .clearable-file-input {
display: block;
margin-top: 10px;
margin-left: 0;
margin-bottom: -10px;
}
.admin-interface form .form-row p.file-upload > input[type="file"] {
display: block;
width: auto;
padding: 0px;
}
/* fix inline horizontal scroll caused by checkbox-row */
.admin-interface form .form-row > div.checkbox-row {
width: 100%;
}
}
/* FIX WIDE FIELDSET HELPS / ERROR MESSAGES */
.admin-interface form .wide p.help,
.admin-interface form .wide div.help {
padding-left: 50px;
}
.admin-interface form .wide input + p.help,
.admin-interface form .wide input + div.help {
margin-left: 160px;
}
@media (max-width:767px){
.admin-interface form .form-row div.help {
display: block;
width: 100%;
}
}
.admin-interface form .wide ul.errorlist {
margin-left: 200px;
}
/* LIST FILTER */
.admin-interface .module.filtered h2 {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.admin-interface .module.filtered #changelist-filter {
min-width: 240px;
}
@media (max-width: 1024px) {
.admin-interface .module.filtered #changelist-filter {
min-width: 200px;
}
}
.admin-interface .module.filtered #changelist-filter h2 {
font-size: 11px;
padding: 10px 15px;
}
.admin-interface .module.filtered #changelist-filter h2 + h3 {
margin-top: 0px;
}
.admin-interface .module.filtered #changelist-filter h3 {
margin-top: 12px;
margin-bottom: 12px;
}
.admin-interface #changelist-form .results {
scrollbar-width: thin;
}
/* begin fix issue #13 - Datetime widget broken in long inlines */
.admin-interface p.datetime {
white-space:nowrap;
}
/* end fix */
/* begin fix lateral padding to align text with field labels */
.admin-interface .module h2,
.admin-interface.dashboard .module caption,
.admin-interface.dashboard .module th,
.admin-interface .module.filtered h2,
.admin-interface .inline-group h2,
.admin-interface #nav-sidebar .module caption,
.admin-interface #nav-sidebar .module th {
padding-left: 10px;
padding-right: 10px;
}
/* end fix */
/* begin fix restrict tabular-inline horizontal-scroll to inline-group instead of whole page */
.admin-interface .inline-group[data-inline-type="tabular"] {
overflow-x:auto;
}
/* end fix */
/* begin fix stacked-inline margin-bottom in responsive small viewport */
.admin-interface .inline-group[data-inline-type="stacked"] .module {
margin-bottom:0px;
}
/* end fix */
/* begin fix tabular inlines horizontal scroll */
.admin-interface .inline-related.tabular {
overflow-x: scroll;
overflow-y: hidden;
}
.admin-interface .inline-related.tabular fieldset.module {
display: contents;
width: 100%;
white-space: nowrap;
position: relative;
}
.admin-interface .inline-related.tabular fieldset.module h2 {
position: sticky;
left: 0;
}
.admin-interface .inline-related.tabular fieldset.module table {
scrollbar-width: thin;
}
.admin-interface .inline-related.tabular fieldset.module table tbody tr {
position: relative;
}
/* end fix */
.admin-interface .inline-related h3 {
padding:6px 10px;
}
/* begin fix issue #12 - Inlines bad delete buttons alignement */
.admin-interface .inline-group .tabular thead th:last-child:not([class]):not([style]) {
text-align:right;
}
.admin-interface .inline-group .tabular tr td {
vertical-align: top;
}
.admin-interface .inline-group .tabular tr td.delete {
text-align:right;
padding-right:15px;
vertical-align: top;
}
.admin-interface .inline-group .tabular tr td input[type="checkbox"] {
margin: 7px 0px;
}
.admin-interface .inline-group .tabular tr td.delete a.inline-deletelink {
margin-top:4px;
overflow:hidden;
text-indent:9999px;
}
/* end fix */
/* top-right buttons color on hover -> just a lighten grey */
.admin-interface .object-tools a {
color:#FFFFFF;
}
.admin-interface .object-tools a:focus,
.admin-interface .object-tools a:hover,
.admin-interface .object-tools li:focus a,
.admin-interface .object-tools li:hover a {
background-color:#AAAAAA;
}
/* improve responsive selector */
/* fix [stacked, not-stacked] equalize horizontal and vertical select padding for selector */
.admin-interface .selector .selector-available select,
.admin-interface .selector .selector-chosen select {
padding: 7px 10px;
display: block;
}
/* fix [stacked, not-stacked] select options text overflow */
.admin-interface .selector .selector-available select option,
.admin-interface .selector .selector-chosen select option {
overflow: hidden;
text-overflow: ellipsis;
}
/* fix [not-stacked] equalize selectors height by adding the height of the .selector-available filter-bar */
.admin-interface .selector:not(.stacked) .selector-chosen select {
height: calc(46px + 17.2em) !important;
}
/* fix nav-sidebar (added in django 3.1.0) */
.admin-interface #toggle-nav-sidebar {
top: 10px;
left: 0;
z-index: 20;
flex: 0 0 30px;
width: 30px;
height: 45px;
margin-top: 10px;
margin-right: -30px;
background-color: #FFFFFF;
font-size: 16px;
border: 1px solid #eaeaea;
border-left: none;
outline: none;
-webkit-box-shadow: 4px 4px 8px -4px #DBDBDB;
-moz-box-shadow: 4px 4px 8px -4px #DBDBDB;
box-shadow: 4px 4px 8px -4px #DBDBDB;
/*transition: left .3s;*/
}
.admin-interface .toggle-nav-sidebar::before {
margin-top: -2px;
}
.admin-interface .main > #nav-sidebar + .content,
.admin-interface .main.shifted > #nav-sidebar + .content {
max-width: 100%;
}
/* hide nav-sidebar below 1280px to prevent horizontal overflow issues */
@media (max-width:1279px) {
.admin-interface #nav-sidebar,
.admin-interface #toggle-nav-sidebar {
display: none;
}
}
.admin-interface #nav-sidebar {
flex: 0 0 360px;
left: -360px;
margin-left: -360px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
padding: 40px 40px 40px 40px;
border-top: none;
border-bottom: none;
border-left: none;
scrollbar-width: thin;
/*transition: left .3s, margin-left .3s;*/
}
.admin-interface #nav-filter {
background-color: transparent;
border-radius: 4px;
height: 30px;
margin: 0 0 30px 0;
padding: 5px 6px;
outline-width: initial;
}
@media (min-width:1280px) {
.admin-interface #main.shifted > #toggle-nav-sidebar {
left: 359px;
}
.admin-interface #main.shifted > #nav-sidebar {
left: 0px;
margin-left: 0;
}
.admin-interface #main:not(.shifted) > .content {
max-width: 100%;
}
.admin-interface.change-list:not(.popup) #main.shifted > #nav-sidebar + .content,
.admin-interface.change-form:not(.popup) #main.shifted > #nav-sidebar + .content {
max-width: calc(100% - 360px);
}
}
/* fixed related widget and select2 */
/* begin fix issue #10 - Related widget broken in long tabular inline */
.admin-interface .related-widget-wrapper {
white-space: nowrap;
}
/* end fix */
.admin-interface .related-widget-wrapper select + .related-widget-wrapper-link,
.admin-interface .related-widget-wrapper .select2-container + .related-widget-wrapper-link {
margin-left: 12px !important;
}
@media (min-width: 768px) {
.admin-interface.change-form select {
min-width: 150px;
}
}
@media (min-width: 1024px) {
.admin-interface.change-form select {
min-width: 200px;
}
}
.admin-interface.change-form .inline-related.tabular select {
min-width: auto !important;
}
/* fixed time widget header border radius */
.admin-interface .clockbox.module h2 {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
/* fix searchbar overriden padding */
.admin-interface #changelist #changelist-search #searchbar {
padding: 2px 5px 3px 5px;
}
@media (min-width: 1024px) {
.admin-interface #changelist #changelist-search #searchbar,
.admin-interface #changelist #changelist-search input[type="submit"],
.admin-interface #changelist #changelist-search .quiet {
margin-left: 8px;
}
.admin-interface #changelist #changelist-search label img {
vertical-align: text-top;
margin-right: 0px;
}
}
@media (max-width: 1024px) {
.admin-interface #changelist #toolbar {
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
}
/* fixed changelist search size when there are search results and .quiet is visible */
.admin-interface #changelist-search label img {
margin-top: 2px;
}
.admin-interface #changelist-search .quiet {
margin: 0 0 0 10px;
align-self: center;
flex-basis: content;
}
}
@media (max-width: 767px) {
/* fixed responsive widgets */
.admin-interface .aligned.collapsed .form-row {
display: none;
}
.admin-interface .aligned .form-row > div {
display: flex;
max-width: 100vw;
flex-direction: column;
align-items: flex-start;
}
.admin-interface .aligned .form-row .help {
margin-left: 0;
}
.admin-interface .aligned .form-row .checkbox-row label {
margin: 10px 0 0 0;
padding: 0;
}
.admin-interface .aligned .form-row input[type="file"],
.admin-interface .aligned .form-row input[type="text"],
.admin-interface .aligned .form-row input[type="email"] {
width: 100%;
}
/* fix textarea horizontal scroll on Firefox */
.admin-interface .aligned .form-row textarea {
width: 100% !important;
flex: 0 1 auto;
}
.admin-interface .aligned .form-row .datetime input[type="text"] {
width: 50%;
}
.admin-interface .aligned .form-row span + .file-upload {
margin-top: 10px;
}
.admin-interface .aligned .form-row .file-upload input[type="file"] {
margin-top: 5px;
}
}

View File

@@ -1,497 +0,0 @@
@media (prefers-color-scheme: dark) {
:root .admin-interface {
--primary: #79aec8;
--secondary: #417690;
--accent: #f5dd5d;
--primary-fg: #fff;
--body-fg: #333;
--body-bg: #fff;
--body-quiet-color: #666;
--body-loud-color: #000;
--header-color: #ffc;
--header-branding-color: var(--accent);
--header-bg: var(--secondary);
--header-link-color: var(--primary-fg);
--breadcrumbs-fg: #c4dce8;
--breadcrumbs-link-fg: var(--body-bg);
--breadcrumbs-bg: var(--primary);
--link-fg: #447e9b;
--link-hover-color: #036;
--link-selected-fg: #5b80b2;
--hairline-color: #e8e8e8;
--border-color: #ccc;
--error-fg: #ba2121;
--message-success-bg: #dfd;
--message-warning-bg: #ffc;
--message-error-bg: #ffefef;
--darkened-bg: #f8f8f8;
--selected-bg: #e4e4e4;
--selected-row: #ffc;
--button-fg: #fff;
--button-bg: var(--primary);
--button-hover-bg: #609ab6;
--default-button-bg: var(--secondary);
--default-button-hover-bg: #205067;
--close-button-bg: #888;
--close-button-hover-bg: #747474;
--delete-button-bg: #ba2121;
--delete-button-hover-bg: #a41515;
--object-tools-fg: var(--button-fg);
--object-tools-bg: var(--close-button-bg);
--object-tools-hover-bg: var(--close-button-hover-bg);
}
}
.admin-interface #header {
background: var(--admin-interface-header-background-color);
color: var(--admin-interface-header-text-color);
}
.admin-interface #header + #main {
border-top: var(--admin-interface-main-border-top);
}
.admin-interface .environment-label {
}
.admin-interface .environment-label::before {
content: "";
display: inline-block;
width: 8px;
height: 8px;
background-color: var(--admin-interface-env-color);
border-radius: 100%;
margin-right: 6px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.admin-interface .environment-label::after {
content: " - ";
}
@media (max-width: 1024px) {
.admin-interface .environment-label::after {
content: "";
}
}
.admin-interface .language-chooser {
display: inline-block;
position: absolute;
top: 15px;
right: 15px;
z-index: 10;
}
@media (min-width: 768px) {
.admin-interface .language-chooser {
right: 30px;
}
}
@media (min-width: 1024px) {
.admin-interface .language-chooser {
position: static;
float: right;
margin-left: 20px;
}
}
.admin-interface .language-chooser-hidden-form {
display: none;
}
.admin-interface .language-chooser-select-form {
display: inline-block;
}
.admin-interface #branding h1,
.admin-interface.login #header h1,
.admin-interface.login #header h1 a {
color: var(--admin-interface-title-color);
}
.admin-interface #branding h1 a {
color: inherit;
}
.admin-interface #branding h1 .logo.default {
background-color: transparent;
background-repeat: no-repeat;
background-position: center center;
background-size: 104px 36px;
background-image: var(--admin-interface-logo-default-background-image);
}
.admin-interface #branding h1 img.logo,
.admin-interface.login #header #branding h1 img.logo {
max-width: var(--admin-interface-logo-max-width);
max-height: var(--admin-interface-logo-max-height);
}
.admin-interface #header #user-tools a {
color: var(--admin-interface-header-link-color);
}
.admin-interface #header #user-tools a:hover,
.admin-interface #header #user-tools a:active {
color: var(--admin-interface-header-link-hover-color);
border-bottom-color: rgba(255, 255, 255, 0.5);
}
.admin-interface #nav-sidebar .current-app .section:link,
.admin-interface #nav-sidebar .current-app .section:visited {
color: var(--admin-interface-module-link-selected-color);
font-weight: normal;
}
.admin-interface #nav-sidebar .current-app .section:focus,
.admin-interface #nav-sidebar .current-app .section:hover {
color: var(--admin-interface-module-link-hover-color);
}
.admin-interface #nav-sidebar .current-model {
background: var(--admin-interface-module-background-selected-color);
}
.admin-interface #changelist table tbody tr.selected {
background-color: var(--admin-interface-module-background-selected-color);
}
.admin-interface .module h2,
.admin-interface .module caption,
.admin-interface .module.filtered h2 {
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface .module a.section:link,
.admin-interface .module a.section:visited {
color: var(--admin-interface-module-link-color);
}
.admin-interface .module a.section:active,
.admin-interface .module a.section:hover {
color: var(--admin-interface-module-link-hover-color);
}
.admin-interface div.breadcrumbs {
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface div.breadcrumbs a {
color: var(--admin-interface-module-link-color);
}
.admin-interface div.breadcrumbs a:active,
.admin-interface div.breadcrumbs a:focus,
.admin-interface div.breadcrumbs a:hover {
color: var(--admin-interface-module-link-hover-color);
}
.admin-interface fieldset.collapse a.collapse-toggle,
.admin-interface fieldset.collapse.collapsed a.collapse-toggle,
.admin-interface .inline-group .inline-related fieldset.module a.collapse-toggle,
.admin-interface .inline-group .inline-related fieldset.module.collapsed a.collapse-toggle {
color: var(--admin-interface-module-link-color);
}
.admin-interface fieldset.collapse a.collapse-toggle:hover,
.admin-interface fieldset.collapse a.collapse-toggle:active,
.admin-interface fieldset.collapse.collapsed a.collapse-toggle:hover,
.admin-interface fieldset.collapse.collapsed a.collapse-toggle:active,
.admin-interface .inline-group .inline-related fieldset.module a.collapse-toggle:hover,
.admin-interface .inline-group .inline-related fieldset.module a.collapse-toggle:active,
.admin-interface .inline-group .inline-related fieldset.module.collapsed a.collapse-toggle:hover,
.admin-interface .inline-group .inline-related fieldset.module.collapsed a.collapse-toggle:active {
color: var(--admin-interface-module-link-hover-color);
}
.admin-interface .inline-group h2 {
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface .selector .selector-chosen h2 {
border-color: var(--admin-interface-module-background-color);
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface .selector .selector-available h2,
.admin-interface .selector .selector-chosen h2 {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.admin-interface .selector a.selector-chooseall:focus,
.admin-interface .selector a.selector-chooseall:hover,
.admin-interface .selector a.selector-clearall:focus,
.admin-interface .selector a.selector-clearall:hover {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface a:link,
.admin-interface a:visited {
color: var(--admin-interface-generic-link-color);
}
.admin-interface a:hover {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface thead th a,
.admin-interface thead th a:link,
.admin-interface thead th a:visited,
.admin-interface thead th a:focus,
.admin-interface thead th a:hover {
color: #666666;
}
.admin-interface .button,
.admin-interface input[type=submit],
.admin-interface input[type=button],
.admin-interface .submit-row input,
.admin-interface a.button {
background: var(--admin-interface-save-button-background-color);
color: var(--admin-interface-save-button-text-color);
}
.admin-interface .button:active,
.admin-interface .button:focus,
.admin-interface .button:hover,
.admin-interface input[type=submit]:active,
.admin-interface input[type=submit]:focus,
.admin-interface input[type=submit]:hover,
.admin-interface input[type=button]:active,
.admin-interface input[type=button]:focus,
.admin-interface input[type=button]:hover {
background: var(--admin-interface-save-button-background-hover-color);
color: var(--admin-interface-save-button-text-color);
outline: none;
}
.admin-interface .button.default,
.admin-interface input[type=submit].default,
.admin-interface .submit-row input.default {
background: var(--admin-interface-save-button-background-color);
color: var(--admin-interface-save-button-text-color);
outline: none;
}
.admin-interface .button.default:active,
.admin-interface .button.default:focus,
.admin-interface .button.default:hover,
.admin-interface input[type=submit].default:active,
.admin-interface input[type=submit].default:focus,
.admin-interface input[type=submit].default:hover,
.admin-interface.delete-confirmation form .cancel-link:hover {
background: var(--admin-interface-save-button-background-hover-color);
color: var(--admin-interface-save-button-text-color);
outline: none;
}
.admin-interface .submit-row a.deletelink:link,
.admin-interface .submit-row a.deletelink:visited,
.admin-interface.delete-confirmation form input[type="submit"] {
background: var(--admin-interface-delete-button-background-color);
color: var(--admin-interface-delete-button-text-color);
}
.admin-interface .submit-row a.deletelink:hover,
.admin-interface.delete-confirmation form input[type="submit"]:hover {
background: var(--admin-interface-delete-button-background-hover-color);
color: var(--admin-interface-delete-button-text-color);
}
.admin-interface .paginator a,
.admin-interface .paginator a:link,
.admin-interface .paginator a:visited,
.admin-interface .paginator .this-page {
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface .paginator a,
.admin-interface .paginator a:link,
.admin-interface .paginator a:visited {
background-color: #FFFFFF;
color: var(--admin-interface-generic-link-color);
}
.admin-interface .paginator a:hover,
.admin-interface .paginator a:active {
background-color: #F8F8F8;
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .paginator .this-page {
background-color: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-link-color);
}
.admin-interface .paginator a.showall,
.admin-interface .paginator a.showall:link,
.admin-interface .paginator a.showall:visited {
color: var(--admin-interface-generic-link-color);
}
.admin-interface .paginator a.showall:hover,
.admin-interface .paginator a.showall:active {
color: var(--admin-interface-generic-link-hover-color);
}
/* list-filter sticky */
@media (min-width: 768px) {
.admin-interface.list-filter-sticky .module.filtered #changelist-filter {
position: sticky;
top: 30px;
float: right;
z-index: 30;
display: flex;
flex-direction: column;
overflow-y: auto;
scrollbar-width: thin;
height: 100%;
max-height: calc(100vh - 60px);
}
.admin-interface.list-filter-sticky.sticky-pagination .module.filtered #changelist-filter {
max-height: calc(100vh - 125px);
}
/* feature not available for django < 3.1.2 */
.admin-interface.list-filter-sticky .module.filtered #toolbar + #changelist-filter {
position: absolute;
top: 0px;
z-index: 30;
max-height: calc(100vh - 105px);
}
.admin-interface.list-filter-sticky.sticky-pagination .module.filtered #toolbar + #changelist-filter {
max-height: calc(100vh - 170px);
}
}
.admin-interface .module.filtered #changelist-filter {
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface .module.filtered #changelist-filter h3#changelist-filter-clear {
margin-bottom: 0;
}
.admin-interface .module.filtered #changelist-filter .changelist-filter-clear a {
font-size: 13px;
margin: .3em 0;
padding: 0 15px;
}
.admin-interface .module.filtered #changelist-filter .changelist-filter-clear a:focus,
.admin-interface .module.filtered #changelist-filter .changelist-filter-clear a:hover,
.admin-interface .module.filtered #changelist-filter #changelist-filter-clear a:focus,
.admin-interface .module.filtered #changelist-filter #changelist-filter-clear a:hover {
color: #666;
text-decoration: none;
}
.admin-interface .module.filtered #changelist-filter .changelist-filter-clear a span {
font-weight: bold;
}
.admin-interface .module.filtered #changelist-filter li a:focus,
.admin-interface .module.filtered #changelist-filter li a:hover {
color: #666;
text-decoration: none;
}
.admin-interface.list-filter-highlight .module.filtered #changelist-filter h3.active {
font-weight: bold;
}
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected {
color: var(--admin-interface-module-text-color);
background: var(--admin-interface-module-background-color);
margin-left: -10px;
padding-left: 5px;
margin-right: -10px;
border-left: 5px solid var(--admin-interface-module-background-color);
border-right: 5px solid var(--admin-interface-module-background-color);
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a,
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a:link,
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a:visited,
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a:focus,
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a:hover {
background: inherit;
color: inherit;
}
.admin-interface .module.filtered #changelist-filter li.selected a,
.admin-interface .module.filtered #changelist-filter li.selected a:link,
.admin-interface .module.filtered #changelist-filter li.selected a:visited,
.admin-interface .module.filtered #changelist-filter li.selected a:focus,
.admin-interface .module.filtered #changelist-filter li.selected a:hover {
color: var(--admin-interface-generic-link-hover-color);
}
/* begin fix issue #11 - Inline border bottom should not be rounded */
.admin-interface .module h2,
.admin-interface.dashboard .module caption,
.admin-interface #nav-sidebar .module th,
.admin-interface #nav-sidebar .module caption,
.admin-interface .module.filtered h2 {
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface .inline-group h2 {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.admin-interface .module.collapse.collapsed h2 {
/* fix collapsed inlines rounded bottom borders */
border-bottom-left-radius: var(--admin-interface-module-border-radius);
border-bottom-right-radius: var(--admin-interface-module-border-radius);
}
/* end fix */
.admin-interface #content-related {
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface .select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
background-color: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface #toggle-nav-sidebar {
border-top-right-radius: var(--admin-interface-module-border-radius);
border-bottom-right-radius: var(--admin-interface-module-border-radius);
color: var(--admin-interface-generic-link-color);
}
.admin-interface #toggle-nav-sidebar:focus,
.admin-interface #toggle-nav-sidebar:hover,
.admin-interface #toggle-nav-sidebar:active {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .calendar td.selected a,
.admin-interface .calendar td a:active,
.admin-interface .calendar td a:focus,
.admin-interface .calendar td a:hover,
.admin-interface .timelist a:active,
.admin-interface .timelist a:focus,
.admin-interface .timelist a:hover {
background: var(--admin-interface-module-background-color);
}
.admin-interface .calendarbox .calendarnav-previous,
.admin-interface .calendarbox .calendarnav-next {
transition: none;
filter: invert(100%);
}

View File

@@ -1,126 +0,0 @@
/*
ckeditor + light theme
https://github.com/Ikimea/ckeditor-light-theme
*/
.admin-interface .cke {
border: none;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.admin-interface .cke_inner,
.admin-interface .cke_wysiwyg_frame {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
}
.admin-interface .cke_inner {
border: 1px solid #CCCCCC;
}
.admin-interface .cke_chrome {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.admin-interface .cke_top {
background: #f8f8f8;
border-top: none;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom: 1px solid #EEEEEE;
padding-left: 10px;
padding-right: 10px;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.admin-interface .cke_toolgroup {
background: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.admin-interface .cke_bottom {
background: #f8f8f8;
border-top: 1px solid #EEEEEE;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.admin-interface .cke_source {
padding: 13px 15px;
box-sizing: border-box;
}
.admin-interface a.cke_button,
.admin-interface a.cke_button:active,
.admin-interface a.cke_button:hover,
.admin-interface a.cke_button:focus {
box-shadow: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
background-image: none;
border-radius: 4px;
border: none;
}
.admin-interface a.cke_button:active,
.admin-interface a.cke_button:hover,
.admin-interface a.cke_button:focus {
background-color: #E8E8E8 !important;
}
.admin-interface a.cke_button.cke_button_on {
background-color: #CCCCCC !important;
}
.admin-interface a.cke_button.cke_button_disabled {
background-color: transparent !important;
}
.admin-interface .cke_resizer {
border-color: transparent #666666 transparent transparent;
}
@media (max-width: 767px){
.admin-interface .django-ckeditor-widget,
.admin-interface .cke {
width: 100% !important;
}
.admin-interface .cke_top {
padding-left: 10px;
padding-right: 10px;
}
.admin-interface .cke_toolbar {
height: auto;
}
.admin-interface .cke_contents {
height: auto;
}
.admin-interface .tabular .django-ckeditor-widget,
.admin-interface .tabular .cke {
width: 400px !important;
}
.admin-interface .tabular .cke_contents {
height: 90px !important;
}
}

View File

@@ -1,95 +0,0 @@
/* sticky pagination */
.admin-interface.sticky-pagination.change-list #content-main {
padding-bottom: 4.375rem;
}
.admin-interface.sticky-pagination.change-list .paginator {
width: 100%;
position: fixed;
bottom: 0;
right: 0;
z-index: 40;
box-sizing: border-box;
padding-left: 15px;
padding-right: 15px;
white-space: nowrap;
text-overflow: ellipsis;
border-radius: 0;
border-top: 1px solid #EEEEEE !important;
border-bottom: none;
margin: 0;
}
.admin-interface.sticky-pagination.change-list.popup .paginator {
padding-left: 20px;
padding-right: 20px;
}
@media (min-width:768px) {
.admin-interface.sticky-pagination.change-list:not(.popup) .paginator {
padding-left: 30px;
padding-right: 30px;
}
}
@media (min-width:1024px) {
.admin-interface.sticky-pagination.change-list:not(.popup) .paginator {
padding-left: 40px;
padding-right: 40px;
}
}
@media (min-width:1280px) {
.admin-interface.sticky-pagination.change-list:not(.popup) #main.shifted > #nav-sidebar + .content .paginator {
width: calc(100% - 360px);
}
}
/* sticky submit */
@media (min-width:768px) {
.admin-interface.sticky-submit.change-form #content-main {
padding-bottom: 4.375rem;
}
.admin-interface.sticky-submit.change-form .submit-row:last-of-type {
width: 100%;
position: fixed;
bottom: 0;
right: 0;
z-index: 40;
box-sizing: border-box;
padding-left: 15px;
padding-right: 15px;
white-space: nowrap;
text-overflow: ellipsis;
border-radius: 0;
border-top: 1px solid #EEEEEE;
border-bottom: none !important;
margin: 0;
}
.admin-interface.sticky-submit.change-form.popup .submit-row:last-of-type {
padding-left: 20px;
padding-right: 20px;
}
.admin-interface.sticky-submit.change-form:not(.popup) .submit-row:last-of-type {
padding-left: 30px;
padding-right: 30px;
}
}
@media (min-width:1024px) {
.admin-interface.sticky-submit.change-form:not(.popup) .submit-row:last-of-type {
padding-left: 40px;
padding-right: 40px;
}
}
@media (min-width:1280px) {
.admin-interface.sticky-submit.change-form:not(.popup) #main.shifted > #nav-sidebar + .content .submit-row:last-of-type {
width: calc(100% - 359px);
}
}

View File

@@ -1,7 +0,0 @@
/* Fix left/right scrolling broken with django-import-export #165 */
.admin-interface table.import-preview {
display: block;
width: 100%;
max-width: 100%;
overflow: auto;
}

View File

@@ -1,247 +0,0 @@
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/base/jquery.ui.core.css
*/
/*
backward compatibility:
.ui-tabs-selected: jquery ui < 1.10
.ui-tabs-active classes jquery ui >= 1.10
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
display: none;
}
.ui-helper-hidden-accessible {
position: absolute;
left: -99999999px;
}
.ui-helper-reset {
margin: 0;
padding: 0;
border: 0;
outline: 0;
line-height: 1.3;
text-decoration: none;
font-size: 100%;
list-style: none;
}
.ui-helper-clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.ui-helper-clearfix {
display: inline-block;
}
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix {
height: 1%;
}
.ui-helper-clearfix {
display: block;
}
.ui-helper-zfix {
width: 100%;
height: 100%;
top: 0;
left: 0;
position: absolute;
opacity: 0;
filter: Alpha(Opacity=0);
}
.ui-state-disabled {
cursor: default !important;
}
.ui-icon {
display: block;
text-indent: -99999px;
overflow: hidden;
background-repeat: no-repeat;
}
/* http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/base/jquery.ui.tabs.css */
.ui-widget-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.ui-tabs {
position: relative;
padding: .2em;
zoom: 1;
}
/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav {
margin: 0;
padding: .2em .2em 0;
}
.ui-tabs .ui-tabs-nav li {
list-style: none;
float: left;
position: relative;
top: 1px;
margin: 0 .2em 1px 0;
border-bottom: 0 !important;
padding: 0;
white-space: nowrap;
}
.ui-tabs .ui-tabs-nav li a {
float: left;
padding: .5em 1em;
text-decoration: none;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active, .ui-tabs .ui-tabs-nav li.ui-tabs-selected {
margin-bottom: 0;
padding-bottom: 1px;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a {
cursor: text;
}
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a {
cursor: pointer;
}
/* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel {
display: block;
border-width: 0;
padding: 1em 1.4em;
background: none;
}
.ui-tabs .ui-tabs-hide {
position: absolute;
display: none;
}
/* Custom tabs theme */
.admin-interface .ui-tabs {
padding: 0;
}
.admin-interface .ui-tabs,
.admin-interface .ui-tabs .ui-widget-header,
.admin-interface .ui-tabs .ui-widget-header .ui-state-default {
border: none;
background: transparent;
}
.admin-interface .ui-tabs .ui-tabs-nav {
padding: 10px 0 0 10px;
border-bottom: none;
}
.admin-interface .ui-tabs .ui-tabs-nav li {
margin: 0 0 0 -1px;
}
.admin-interface .ui-tabs .ui-tabs-nav li.required {
font-weight: bold;
}
.admin-interface .ui-tabs .ui-tabs-nav li a {
border: 1px solid #eeeeee;
background-color: #f8f8f8;
border-bottom: none;
color: #666666;
padding: 7px 14px 8px 14px;
margin-top: 1px;
-moz-border-radius-topright: 4px;
-webkit-border-top-right-radius: 4px;
-moz-border-radius-topleft: 4px;
-webkit-border-top-left-radius: 4px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
font-size: 12px;
text-transform: uppercase;
outline: none;
}
.admin-interface .ui-tabs .ui-tabs-nav li.ui-tabs-active a,
.admin-interface .ui-tabs .ui-tabs-nav li.ui-tabs-selected a {
padding: 8px 14px 8px 14px;
margin-top: 0px;
margin-bottom: -1px;
font-weight: bold;
background-color: #FFFFFF;
color: var(--admin-interface-module-background-color);
border-bottom: 1px solid #FFFFFF;
}
.admin-interface .ui-tabs .ui-tabs-panel {
border: 1px solid #eeeeee;
border-radius: 4px;
padding: 10px;
margin-bottom: 30px;
overflow: hidden;
}
.admin-interface .inline-group .tabular .ui-tabs .ui-tabs-panel {
padding: 8px;
}
.admin-interface .inline-group .tabular .ui-tabs .ui-tabs-nav {
padding-left: 4px;
}
.admin-interface .inline-group .tabular tr td {
vertical-align: top;
}
.admin-interface .inline-group .tabular tr.has_original td.original,
.admin-interface .inline-group .tabular tr td.delete {
vertical-align: top;
}
.admin-interface .inline-group .tabular .datetime > input {
margin-right: 5px;
}
.admin-interface .inline-group .tabular .datetime br {
display: none;
}
.admin-interface #changelist .row1:not(.selected):hover,
.admin-interface #changelist .row2:not(.selected):hover {
background: #f9f9f9;
}
.admin-interface .row2 {
background: #fcfcfc;
}
.admin-interface .row2 .ui-tabs .ui-tabs-nav li a {
background-color: #f5f5f5;
border: 1px solid #ebebeb;
}
.admin-interface .row2 .ui-tabs .ui-tabs-nav li.ui-tabs-active a,
.admin-interface .row2 .ui-tabs .ui-tabs-nav li.ui-tabs-selected a {
background-color: #fcfcfc;
border-bottom: 1px solid #fcfcfc;
}

View File

@@ -1,27 +0,0 @@
/*
django-json-widget support
https://github.com/jmrivas86/django-json-widget
*/
.admin-interface div.jsoneditor {
border: 1px solid var(--admin-interface-module-background-color);
border-radius: var(--admin-interface-jsoneditor-border-radius);
overflow: var(--admin-interface-jsoneditor-overflow);
}
.admin-interface div.jsoneditor-menu {
background-color: var(--admin-interface-module-background-color);
border-bottom: 1px solid var(--admin-interface-module-background-color);
}
.admin-interface div.jsoneditor-menu a.jsoneditor-poweredBy {
color: var(--admin-interface-module-link-color);
}
.admin-interface div.jsoneditor-contextmenu ul li button.jsoneditor-selected,
.admin-interface div.jsoneditor-contextmenu ul li button.jsoneditor-selected:focus,
.admin-interface div.jsoneditor-contextmenu ul li button.jsoneditor-selected:hover {
background-color: var(--admin-interface-module-background-selected-color);
color: #000000;
font-weight: bold;
}

View File

@@ -1,72 +0,0 @@
.admin-interface .language-chooser {
display: inline-block;
position: absolute;
top: 15px;
right: 15px;
z-index: 10;
}
@media (min-width: 768px) {
.admin-interface .language-chooser {
right: 30px;
}
}
@media (min-width: 1024px) {
.admin-interface .language-chooser {
position: static;
margin-left: 20px;
}
}
.admin-interface .language-chooser .language-chooser-hidden-form {
display: none;
}
.admin-interface .language-chooser .language-chooser-select-form {
display: inline-block;
position: relative;
z-index: 0;
}
.admin-interface .language-chooser select {
width: auto;
min-width: auto;
}
.admin-interface .language-chooser.minimal .language-chooser-select-form::after {
content: "";
position: absolute;
right: 2px;
top: 50%;
border: solid var(--admin-interface-header-text-color);
border-width: 0px 0px 1px 1px;
display: inline-block;
padding: 2px;
transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
pointer-events: none;
margin-top: -4px;
}
.admin-interface .language-chooser.minimal .language-chooser-select-form:hover select {
border-bottom: 1px solid transparent;
color: var(--admin-interface-header-link-hover-color);
}
.admin-interface .language-chooser.minimal select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-color: transparent;
border: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.25);
border-radius: 0;
color: var(--admin-interface-header-link-color);
cursor: pointer;
font-weight: inherit;
font-size: inherit;
height: auto;
margin: 0;
padding: 0 15px 0 0;
}

View File

@@ -1,27 +0,0 @@
/*
list-filter-dropdown
*/
.admin-interface #changelist-filter .list-filter-dropdown {
margin-top: 15px;
margin-bottom: 15px;
}
.admin-interface #changelist-filter h2 + .list-filter-dropdown,
.admin-interface #changelist-filter .list-filter-dropdown + .list-filter-dropdown {
margin-top: 5px;
}
.admin-interface #changelist-filter .list-filter-dropdown h3 {
margin-top: 0 !important;
}
.admin-interface #changelist-filter .list-filter-dropdown select {
background-color: #FFFFFF;
width: calc(100% - 30px);
margin-right: 15px;
}
.admin-interface.list-filter-highlight #changelist-filter .list-filter-dropdown h3.active + div select {
font-weight: bold;
}

View File

@@ -1,17 +0,0 @@
/*
django-modeltranslation support
https://github.com/deschler/django-modeltranslation
*/
.admin-interface #content h1 select {
text-transform: uppercase;
margin-left: 15px;
min-width: 50px;
}
.admin-interface .ui-tabs .ui-tabs-panel[id^=tab_id_] {
border: none;
border-top: 1px solid #eeeeee;
padding: 0;
margin-bottom: 0;
}

View File

@@ -1,25 +0,0 @@
.admin-interface #changelist-filter .admindatefilter {
border-bottom: 1px solid var(--hairline-color);
}
.admin-interface #changelist-filter .admindatefilter .button,
.admin-interface #changelist-filter .admindatefilter .submit-row input,
.admin-interface #changelist-filter .admindatefilter a.button,
.admin-interface #changelist-filter .admindatefilter input[type="submit"],
.admin-interface #changelist-filter .admindatefilter input[type="button"],
.admin-interface #changelist-filter .admindatefilter input[type="reset"] {
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-link-color);
padding: 6px 10px;
font-size: 12px;
margin-right: 4px;
}
.admin-interface #changelist-filter .admindatefilter .button:hover,
.admin-interface #changelist-filter .admindatefilter .submit-row input:hover,
.admin-interface #changelist-filter .admindatefilter a.button:hover,
.admin-interface #changelist-filter .admindatefilter input[type="submit"]:hover,
.admin-interface #changelist-filter .admindatefilter input[type="button"]:hover,
.admin-interface #changelist-filter .admindatefilter input[type="reset"]:hover {
color: var(--admin-interface-module-link-hover-color);
}

View File

@@ -1,10 +0,0 @@
.admin-interface.dashboard #content {
width: auto;
max-width: 600px;
margin-right: 0;
margin-left: 0;
}
.admin-interface.dashboard #content #recent-actions-module {
display: none;
}

View File

@@ -1,82 +0,0 @@
/*
related modal + magnific popup customization
https://github.com/dimsemenov/Magnific-Popup
*/
.admin-interface .related-modal.mfp-bg {
background-color: var(--admin-interface-related-modal-background-color);
opacity: var(--admin-interface-related-modal-background-opacity);
}
.admin-interface .related-modal .mfp-content {
height: 100%;
-webkit-box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.2);
box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.2);
}
.admin-interface .related-modal .mfp-container {
padding: 80px 80px 80px 80px;
}
.admin-interface .related-modal__nested .mfp-container {
padding: 40px 80px 40px 80px;
}
@media (max-width: 640px) {
.admin-interface .related-modal .mfp-container {
padding: 80px 20px 80px 20px;
}
.admin-interface .related-modal__nested .mfp-container {
padding: 40px 40px 40px 40px;
}
}
@media (max-height: 640px) {
.admin-interface .related-modal .mfp-container {
padding-top: 20px;
padding-bottom: 20px;
}
.admin-interface .related-modal__nested .mfp-container {
padding: 40px 40px 40px 40px;
}
}
.admin-interface .related-modal .related-modal-iframe-container {
display: block;
width: 100%;
height: 100%;
position: relative;
z-index: 100;
overflow: hidden;
border-radius: var(--admin-interface-related-modal-border-radius);
}
.admin-interface .related-modal #related-modal-iframe {
width: 100%;
height: 100%;
background-color: #FFFFFF;
background-repeat: no-repeat;
background-position: center center;
background-size: 30px 30px;
background-image: url("data:image/svg+xml;utf8,<?xml version='1.0' encoding='utf-8'?><svg width='30px' height='30px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='xMidYMid' class='uil-ring-alt'><rect x='0' y='0' width='100' height='100' fill='none' class='bk'></rect><circle cx='50' cy='50' r='40' stroke='%23eeeeee' fill='none' stroke-width='6' stroke-linecap='round'></circle><circle cx='50' cy='50' r='40' stroke='%23aaaaaa' fill='none' stroke-width='6' stroke-linecap='round'><animate attributeName='stroke-dashoffset' dur='2s' repeatCount='indefinite' from='0' to='500'></animate><animate attributeName='stroke-dasharray' dur='2s' repeatCount='indefinite' values='150 100;1 250;150 100'></animate></circle></svg>");
border: none;
margin: 0 auto;
padding: 0;
display: block;
}
.admin-interface .related-modal .mfp-close {
width: 40px;
height: 40px;
opacity: 1.0;
color: rgba(0, 0, 0, 0.4);
display: var(--admin-interface-related-modal-close-button-display);
}
.admin-interface .related-modal .mfp-close:hover,
.admin-interface .related-modal .mfp-close:active {
color: rgba(0, 0, 0, 0.6);
top: 0;
}

View File

@@ -1,34 +0,0 @@
[dir="rtl"] .admin-interface,
[dir="rtl"] .admin-interface * {
font-family: 'Vazir', sans-serif !important;
}
[dir="rtl"] .admin-interface .main .toggle-nav-sidebar.sticky {
left: auto !important;
right: 0px !important;
margin-right: 0px !important;
margin-left: 10px;
border: 1px solid #eaeaea !important;
border-right: none !important;
border-top-right-radius: 0px !important;
border-bottom-right-radius: 0px !important;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
box-shadow: -4px 2px 8px -2px #DBDBDB !important;
}
[dir="rtl"] .admin-interface #main.shifted > #toggle-nav-sidebar {
right: 359px !important;
}
[dir="rtl"] .admin-interface #main > #nav-sidebar {
margin-right: -360px !important;
margin-left: 0px !important;
right: -320px !important;
}
[dir="rtl"] .admin-interface #main.shifted > #nav-sidebar {
border-left: 1px solid #eaeaea;
margin-right: 0px !important;
padding: 40px 0px 40px 40px !important;
}

View File

@@ -1,67 +0,0 @@
/*
sorl-thumbnail - improved AdminImageMixin widget layout
https://github.com/mariocesar/sorl-thumbnail
*/
.admin-interface a.thumbnail + a {
font-weight: normal;
}
.admin-interface a.thumbnail + a + input[type="checkbox"] {
margin: 10px 0px 10px 18px;
}
@media (max-width: 767px){
.admin-interface a.thumbnail + a {
display: block;
margin-top: 3px;
white-space: pre-wrap;
word-break: break-word;
}
.admin-interface a.thumbnail + a + input[type="checkbox"] {
margin: 15px 0;
}
}
.admin-interface a.thumbnail ~ label {
color: #333;
font-size: 11px;
display: inline;
float: none;
margin-left: 2px;
}
.admin-interface.change-form div[style="float:left"] {
font-size: 11px;
font-weight: bold;
color: #666;
margin-bottom: 5px;
}
@media (max-width: 767px){
.admin-interface.change-form div[style="float:left"] {
font-size: 12px;
width: 100%;
}
}
.admin-interface .aligned .form-row a.thumbnail ~ input[type="file"] {
margin-top: 0px;
}
@media (max-width:767px){
.admin-interface .aligned .form-row a.thumbnail ~ input[type="file"] {
width: auto;
padding: 0px;
display: block;
margin-top: 3px;
}
.admin-interface div[style="float:left"] {
margin-bottom: 0px;
}
.admin-interface div[style="float:left"] + div.help {
margin-top: 0px !important;
}
}

View File

@@ -1,200 +0,0 @@
/*
django-streamfield support
https://github.com/raagin/django-streamfield/
*/
.admin-interface .form-row.field-stream {
margin: 0;
padding: 0;
border-bottom: none;
}
.admin-interface .form-row.field-stream label[for=id_stream] {
display: none;
}
.admin-interface .streamfield_app {
clear: both;
width: 100%;
}
.admin-interface .streamfield_app .stream-help-text {
margin-bottom: 15px;
display: flex;
flex-direction: column;
clear: both;
}
.admin-interface .streamfield_app .stream-help-text .stream-help-text__title {
align-self: flex-end;
user-select: none;
padding: 8px;
padding-right: 0;
color: var(--admin-interface-generic-link-color);
}
.admin-interface .streamfield_app .stream-help-text .stream-help-text__title:hover {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .streamfield_app .stream-help-text .stream-help-text__content {
background: var(--admin-interface-module-background-selected-color);
border-radius: var(--admin-interface-module-border-radius);
border: 1px solid rgba(0,0,0,0.1);
padding: 15px;
}
.admin-interface .streamfield_app .stream-help-text .stream-help-text__content > ul {
margin: 0;
padding: 0;
}
.admin-interface .streamfield_app .collapse-handler {
user-select: none;
padding: 8px;
padding-right: 0;
margin: 0 0 5px 0;
color: var(--admin-interface-generic-link-color);
text-decoration: none;
}
.admin-interface .streamfield_app .collapse-handler:hover {
color: var(--admin-interface-generic-link-hover-color);
text-decoration: none;
}
.admin-interface .streamfield_app .stream-model-block {
position: relative;
box-shadow: none;
border: 1px solid rgba(0,0,0,0.1);
border-radius: var(--admin-interface-module-border-radius);
overflow: hidden;
}
.admin-interface .streamfield_app .stream-model-block,
.admin-interface .streamfield_app .streamfield-models.collapsed .stream-model-block {
margin-bottom: 10px;
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin: 0;
padding: 10px 10px 10px 20px;
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title span {
font-size: 18px;
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title .streamblock__block-handle {
position: static;
right: 0;
top: 0;
color: var(--admin-interface-generic-link-color);
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title .streamblock__block-handle:hover {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title .streamblock__block-handle {
display: flex;
justify-content: center;
align-items: center;
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title .streamblock__block-handle .block-move,
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title .streamblock__block-handle .block-delete {
display: flex;
justify-content: center;
align-items: center;
width: 40px;
height: 40px;
font-weight: normal;
background: none;
flex-shrink: 0;
color: inherit;
font-size: 16px;
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title .streamblock__block-handle .block-move {
cursor: move; /* fallback if grab cursor is unsupported */
cursor: grab;
cursor: -moz-grab;
cursor: -webkit-grab;
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title .streamblock__block-handle .block-move:before {
content: "↕";
display: block;
}
.admin-interface .streamfield_app .stream-model-block .streamblock__block__title .streamblock__block-handle .block-delete:before {
content: "×";
display: block;
font-size: 18px;
}
.admin-interface .streamfield_app .block-fields > div {
margin-bottom: 15px;
}
.admin-interface .streamfield_app .stream-model-block .stream-model-block__content {
background-color: #f8f8f8;
padding: 20px;
}
.admin-interface .streamfield_app .stream-model-block .stream-model-block__content.no-subblocks.abstract-block {
display: none;
}
.admin-interface .streamfield_app .stream-insert-new-block {
margin-bottom: 20px;
}
.admin-interface .streamfield_app .stream-insert-new-block .add-new-block-button {
color: var(--admin-interface-generic-link-color);
text-decoration: none;
}
.admin-interface .streamfield_app .stream-insert-new-block .add-new-block-button:hover {
color: var(--admin-interface-generic-link-hover-color);
text-decoration: none;
}
.admin-interface .streamfield_app .stream-insert-new-block ul {
display: block;
width: 100%;
margin: 10px 0 0 0;
padding: 0;
user-select: none;
}
.admin-interface .streamfield_app .stream-insert-new-block ul li {
display: inline-block;
font-size: 12px;
margin: 0;
padding: 0;
}
.admin-interface .streamfield_app .stream-btn {
font-weight: normal;
text-decoration: none;
background-color: var(--admin-interface-generic-link-color);
padding: 6px 12px;
border-radius: 4px;
}
.admin-interface .streamfield_app .stream-btn:hover {
text-decoration: none;
background-color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .streamfield_app .stream-insert-new-block ul li .stream-btn {
margin-top: 5px;
margin-left: 5px;
}

View File

@@ -1,37 +0,0 @@
/*
django-tabbed-admin support
https://github.com/omji/django-tabbed-admin
*/
/* Hide tabs until ready */
/*
.admin-interface #tabs ul {
display: none;
}
.admin-interface #tabs ul.ui-tabs-nav {
display: block;
}
*/
.admin-interface .ui-tabs .ui-tabs-panel[id^=tabs] .module.aligned:last-child {
margin-bottom: 0;
}
.admin-interface .ui-tabs .ui-tabs-panel[id^=tabs] .module.aligned:last-child .form-row:last-child {
border-bottom: none;
}
@media (max-width: 350px){
.admin-interface .ui-tabs .ui-tabs-panel[id^=tabs] .vTextField,
.admin-interface .inline-related .vTextField {
width: 17em;
}
}
@media (max-width: 767px){
/* fix horizontal overflow - responsive.css:563 */
.admin-interface .ui-tabs .ui-tabs-panel[id^=tabs] .aligned .form-row > div:not([class]) {
width: 100% !important;
}
}

View File

@@ -1,67 +0,0 @@
.admin-interface .tabbed-changeform-tabs {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
overflow-y: hidden;
scrollbar-width: thin;
padding-bottom: 15px;
}
@-moz-document url-prefix() {
.admin-interface .tabbed-changeform-tabs {
padding-bottom: 13px;
}
}
.admin-interface .tabbed-changeform-tabs .tabbed-changeform-tablink {
appearance: none;
-webkit-appearance: none;
border: 1px solid transparent;
border-bottom: 1px solid var(--border-color);
border-radius: var(--admin-interface-module-border-radius);
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
flex-shrink: 0;
flex-grow: 0;
cursor: pointer;
padding: 10px 15px;
margin: 0;
background-color: var(--admin-interface-module-header-text-color);
color: var(--admin-interface-generic-link-color);
font-size: 13px;
font-weight: bold;
outline: none !important;
}
.admin-interface .tabbed-changeform-tabs .tabbed-changeform-tablink + .tabbed-changeform-tablink {
margin-left: -1px;
}
.admin-interface .tabbed-changeform-tabs .tabbed-changeform-tablink:hover {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .tabbed-changeform-tabs .tabbed-changeform-tablink:focus {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .tabbed-changeform-tabs .tabbed-changeform-tablink.active {
border: 1px solid var(--border-color);
border-bottom: 1px solid transparent;
color: var(--admin-interface-generic-link-active-color);
}
.admin-interface .tabbed-changeform-tabs-remaining-space {
flex: 1;
border-bottom: 1px solid var(--border-color);
}
.admin-interface .tabbed-changeform-tabcontent {
display: none;
padding: 1em 0;
}
.admin-interface .tabbed-changeform-tabcontent.active {
display: block;
}

View File

@@ -1,3 +0,0 @@
.admin-interface textarea.tinymce ~ p.help {
margin-top:5px !important;
}

View File

@@ -1,913 +0,0 @@
/**
* @license MIT or GPL-2.0
* @fileOverview Favico animations
* @author Miroslav Magda, http://blog.ejci.net
* @source: https://github.com/ejci/favico.js
* @version 0.3.10
*/
/**
* Create new favico instance
* @param {Object} Options
* @return {Object} Favico object
* @example
* var favico = new Favico({
* bgColor : '#d00',
* textColor : '#fff',
* fontFamily : 'sans-serif',
* fontStyle : 'bold',
* type : 'circle',
* position : 'down',
* animation : 'slide',
* elementId: false,
* element: null,
* dataUrl: function(url){},
* win: window
* });
*/
(function () {
var Favico = (function (opt) {
'use strict';
opt = (opt) ? opt : {};
var _def = {
bgColor: '#d00',
textColor: '#fff',
fontFamily: 'sans-serif', //Arial,Verdana,Times New Roman,serif,sans-serif,...
fontStyle: 'bold', //normal,italic,oblique,bold,bolder,lighter,100,200,300,400,500,600,700,800,900
type: 'circle',
position: 'down', // down, up, left, leftup (upleft)
animation: 'slide',
elementId: false,
element: null,
dataUrl: false,
win: window
};
var _opt, _orig, _h, _w, _canvas, _context, _img, _ready, _lastBadge, _running, _readyCb, _stop, _browser, _animTimeout, _drawTimeout, _doc;
_browser = {};
_browser.ff = typeof InstallTrigger != 'undefined';
_browser.chrome = !!window.chrome;
_browser.opera = !!window.opera || navigator.userAgent.indexOf('Opera') >= 0;
_browser.ie = /*@cc_on!@*/false;
_browser.safari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
_browser.supported = (_browser.chrome || _browser.ff || _browser.opera);
var _queue = [];
_readyCb = function () {
};
_ready = _stop = false;
/**
* Initialize favico
*/
var init = function () {
//merge initial options
_opt = merge(_def, opt);
_opt.bgColor = hexToRgb(_opt.bgColor);
_opt.textColor = hexToRgb(_opt.textColor);
_opt.position = _opt.position.toLowerCase();
_opt.animation = (animation.types['' + _opt.animation]) ? _opt.animation : _def.animation;
_doc = _opt.win.document;
var isUp = _opt.position.indexOf('up') > -1;
var isLeft = _opt.position.indexOf('left') > -1;
//transform the animations
if (isUp || isLeft) {
for (var a in animation.types) {
for (var i = 0; i < animation.types[a].length; i++) {
var step = animation.types[a][i];
if (isUp) {
if (step.y < 0.6) {
step.y = step.y - 0.4;
} else {
step.y = step.y - 2 * step.y + (1 - step.w);
}
}
if (isLeft) {
if (step.x < 0.6) {
step.x = step.x - 0.4;
} else {
step.x = step.x - 2 * step.x + (1 - step.h);
}
}
animation.types[a][i] = step;
}
}
}
_opt.type = (type['' + _opt.type]) ? _opt.type : _def.type;
_orig = link. getIcons();
//create temp canvas
_canvas = document.createElement('canvas');
//create temp image
_img = document.createElement('img');
var lastIcon = _orig[_orig.length - 1];
if (lastIcon.hasAttribute('href')) {
_img.setAttribute('crossOrigin', 'anonymous');
//get width/height
_img.onload = function () {
_h = (_img.height > 0) ? _img.height : 32;
_w = (_img.width > 0) ? _img.width : 32;
_canvas.height = _h;
_canvas.width = _w;
_context = _canvas.getContext('2d');
icon.ready();
};
_img.setAttribute('src', lastIcon.getAttribute('href'));
} else {
_h = 32;
_w = 32;
_img.height = _h;
_img.width = _w;
_canvas.height = _h;
_canvas.width = _w;
_context = _canvas.getContext('2d');
icon.ready();
}
};
/**
* Icon namespace
*/
var icon = {};
/**
* Icon is ready (reset icon) and start animation (if ther is any)
*/
icon.ready = function () {
_ready = true;
icon.reset();
_readyCb();
};
/**
* Reset icon to default state
*/
icon.reset = function () {
//reset
if (!_ready) {
return;
}
_queue = [];
_lastBadge = false;
_running = false;
_context.clearRect(0, 0, _w, _h);
_context.drawImage(_img, 0, 0, _w, _h);
//_stop=true;
link.setIcon(_canvas);
//webcam('stop');
//video('stop');
window.clearTimeout(_animTimeout);
window.clearTimeout(_drawTimeout);
};
/**
* Start animation
*/
icon.start = function () {
if (!_ready || _running) {
return;
}
var finished = function () {
_lastBadge = _queue[0];
_running = false;
if (_queue.length > 0) {
_queue.shift();
icon.start();
} else {
}
};
if (_queue.length > 0) {
_running = true;
var run = function () {
// apply options for this animation
['type', 'animation', 'bgColor', 'textColor', 'fontFamily', 'fontStyle'].forEach(function (a) {
if (a in _queue[0].options) {
_opt[a] = _queue[0].options[a];
}
});
animation.run(_queue[0].options, function () {
finished();
}, false);
};
if (_lastBadge) {
animation.run(_lastBadge.options, function () {
run();
}, true);
} else {
run();
}
}
};
/**
* Badge types
*/
var type = {};
var options = function (opt) {
opt.n = ((typeof opt.n) === 'number') ? Math.abs(opt.n | 0) : opt.n;
opt.x = _w * opt.x;
opt.y = _h * opt.y;
opt.w = _w * opt.w;
opt.h = _h * opt.h;
opt.len = ("" + opt.n).length;
return opt;
};
/**
* Generate circle
* @param {Object} opt Badge options
*/
type.circle = function (opt) {
opt = options(opt);
var more = false;
if (opt.len === 2) {
opt.x = opt.x - opt.w * 0.4;
opt.w = opt.w * 1.4;
more = true;
} else if (opt.len >= 3) {
opt.x = opt.x - opt.w * 0.65;
opt.w = opt.w * 1.65;
more = true;
}
// begin patch
// draw a smaller badge without text
opt.w = 14;
opt.h = 14;
opt.x = (_w - opt.w);
opt.y = (_h - opt.h);
// end patch
_context.clearRect(0, 0, _w, _h);
_context.drawImage(_img, 0, 0, _w, _h);
_context.beginPath();
_context.font = _opt.fontStyle + " " + Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + "px " + _opt.fontFamily;
_context.textAlign = 'center';
if (more) {
_context.moveTo(opt.x + opt.w / 2, opt.y);
_context.lineTo(opt.x + opt.w - opt.h / 2, opt.y);
_context.quadraticCurveTo(opt.x + opt.w, opt.y, opt.x + opt.w, opt.y + opt.h / 2);
_context.lineTo(opt.x + opt.w, opt.y + opt.h - opt.h / 2);
_context.quadraticCurveTo(opt.x + opt.w, opt.y + opt.h, opt.x + opt.w - opt.h / 2, opt.y + opt.h);
_context.lineTo(opt.x + opt.h / 2, opt.y + opt.h);
_context.quadraticCurveTo(opt.x, opt.y + opt.h, opt.x, opt.y + opt.h - opt.h / 2);
_context.lineTo(opt.x, opt.y + opt.h / 2);
_context.quadraticCurveTo(opt.x, opt.y, opt.x + opt.h / 2, opt.y);
} else {
_context.arc(opt.x + opt.w / 2, opt.y + opt.h / 2, opt.h / 2, 0, 2 * Math.PI);
}
_context.fillStyle = 'rgba(' + _opt.bgColor.r + ',' + _opt.bgColor.g + ',' + _opt.bgColor.b + ',' + opt.o + ')';
_context.fill();
_context.closePath();
_context.beginPath();
_context.stroke();
_context.fillStyle = 'rgba(' + _opt.textColor.r + ',' + _opt.textColor.g + ',' + _opt.textColor.b + ',' + opt.o + ')';
//_context.fillText((more) ? '9+' : opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
if ((typeof opt.n) === 'number' && opt.n > 999) {
_context.fillText(((opt.n > 9999) ? 9 : Math.floor(opt.n / 1000)) + 'k+', Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2));
} else {
_context.fillText(opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
}
_context.closePath();
};
/**
* Generate rectangle
* @param {Object} opt Badge options
*/
type.rectangle = function (opt) {
opt = options(opt);
var more = false;
if (opt.len === 2) {
opt.x = opt.x - opt.w * 0.4;
opt.w = opt.w * 1.4;
more = true;
} else if (opt.len >= 3) {
opt.x = opt.x - opt.w * 0.65;
opt.w = opt.w * 1.65;
more = true;
}
_context.clearRect(0, 0, _w, _h);
_context.drawImage(_img, 0, 0, _w, _h);
_context.beginPath();
_context.font = _opt.fontStyle + " " + Math.floor(opt.h * (opt.n > 99 ? 0.9 : 1)) + "px " + _opt.fontFamily;
_context.textAlign = 'center';
_context.fillStyle = 'rgba(' + _opt.bgColor.r + ',' + _opt.bgColor.g + ',' + _opt.bgColor.b + ',' + opt.o + ')';
_context.fillRect(opt.x, opt.y, opt.w, opt.h);
_context.fillStyle = 'rgba(' + _opt.textColor.r + ',' + _opt.textColor.g + ',' + _opt.textColor.b + ',' + opt.o + ')';
//_context.fillText((more) ? '9+' : opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
if ((typeof opt.n) === 'number' && opt.n > 999) {
_context.fillText(((opt.n > 9999) ? 9 : Math.floor(opt.n / 1000)) + 'k+', Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2));
} else {
_context.fillText(opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
}
_context.closePath();
};
/**
* Set badge
*/
var badge = function (number, opts) {
opts = ((typeof opts) === 'string' ? {
animation: opts
} : opts) || {};
_readyCb = function () {
try {
if (typeof (number) === 'number' ? (number > 0) : (number !== '')) {
var q = {
type: 'badge',
options: {
n: number
}
};
if ('animation' in opts && animation.types['' + opts.animation]) {
q.options.animation = '' + opts.animation;
}
if ('type' in opts && type['' + opts.type]) {
q.options.type = '' + opts.type;
}
['bgColor', 'textColor'].forEach(function (o) {
if (o in opts) {
q.options[o] = hexToRgb(opts[o]);
}
});
['fontStyle', 'fontFamily'].forEach(function (o) {
if (o in opts) {
q.options[o] = opts[o];
}
});
_queue.push(q);
if (_queue.length > 100) {
throw new Error('Too many badges requests in queue.');
}
icon.start();
} else {
icon.reset();
}
} catch (e) {
throw new Error('Error setting badge. Message: ' + e.message);
}
};
if (_ready) {
_readyCb();
}
};
/**
* Set image as icon
*/
var image = function (imageElement) {
_readyCb = function () {
try {
var w = imageElement.width;
var h = imageElement.height;
var newImg = document.createElement('img');
var ratio = (w / _w < h / _h) ? (w / _w) : (h / _h);
newImg.setAttribute('crossOrigin', 'anonymous');
newImg.onload=function(){
_context.clearRect(0, 0, _w, _h);
_context.drawImage(newImg, 0, 0, _w, _h);
link.setIcon(_canvas);
};
newImg.setAttribute('src', imageElement.getAttribute('src'));
newImg.height = (h / ratio);
newImg.width = (w / ratio);
} catch (e) {
throw new Error('Error setting image. Message: ' + e.message);
}
};
if (_ready) {
_readyCb();
}
};
/**
* Set the icon from a source url. Won't work with badges.
*/
var rawImageSrc = function (url) {
_readyCb = function() {
link.setIconSrc(url);
};
if (_ready) {
_readyCb();
}
};
/**
* Set video as icon
*/
var video = function (videoElement) {
_readyCb = function () {
try {
if (videoElement === 'stop') {
_stop = true;
icon.reset();
_stop = false;
return;
}
//var w = videoElement.width;
//var h = videoElement.height;
//var ratio = (w / _w < h / _h) ? (w / _w) : (h / _h);
videoElement.addEventListener('play', function () {
drawVideo(this);
}, false);
} catch (e) {
throw new Error('Error setting video. Message: ' + e.message);
}
};
if (_ready) {
_readyCb();
}
};
/**
* Set video as icon
*/
var webcam = function (action) {
//UR
if (!window.URL || !window.URL.createObjectURL) {
window.URL = window.URL || {};
window.URL.createObjectURL = function (obj) {
return obj;
};
}
if (_browser.supported) {
var newVideo = false;
navigator.getUserMedia = navigator.getUserMedia || navigator.oGetUserMedia || navigator.msGetUserMedia || navigator.mozGetUserMedia || navigator.webkitGetUserMedia;
_readyCb = function () {
try {
if (action === 'stop') {
_stop = true;
icon.reset();
_stop = false;
return;
}
newVideo = document.createElement('video');
newVideo.width = _w;
newVideo.height = _h;
navigator.getUserMedia({
video: true,
audio: false
}, function (stream) {
newVideo.src = URL.createObjectURL(stream);
newVideo.play();
drawVideo(newVideo);
}, function () {
});
} catch (e) {
throw new Error('Error setting webcam. Message: ' + e.message);
}
};
if (_ready) {
_readyCb();
}
}
};
var setOpt = function (key, value) {
var opts = key;
if (!(value == null && Object.prototype.toString.call(key) == '[object Object]')) {
opts = {};
opts[key] = value;
}
var keys = Object.keys(opts);
for (var i = 0; i < keys.length; i++) {
if (keys[i] == 'bgColor' || keys[i] == 'textColor') {
_opt[keys[i]] = hexToRgb(opts[keys[i]]);
} else {
_opt[keys[i]] = opts[keys[i]];
}
}
_queue.push(_lastBadge);
icon.start();
};
/**
* Draw video to context and repeat :)
*/
function drawVideo(video) {
if (video.paused || video.ended || _stop) {
return false;
}
//nasty hack for FF webcam (Thanks to Julian Ćwirko, kontakt@redsunmedia.pl)
try {
_context.clearRect(0, 0, _w, _h);
_context.drawImage(video, 0, 0, _w, _h);
} catch (e) {
}
_drawTimeout = setTimeout(function () {
drawVideo(video);
}, animation.duration);
link.setIcon(_canvas);
}
var link = {};
/**
* Get icons from HEAD tag or create a new <link> element
*/
link.getIcons = function () {
var elms = [];
//get link element
var getLinks = function () {
var icons = [];
var links = _doc.getElementsByTagName('head')[0].getElementsByTagName('link');
for (var i = 0; i < links.length; i++) {
if ((/(^|\s)icon(\s|$)/i).test(links[i].getAttribute('rel'))) {
icons.push(links[i]);
}
}
return icons;
};
if (_opt.element) {
elms = [_opt.element];
} else if (_opt.elementId) {
//if img element identified by elementId
elms = [_doc.getElementById(_opt.elementId)];
elms[0].setAttribute('href', elms[0].getAttribute('src'));
} else {
//if link element
elms = getLinks();
if (elms.length === 0) {
elms = [_doc.createElement('link')];
elms[0].setAttribute('rel', 'icon');
_doc.getElementsByTagName('head')[0].appendChild(elms[0]);
}
}
elms.forEach(function(item) {
item.setAttribute('type', 'image/png');
});
return elms;
};
link.setIcon = function (canvas) {
var url = canvas.toDataURL('image/png');
link.setIconSrc(url);
};
link.setIconSrc = function (url) {
if (_opt.dataUrl) {
//if using custom exporter
_opt.dataUrl(url);
}
if (_opt.element) {
_opt.element.setAttribute('href', url);
_opt.element.setAttribute('src', url);
} else if (_opt.elementId) {
//if is attached to element (image)
var elm = _doc.getElementById(_opt.elementId);
elm.setAttribute('href', url);
elm.setAttribute('src', url);
} else {
//if is attached to fav icon
if (_browser.ff || _browser.opera) {
//for FF we need to "recreate" element, atach to dom and remove old <link>
//var originalType = _orig.getAttribute('rel');
var old = _orig[_orig.length - 1];
var newIcon = _doc.createElement('link');
_orig = [newIcon];
//_orig.setAttribute('rel', originalType);
if (_browser.opera) {
newIcon.setAttribute('rel', 'icon');
}
newIcon.setAttribute('rel', 'icon');
newIcon.setAttribute('type', 'image/png');
_doc.getElementsByTagName('head')[0].appendChild(newIcon);
newIcon.setAttribute('href', url);
if (old.parentNode) {
old.parentNode.removeChild(old);
}
} else {
_orig.forEach(function(icon) {
icon.setAttribute('href', url);
});
}
}
};
//http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-5624139
//HEX to RGB convertor
function hexToRgb(hex) {
var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
hex = hex.replace(shorthandRegex, function (m, r, g, b) {
return r + r + g + g + b + b;
});
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : false;
}
/**
* Merge options
*/
function merge(def, opt) {
var mergedOpt = {};
var attrname;
for (attrname in def) {
mergedOpt[attrname] = def[attrname];
}
for (attrname in opt) {
mergedOpt[attrname] = opt[attrname];
}
return mergedOpt;
}
/**
* Cross-browser page visibility shim
* http://stackoverflow.com/questions/12536562/detect-whether-a-window-is-visible
*/
function isPageHidden() {
return _doc.hidden || _doc.msHidden || _doc.webkitHidden || _doc.mozHidden;
}
/**
* @namespace animation
*/
var animation = {};
/**
* Animation "frame" duration
*/
animation.duration = 40;
/**
* Animation types (none,fade,pop,slide)
*/
animation.types = {};
animation.types.fade = [{
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.0
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.1
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.2
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.3
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.4
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.5
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.6
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.7
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.8
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 0.9
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 1.0
}];
animation.types.none = [{
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 1
}];
animation.types.pop = [{
x: 1,
y: 1,
w: 0,
h: 0,
o: 1
}, {
x: 0.9,
y: 0.9,
w: 0.1,
h: 0.1,
o: 1
}, {
x: 0.8,
y: 0.8,
w: 0.2,
h: 0.2,
o: 1
}, {
x: 0.7,
y: 0.7,
w: 0.3,
h: 0.3,
o: 1
}, {
x: 0.6,
y: 0.6,
w: 0.4,
h: 0.4,
o: 1
}, {
x: 0.5,
y: 0.5,
w: 0.5,
h: 0.5,
o: 1
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 1
}];
animation.types.popFade = [{
x: 0.75,
y: 0.75,
w: 0,
h: 0,
o: 0
}, {
x: 0.65,
y: 0.65,
w: 0.1,
h: 0.1,
o: 0.2
}, {
x: 0.6,
y: 0.6,
w: 0.2,
h: 0.2,
o: 0.4
}, {
x: 0.55,
y: 0.55,
w: 0.3,
h: 0.3,
o: 0.6
}, {
x: 0.50,
y: 0.50,
w: 0.4,
h: 0.4,
o: 0.8
}, {
x: 0.45,
y: 0.45,
w: 0.5,
h: 0.5,
o: 0.9
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 1
}];
animation.types.slide = [{
x: 0.4,
y: 1,
w: 0.6,
h: 0.6,
o: 1
}, {
x: 0.4,
y: 0.9,
w: 0.6,
h: 0.6,
o: 1
}, {
x: 0.4,
y: 0.9,
w: 0.6,
h: 0.6,
o: 1
}, {
x: 0.4,
y: 0.8,
w: 0.6,
h: 0.6,
o: 1
}, {
x: 0.4,
y: 0.7,
w: 0.6,
h: 0.6,
o: 1
}, {
x: 0.4,
y: 0.6,
w: 0.6,
h: 0.6,
o: 1
}, {
x: 0.4,
y: 0.5,
w: 0.6,
h: 0.6,
o: 1
}, {
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
o: 1
}];
/**
* Run animation
* @param {Object} opt Animation options
* @param {Object} cb Callabak after all steps are done
* @param {Object} revert Reverse order? true|false
* @param {Object} step Optional step number (frame bumber)
*/
animation.run = function (opt, cb, revert, step) {
var animationType = animation.types[isPageHidden() ? 'none' : _opt.animation];
if (revert === true) {
step = (typeof step !== 'undefined') ? step : animationType.length - 1;
} else {
step = (typeof step !== 'undefined') ? step : 0;
}
cb = (cb) ? cb : function () {
};
if ((step < animationType.length) && (step >= 0)) {
type[_opt.type](merge(opt, animationType[step]));
_animTimeout = setTimeout(function () {
if (revert) {
step = step - 1;
} else {
step = step + 1;
}
animation.run(opt, cb, revert, step);
}, animation.duration);
link.setIcon(_canvas);
} else {
cb();
return;
}
};
//auto init
init();
return {
badge: badge,
video: video,
image: image,
rawImageSrc: rawImageSrc,
webcam: webcam,
setOpt: setOpt,
reset: icon.reset,
browser: {
supported: _browser.supported
}
};
});
// AMD / RequireJS
if (typeof define !== 'undefined' && define.amd) {
define([], function () {
return Favico;
});
}
// CommonJS
else if (typeof module !== 'undefined' && module.exports) {
module.exports = Favico;
}
// included directly via <script> tag
else {
this.Favico = Favico;
}
})();

File diff suppressed because one or more lines are too long

View File

@@ -1,70 +0,0 @@
.admin-interface.foldable-apps [class^="app-"].module {
visibility: hidden;
}
.admin-interface.foldable-apps [class^="app-"].module.foldable-apps-ready {
visibility: visible;
}
.admin-interface.foldable-apps [class^="app-"].module > table > caption {
position: relative;
z-index: 0;
/* pointer-events: none; */
cursor: pointer;
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently supported by Chrome and Opera */
}
.admin-interface.foldable-apps [class^="app-"].module > table > caption > a {
display: inline-block;
/* pointer-events: all !important; */
margin-right: 30px;
}
.admin-interface.foldable-apps [class^="app-"].module > table > caption::after {
position: absolute;
top: 0;
right: 0;
z-index: 10;
width: auto;
height: 100%;
content: "";
font-size: 16px;
font-weight: lighter;
text-align: center;
padding-left: 10px;
padding-right: 10px;
cursor: pointer;
pointer-events: all !important;
display: flex;
flex-direction: column;
justify-content: center;
}
@media (min-width: 1024px) {
.admin-interface.foldable-apps [class^="app-"].module > table > caption::after {
padding-left: 15px;
padding-right: 15px;
}
}
.admin-interface.foldable-apps [class^="app-"].module > table {
display: table;
width: 100%;
}
.admin-interface.foldable-apps [class^="app-"].module.collapsed {
margin-bottom: 10px;
}
.admin-interface.foldable-apps [class^="app-"].module.collapsed > table > caption::after {
content: "+";
}
.admin-interface.foldable-apps [class^="app-"].module.collapsed > table > tbody {
display: none;
}

View File

@@ -1,35 +0,0 @@
(function() {
window.onload = function() {
for (let moduleEl of document.querySelectorAll('.admin-interface.foldable-apps [class^="app-"].module')) {
// apply collapsed value from localstorage value
let moduleAppClass = null;
let moduleCollapsedClass = 'collapsed';
moduleEl.classList.forEach(function(className) {
if (className.startsWith('app-')) {
moduleAppClass = className;
}
});
if (moduleAppClass) {
let moduleAppKey = 'admin-interface.foldable-apps_' + moduleAppClass + '_collapsed';
let moduleCollapsed = Boolean(parseInt((localStorage.getItem(moduleAppKey) || 0)) || 0);
if (moduleCollapsed === true) {
moduleEl.classList.add(moduleCollapsedClass);
} else {
moduleEl.classList.remove(moduleCollapsedClass);
}
// attach click for togggle collapsed class
for (let captionEl of moduleEl.querySelectorAll('caption')) {
captionEl.onclick = function(event) {
// only when not clicking on the app name link
if (event.target.tagName.toLowerCase() === 'caption') {
moduleEl.classList.toggle(moduleCollapsedClass);
moduleCollapsed = moduleEl.classList.contains(moduleCollapsedClass);
localStorage.setItem(moduleAppKey, (moduleCollapsed ? 1 : 0));
}
};
}
}
moduleEl.classList.add('foldable-apps-ready');
}
};
})();

View File

@@ -1,351 +0,0 @@
/* Magnific Popup CSS */
.mfp-bg {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1042;
overflow: hidden;
position: fixed;
background: #0b0b0b;
opacity: 0.8; }
.mfp-wrap {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1043;
position: fixed;
outline: none !important;
-webkit-backface-visibility: hidden; }
.mfp-container {
text-align: center;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
padding: 0 8px;
box-sizing: border-box; }
.mfp-container:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle; }
.mfp-align-top .mfp-container:before {
display: none; }
.mfp-content {
position: relative;
display: inline-block;
vertical-align: middle;
margin: 0 auto;
text-align: left;
z-index: 1045; }
.mfp-inline-holder .mfp-content,
.mfp-ajax-holder .mfp-content {
width: 100%;
cursor: auto; }
.mfp-ajax-cur {
cursor: progress; }
.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
cursor: -moz-zoom-out;
cursor: -webkit-zoom-out;
cursor: zoom-out; }
.mfp-zoom {
cursor: pointer;
cursor: -webkit-zoom-in;
cursor: -moz-zoom-in;
cursor: zoom-in; }
.mfp-auto-cursor .mfp-content {
cursor: auto; }
.mfp-close,
.mfp-arrow,
.mfp-preloader,
.mfp-counter {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none; }
.mfp-loading.mfp-figure {
display: none; }
.mfp-hide {
display: none !important; }
.mfp-preloader {
color: #CCC;
position: absolute;
top: 50%;
width: auto;
text-align: center;
margin-top: -0.8em;
left: 8px;
right: 8px;
z-index: 1044; }
.mfp-preloader a {
color: #CCC; }
.mfp-preloader a:hover {
color: #FFF; }
.mfp-s-ready .mfp-preloader {
display: none; }
.mfp-s-error .mfp-content {
display: none; }
button.mfp-close,
button.mfp-arrow {
overflow: visible;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
display: block;
outline: none;
padding: 0;
z-index: 1046;
box-shadow: none;
touch-action: manipulation; }
button::-moz-focus-inner {
padding: 0;
border: 0; }
.mfp-close {
width: 44px;
height: 44px;
line-height: 44px;
position: absolute;
right: 0;
top: 0;
text-decoration: none;
text-align: center;
opacity: 0.65;
padding: 0 0 18px 10px;
color: #FFF;
font-style: normal;
font-size: 28px;
font-family: Arial, Baskerville, monospace; }
.mfp-close:hover,
.mfp-close:focus {
opacity: 1; }
.mfp-close:active {
top: 1px; }
.mfp-close-btn-in .mfp-close {
color: #333; }
.mfp-image-holder .mfp-close,
.mfp-iframe-holder .mfp-close {
color: #FFF;
right: -6px;
text-align: right;
padding-right: 6px;
width: 100%; }
.mfp-counter {
position: absolute;
top: 0;
right: 0;
color: #CCC;
font-size: 12px;
line-height: 18px;
white-space: nowrap; }
.mfp-arrow {
position: absolute;
opacity: 0.65;
margin: 0;
top: 50%;
margin-top: -55px;
padding: 0;
width: 90px;
height: 110px;
-webkit-tap-highlight-color: transparent; }
.mfp-arrow:active {
margin-top: -54px; }
.mfp-arrow:hover,
.mfp-arrow:focus {
opacity: 1; }
.mfp-arrow:before,
.mfp-arrow:after {
content: '';
display: block;
width: 0;
height: 0;
position: absolute;
left: 0;
top: 0;
margin-top: 35px;
margin-left: 35px;
border: medium inset transparent; }
.mfp-arrow:after {
border-top-width: 13px;
border-bottom-width: 13px;
top: 8px; }
.mfp-arrow:before {
border-top-width: 21px;
border-bottom-width: 21px;
opacity: 0.7; }
.mfp-arrow-left {
left: 0; }
.mfp-arrow-left:after {
border-right: 17px solid #FFF;
margin-left: 31px; }
.mfp-arrow-left:before {
margin-left: 25px;
border-right: 27px solid #3F3F3F; }
.mfp-arrow-right {
right: 0; }
.mfp-arrow-right:after {
border-left: 17px solid #FFF;
margin-left: 39px; }
.mfp-arrow-right:before {
border-left: 27px solid #3F3F3F; }
.mfp-iframe-holder {
padding-top: 40px;
padding-bottom: 40px; }
.mfp-iframe-holder .mfp-content {
line-height: 0;
width: 100%;
max-width: 900px; }
.mfp-iframe-holder .mfp-close {
top: -40px; }
.mfp-iframe-scaler {
width: 100%;
height: 0;
overflow: hidden;
padding-top: 56.25%; }
.mfp-iframe-scaler iframe {
position: absolute;
display: block;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
background: #000; }
/* Main image in popup */
img.mfp-img {
width: auto;
max-width: 100%;
height: auto;
display: block;
line-height: 0;
box-sizing: border-box;
padding: 40px 0 40px;
margin: 0 auto; }
/* The shadow behind the image */
.mfp-figure {
line-height: 0; }
.mfp-figure:after {
content: '';
position: absolute;
left: 0;
top: 40px;
bottom: 40px;
display: block;
right: 0;
width: auto;
height: auto;
z-index: -1;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
background: #444; }
.mfp-figure small {
color: #BDBDBD;
display: block;
font-size: 12px;
line-height: 14px; }
.mfp-figure figure {
margin: 0; }
.mfp-bottom-bar {
margin-top: -36px;
position: absolute;
top: 100%;
left: 0;
width: 100%;
cursor: auto; }
.mfp-title {
text-align: left;
line-height: 18px;
color: #F3F3F3;
word-wrap: break-word;
padding-right: 36px; }
.mfp-image-holder .mfp-content {
max-width: 100%; }
.mfp-gallery .mfp-image-holder .mfp-figure {
cursor: pointer; }
@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
/**
* Remove all paddings around the image on small screen
*/
.mfp-img-mobile .mfp-image-holder {
padding-left: 0;
padding-right: 0; }
.mfp-img-mobile img.mfp-img {
padding: 0; }
.mfp-img-mobile .mfp-figure:after {
top: 0;
bottom: 0; }
.mfp-img-mobile .mfp-figure small {
display: inline;
margin-left: 5px; }
.mfp-img-mobile .mfp-bottom-bar {
background: rgba(0, 0, 0, 0.6);
bottom: 0;
margin: 0;
top: auto;
padding: 3px 5px;
position: fixed;
box-sizing: border-box; }
.mfp-img-mobile .mfp-bottom-bar:empty {
padding: 0; }
.mfp-img-mobile .mfp-counter {
right: 5px;
top: 3px; }
.mfp-img-mobile .mfp-close {
top: 0;
right: 0;
width: 35px;
height: 35px;
line-height: 35px;
background: rgba(0, 0, 0, 0.6);
position: fixed;
text-align: center;
padding: 0; } }
@media all and (max-width: 900px) {
.mfp-arrow {
-webkit-transform: scale(0.75);
transform: scale(0.75); }
.mfp-arrow-left {
-webkit-transform-origin: 0;
transform-origin: 0; }
.mfp-arrow-right {
-webkit-transform-origin: 100%;
transform-origin: 100%; }
.mfp-container {
padding-left: 6px;
padding-right: 6px; } }

View File

@@ -1,165 +0,0 @@
/** global: django */
if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
{
(function($) {
$(document).ready(function(){
function dismissModal()
{
$.magnificPopup.close();
}
// create the function that will close the modal
function dismissRelatedObjectModal()
{
dismissModal();
}
function dismissRelatedLookupModal(win, chosenId)
{
var windowRef = win;
var windowName = windowRef.name;
var widgetName = windowName.replace(/^(change|add|delete|lookup)_/, '');
var widgetEl = $('#' + widgetName);
var widgetVal = widgetEl.val();
if (widgetEl.hasClass('vManyToManyRawIdAdminField') && Boolean(widgetVal)) {
widgetEl.val(widgetVal + ', ' + chosenId);
} else {
widgetEl.val(chosenId);
}
dismissModal();
}
// assign functions to global variables
window.dismissRelatedObjectModal = dismissRelatedObjectModal;
window.dismissRelatedLookupPopup = dismissRelatedLookupModal;
function presentRelatedObjectModal(e)
{
var linkEl = $(this);
var href = (linkEl.attr('href') || '');
if (href === '') {
return;
}
// open the popup as modal
e.preventDefault();
e.stopImmediatePropagation();
// remove focus from clicked link
linkEl.blur();
// use the clicked link id as iframe name
// it will be available as window.name in the loaded iframe
var iframeName = linkEl.attr('id');
var iframeSrc = href;
if (e.data.lookup !== true)
{
// browsers stop loading nested iframes having the same src url
// create a random parameter and append it to the src url to prevent it
// this workaround doesn't work with related lookup url
var iframeSrcRandom = String(Math.round(Math.random() * 999999));
if (iframeSrc.indexOf('?') === -1) {
iframeSrc += '?_modal=' + iframeSrcRandom;
} else {
iframeSrc += '&_modal=' + iframeSrcRandom;
}
}
// fix for django 1.7 TODO remove
if (iframeSrc.indexOf('_popup=1') === -1) {
if (iframeSrc.indexOf('?') === -1) {
iframeSrc += '?_popup=1';
} else {
iframeSrc += '&_popup=1';
}
}
// build the iframe html
var iframeHTML = '<iframe id="related-modal-iframe" name="' + iframeName + '" src="' + iframeSrc + '"></iframe>';
var modalHTML = '<div class="related-modal-iframe-container">' + iframeHTML + '</div>';
var modalEl = $(modalHTML);
var iframeEl = modalEl.find('#related-modal-iframe');
if (e.data.lookup === true)
{
// set current window as iframe opener because
// the callback is called on the opener window
iframeEl.on('load', function() {
var iframeObj = $(this).get(0);
var iframeWindow = iframeObj.contentWindow;
iframeWindow.opener = window;
});
}
// the modal css class
var iframeInternalModalClass = 'related-modal';
// if the current window is inside an iframe, it means that it is already in a modal,
// append an additional css class to the modal to offer more customization
if (window.top !== window.self) {
iframeInternalModalClass += ' related-modal__nested';
}
// open the popup using magnific popup
$.magnificPopup.open({
mainClass: iframeInternalModalClass,
fixedContentPos: false,
showCloseBtn: true,
closeBtnInside: true,
items: {
src: modalEl,
type: 'inline'
}
});
return false;
}
// listen click events on related links
function presentRelatedObjectModalOnClickOn(selector, lookup) {
var data = {
lookup:(lookup === true ? true : false)
};
// remove potential existing click event listener
var el = $(selector);
el.removeAttr('onclick');
el.unbind('click');
el.click(data, presentRelatedObjectModal);
// listen the event on document for handling it on elements will be added to the DOM later
$(document).on('click', selector, data, presentRelatedObjectModal);
}
// assign functions to global variables
window.presentRelatedObjectModal = presentRelatedObjectModal;
window.presentRelatedObjectModalOnClickOn = presentRelatedObjectModalOnClickOn;
presentRelatedObjectModalOnClickOn('a.related-widget-wrapper-link');
// raw_id_fields support
presentRelatedObjectModalOnClickOn('a.related-lookup', true);
// django-dynamic-raw-id support - #61
// https://github.com/lincolnloop/django-dynamic-raw-id
presentRelatedObjectModalOnClickOn('a.dynamic_raw_id-related-lookup', true);
// django-streamfield support
// https://github.com/raagin/django-streamfield/
presentRelatedObjectModalOnClickOn('.streamfield_app a.stream-btn[href*="_popup=1"]');
// Vanilla js for catching the click during capture phase for anticipating Vue.js listener.
document.addEventListener('click', function(event) {
// console.log('click intercepted before Vue.');
if (event.target.matches('.streamfield_app a.stream-btn[href*="_popup=1"]')) {
event.stopImmediatePropagation();
event.preventDefault();
$(event.target).trigger('click');
}
}, { capture: true });
});
})(django.jQuery);
}

View File

@@ -1,73 +0,0 @@
(function (AdminInterface) {
var scope = AdminInterface;
scope.tabbedChangeForm = {
openTab: function (event, tabName) {
this.openTabByName(tabName);
},
openTabByName: function(tabName) {
let tablinkEl = document.getElementById("tablink-" + tabName);
let tabcontentEl = document.getElementById("tabcontent-" + tabName);
if (!tablinkEl || !tabcontentEl) {
return false;
}
let tablinks = document.getElementsByClassName("tabbed-changeform-tablink");
let tabcontents = document.getElementsByClassName("tabbed-changeform-tabcontent");
// toggle tab link
for (let tablink of tablinks) {
tablink.classList.remove("active");
}
tablinkEl.classList.add("active");
// toggle tab content
for (let tabcontent of tabcontents) {
tabcontent.classList.remove("active");
}
tabcontentEl.classList.add("active");
// update location hash
let history = window.history;
if (history) {
history.replaceState(undefined, undefined, "#" + tabName);
}
return true;
},
openTabByLocationHash: function() {
let hash = window.location.hash;
if (hash && hash !== "#") {
let tabName = hash.substring(1);
if (this.openTabByName(tabName)) {
this.scrollTabsToTabByName(tabName);
}
}
},
scrollTabsToTabByName: function(tabName) {
let tabsEl = document.getElementById("tabbed-changeform-tabs");
let tablinkEl = document.getElementById("tablink-" + tabName);
if (!tabsEl || !tablinkEl) {
return;
}
let tablinkLeft = (tablinkEl.offsetLeft - tabsEl.offsetLeft);
let tabsScrollLeft = Math.ceil(tablinkLeft);
tabsEl.scrollTo({
top: 0,
left: tabsScrollLeft,
behavior: "instant"
});
}
};
// scope.tabbedChangeForm.openTabByLocationHash();
document.addEventListener('DOMContentLoaded', function() {
scope.tabbedChangeForm.openTabByLocationHash();
}, false);
}(window.AdminInterface = window.AdminInterface || {}));

View File

@@ -1,21 +0,0 @@
The MIT License (MIT)
Copyright (c) 2014 Ikimea
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.

View File

@@ -1,2 +0,0 @@
ckeditor-light-theme
====================

View File

@@ -1,13 +0,0 @@
{
"name": "ckeditor-light-theme",
"version": "0.0.0",
"homepage": "https://github.com/Ikimea/ckeditor-light-theme",
"authors": [
"Mbechezi Mlanawo <mlanawo.mbechezi@ikimea.com>"
],
"keywords": [
"ckeditor",
"theme"
],
"license": "MIT"
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 953 B

View File

@@ -1,322 +0,0 @@
/**
* @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or http://ckeditor.com/license
*/
/*
skin.js
=========
In this file we interact with the CKEditor JavaScript API to register the skin
and enable additional skin related features.
The level of complexity of this file depends on the features available in the
skin. There is only one mandatory line of code to be included here, which is
setting CKEDITOR.skin.name. All the rest is optional, but recommended to be
implemented as they make higher quality skins.
For this skin, the following tasks are achieved in this file:
1. Register the skin.
2. Register browser specific skin files.
3. Define the "Chameleon" feature.
4. Register the skin icons, to have them used on the development version of
the skin.
*/
// 1. Register the skin
// ----------------------
// The CKEDITOR.skin.name property must be set to the skin name. This is a
// lower-cased name, which must match the skin folder name as well as the value
// used on config.skin to tell the editor to use the skin.
//
// This is the only mandatory property to be defined in this file.
CKEDITOR.skin.name = 'husky';
// 2. Register browser specific skin files
// -----------------------------------------
// (http://docs.cksource.com/CKEditor_4.x/Skin_SDK/Browser_Hacks)
//
// To help implementing browser specific "hacks" to the skin files and have it
// easy to maintain, it is possible to have dedicated files for such browsers,
// for both the main skin CSS files: editor.css and dialog.css.
//
// The browser files must be named after the main file names, appended by an
// underscore and the browser name (e.g. editor_ie.css, dialog_ie8.css).
//
// The accepted browser names must match the CKEDITOR.env properties. The most
// common names are: ie, opera, webkit and gecko. Check the documentation for
// the complete list:
// http://docs.ckeditor.com/#!/api/CKEDITOR.env
//
// Internet explorer is an exception and the browser version is also accepted
// (ie7, ie8, ie9, ie10), as well as a special name for IE in Quirks mode (iequirks).
//
// The available browser specific files must be set separately for editor.css
// and dialog.css.
CKEDITOR.skin.ua_editor = 'ie,iequirks,ie7,ie8,gecko';
CKEDITOR.skin.ua_dialog = 'ie,iequirks,ie7,ie8,opera';
// 3. Define the "Chameleon" feature
// -----------------------------------
// (http://docs.cksource.com/CKEditor_4.x/Skin_SDK/Chameleon)
//
// "Chameleon" is a unique feature available in CKEditor. It makes it possible
// to end users to specify which color to use as the basis for the editor UI.
// It is enough to set config.uiColor to any color value and voila, the UI is
// colored.
//
// The only detail here is that the skin itself must be compatible with the
// Chameleon feature. That's because the skin CSS files are the responsible to
// apply colors in the UI and each skin do that in different way and on
// different places.
//
// Implementing the Chameleon feature requires a bit of JavaScript programming.
// The CKEDITOR.skin.chameleon function must be defined. It must return the CSS
// "template" to be used to change the color of a specific CKEditor instance
// available in the page. When a color change is required, this template is
// appended to the page holding the editor, overriding styles defined in the
// skin files.
//
// The "$color" placeholder can be used in the returned string. It'll be
// replaced with the desired color.
CKEDITOR.skin.chameleon = (function() {
// This method can be used to adjust colour brightness of various element.
// Colours are accepted in 7-byte hex format, for example: #00ff00.
// Brightness ratio must be a float number within [-1, 1],
// where -1 is black, 1 is white and 0 is the original colour.
var colorBrightness = (function() {
function channelBrightness(channel, ratio) {
return ( '0' + ( ratio < 0 ?
0 | channel * ( 1 + ratio )
:
0 | channel + ( 255 - channel ) * ratio ).toString(16)
).slice(-2);
}
return function(hexColor, ratio) {
var channels = hexColor.match(/[^#]./g);
for (var i = 0; i < 3; i++)
channels[ i ] = channelBrightness(parseInt(channels[ i ], 16), ratio);
return '#' + channels.join('');
};
})(),
// Use this function just to avoid having to repeat all these rules on
// several places of our template.
verticalGradient = (function() {
var template = new CKEDITOR.template('background:#{to};' +
'background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));' +
'background-image:-moz-linear-gradient(top,{from},{to});' +
'background-image:-webkit-linear-gradient(top,{from},{to});' +
'background-image:-o-linear-gradient(top,{from},{to});' +
'background-image:-ms-linear-gradient(top,{from},{to});' +
'background-image:linear-gradient(top,{from},{to});' +
'filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr=\'{from}\',endColorstr=\'{to}\');');
return function(from, to) {
return template.output({ from: from, to: to });
};
})(),
// Style templates for various user interface parts:
// * Default editor template.
// * Default panel template.
templates = {
editor: new CKEDITOR.template(
'{id}.cke_chrome [border-color:{defaultBorder};] ' +
'{id} .cke_top [ ' +
'{defaultGradient}' +
'border-bottom-color:{defaultBorder};' +
'] ' +
'{id} .cke_bottom [' +
'{defaultGradient}' +
'border-top-color:{defaultBorder};' +
'] ' +
'{id} .cke_resizer [border-right-color:{ckeResizer}] ' +
// Dialogs.
'{id} .cke_dialog_title [' +
'{defaultGradient}' +
'border-bottom-color:{defaultBorder};' +
'] ' +
'{id} .cke_dialog_footer [' +
'{defaultGradient}' +
'outline-color:{defaultBorder};' +
'border-top-color:{defaultBorder};' + // IE7 doesn't use outline.
'] ' +
'{id} .cke_dialog_tab [' +
'{lightGradient}' +
'border-color:{defaultBorder};' +
'] ' +
'{id} .cke_dialog_tab:hover [' +
'{mediumGradient}' +
'] ' +
'{id} .cke_dialog_contents [' +
'border-top-color:{defaultBorder};' +
'] ' +
'{id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [' +
'background:{dialogTabSelected};' +
'border-bottom-color:{dialogTabSelectedBorder};' +
'] ' +
'{id} .cke_dialog_body [' +
'background:{dialogBody};' +
'border-color:{defaultBorder};' +
'] ' +
// Toolbars, buttons.
'{id} .cke_toolgroup [' +
'{lightGradient}' +
'border-color:{defaultBorder};' +
'] ' +
'{id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [' +
'{mediumGradient}' +
'] ' +
'{id} .cke_button_on [' +
'{ckeButtonOn}' +
'] ' +
'{id} .cke_toolbar_separator [' +
'background-color: {ckeToolbarSeparator};' +
'] ' +
// Combo buttons.
'{id} .cke_combo_button [' +
'border-color:{defaultBorder};' +
'{lightGradient}' +
'] ' +
'{id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [' +
'border-color:{defaultBorder};' +
'{mediumGradient}' +
'] ' +
// Elementspath.
'{id} .cke_path_item [' +
'color:{elementsPathColor};' +
'] ' +
'{id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [' +
'background-color:{elementsPathBg};' +
'] ' +
'{id}.cke_panel [' +
'border-color:{defaultBorder};' +
'] '
),
panel: new CKEDITOR.template(
// Panel drop-downs.
'.cke_panel_grouptitle [' +
'{lightGradient}' +
'border-color:{defaultBorder};' +
'] ' +
// Context menus.
'.cke_menubutton_icon [' +
'background-color:{menubuttonIcon};' +
'] ' +
'.cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [' +
'background-color:{menubuttonIconHover};' +
'] ' +
'.cke_menuseparator [' +
'background-color:{menubuttonIcon};' +
'] ' +
// Color boxes.
'a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [' +
'border-color:{defaultBorder};' +
'] ' +
'a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [' +
'background-color:{ckeColorauto};' +
'border-color:{defaultBorder};' +
'] '
)
};
return function(editor, part) {
var uiColor = editor.uiColor,
// The following are CSS styles used in templates.
// Styles are generated according to current editor.uiColor.
templateStyles = {
// CKEditor instances have a unique ID, which is used as class name into
// the outer container of the editor UI (e.g. ".cke_1").
//
// The Chameleon feature is available for each CKEditor instance,
// independently. Because of this, we need to prefix all CSS selectors with
// the unique class name of the instance.
id: '.' + editor.id,
// These styles are used by various UI elements.
defaultBorder: colorBrightness(uiColor, -0.1),
defaultGradient: verticalGradient(colorBrightness(uiColor, 0.9), uiColor),
lightGradient: verticalGradient(colorBrightness(uiColor, 1), colorBrightness(uiColor, 0.7)),
mediumGradient: verticalGradient(colorBrightness(uiColor, 0.8), colorBrightness(uiColor, 0.5)),
// These are for specific UI elements.
ckeButtonOn: verticalGradient(colorBrightness(uiColor, 0.6), colorBrightness(uiColor, 0.7)),
ckeResizer: colorBrightness(uiColor, -0.4),
ckeToolbarSeparator: colorBrightness(uiColor, 0.5),
ckeColorauto: colorBrightness(uiColor, 0.8),
dialogBody: colorBrightness(uiColor, 0.7),
// Use gradient instead of simple hex to avoid further filter resetting in IE.
dialogTabSelected: verticalGradient('#FFFFFF', '#FFFFFF'),
dialogTabSelectedBorder: '#FFF',
elementsPathColor: colorBrightness(uiColor, -0.6),
elementsPathBg: uiColor,
menubuttonIcon: colorBrightness(uiColor, 0.5),
menubuttonIconHover: colorBrightness(uiColor, 0.3)
};
return templates[ part ]
.output(templateStyles)
.replace(/\[/g, '{') // Replace brackets with braces.
.replace(/\]/g, '}');
};
})();
// %REMOVE_START%
// 4. Register the skin icons for development purposes only
// ----------------------------------------------------------
// (http://docs.cksource.com/CKEditor_4.x/Skin_SDK/Icons)
//
// Note: As "moono" is the default CKEditor skin, it provides no custom icons,
// thus this code is commented out.
//
// This code is here just to make the skin work fully when using its "source"
// version. Without this, the skin will still work, but its icons will not be
// used (again, on source version only).
//
// This block of code is not necessary on the release version of the skin.
// Because of this it is very important to include it inside the REMOVE_START
// and REMOVE_END comment markers, so the skin builder will properly clean
// things up.
//
// If a required icon is not available here, the plugin defined icon will be
// used instead. This means that a skin is not required to provide all icons.
// Actually, it is not required to provide icons at all.
//
// (function() {
// // The available icons. This list must match the file names (without
// // extension) available inside the "icons" folder.
// var icons = ( 'about,anchor-rtl,anchor,bgcolor,bidiltr,bidirtl,blockquote,' +
// 'bold,bulletedlist-rtl,bulletedlist,button,checkbox,copy-rtl,copy,' +
// 'creatediv,cut-rtl,cut,docprops-rtl,docprops,find-rtl,find,flash,form,' +
// 'hiddenfield,horizontalrule,icons,iframe,image,imagebutton,indent-rtl,' +
// 'indent,italic,justifyblock,justifycenter,justifyleft,justifyright,' +
// 'link,maximize,newpage-rtl,newpage,numberedlist-rtl,numberedlist,' +
// 'outdent-rtl,outdent,pagebreak-rtl,pagebreak,paste-rtl,paste,' +
// 'pastefromword-rtl,pastefromword,pastetext-rtl,pastetext,preview-rtl,' +
// 'preview,print,radio,redo-rtl,redo,removeformat,replace,save,scayt,' +
// 'select-rtl,select,selectall,showblocks-rtl,showblocks,smiley,' +
// 'source-rtl,source,specialchar,spellchecker,strike,subscript,' +
// 'superscript,table,templates-rtl,templates,textarea-rtl,textarea,' +
// 'textcolor,textfield-rtl,textfield,uicolor,underline,undo-rtl,undo,unlink' ).split( ',' );
//
// var iconsFolder = CKEDITOR.getUrl( CKEDITOR.skin.path() + 'icons/' + ( CKEDITOR.env.hidpi ? 'hidpi/' : '' ) );
//
// for ( var i = 0; i < icons.length; i++ ) {
// CKEDITOR.skin.addIcon( icons[ i ], iconsFolder + icons[ i ] + '.png' );
// }
// })();
// %REMOVE_END%

View File

@@ -1,11 +0,0 @@
window.addEventListener('load', function () {
const inputs = document.getElementsByClassName('colorfield_field coloris');
for (const input of inputs) {
const colorisId = input.getAttribute('data-coloris-options-json-script-id');
const script = document.querySelector(`script[id='${colorisId}']`);
const options = JSON.parse(script.textContent);
const id = input.getAttribute('id');
Coloris.setInstance(`.colorfield_field.coloris.${id}`, options);
}
});

View File

@@ -1,3 +0,0 @@
https://github.com/mdbassit/Coloris
Release: v0.24.0

View File

@@ -1,577 +0,0 @@
.clr-picker {
display: none;
flex-wrap: wrap;
position: absolute;
width: 200px;
z-index: 1000;
border-radius: 10px;
background-color: #fff;
justify-content: flex-end;
direction: ltr;
box-shadow: 0 0 5px rgba(0,0,0,.05), 0 5px 20px rgba(0,0,0,.1);
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
.clr-picker.clr-open,
.clr-picker[data-inline="true"] {
display: flex;
}
.clr-picker[data-inline="true"] {
position: relative;
}
.clr-gradient {
position: relative;
width: 100%;
height: 100px;
margin-bottom: 15px;
border-radius: 3px 3px 0 0;
background-image: linear-gradient(rgba(0,0,0,0), #000), linear-gradient(90deg, #fff, currentColor);
cursor: pointer;
}
.clr-marker {
position: absolute;
width: 12px;
height: 12px;
margin: -6px 0 0 -6px;
border: 1px solid #fff;
border-radius: 50%;
background-color: currentColor;
cursor: pointer;
}
.clr-picker input[type="range"]::-webkit-slider-runnable-track {
width: 100%;
height: 16px;
}
.clr-picker input[type="range"]::-webkit-slider-thumb {
width: 16px;
height: 16px;
-webkit-appearance: none;
}
.clr-picker input[type="range"]::-moz-range-track {
width: 100%;
height: 16px;
border: 0;
}
.clr-picker input[type="range"]::-moz-range-thumb {
width: 16px;
height: 16px;
border: 0;
}
.clr-hue {
background-image: linear-gradient(to right, #f00 0%, #ff0 16.66%, #0f0 33.33%, #0ff 50%, #00f 66.66%, #f0f 83.33%, #f00 100%);
}
.clr-hue,
.clr-alpha {
position: relative;
width: calc(100% - 40px);
height: 8px;
margin: 5px 20px;
border-radius: 4px;
}
.clr-alpha span {
display: block;
height: 100%;
width: 100%;
border-radius: inherit;
background-image: linear-gradient(90deg, rgba(0,0,0,0), currentColor);
}
.clr-hue input[type="range"],
.clr-alpha input[type="range"] {
position: absolute;
width: calc(100% + 32px);
height: 16px;
left: -16px;
top: -4px;
margin: 0;
background-color: transparent;
opacity: 0;
cursor: pointer;
appearance: none;
-webkit-appearance: none;
}
.clr-hue div,
.clr-alpha div {
position: absolute;
width: 16px;
height: 16px;
left: 0;
top: 50%;
margin-left: -8px;
transform: translateY(-50%);
border: 2px solid #fff;
border-radius: 50%;
background-color: currentColor;
box-shadow: 0 0 1px #888;
pointer-events: none;
}
.clr-alpha div:before {
content: '';
position: absolute;
height: 100%;
width: 100%;
left: 0;
top: 0;
border-radius: 50%;
background-color: currentColor;
}
.clr-format {
display: none;
order: 1;
width: calc(100% - 40px);
margin: 0 20px 20px;
}
.clr-segmented {
display: flex;
position: relative;
width: 100%;
margin: 0;
padding: 0;
border: 1px solid #ddd;
border-radius: 15px;
box-sizing: border-box;
color: #999;
font-size: 12px;
}
.clr-segmented input,
.clr-segmented legend {
position: absolute;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
border: 0;
left: 0;
top: 0;
opacity: 0;
pointer-events: none;
}
.clr-segmented label {
flex-grow: 1;
margin: 0;
padding: 4px 0;
font-size: inherit;
font-weight: normal;
line-height: initial;
text-align: center;
cursor: pointer;
}
.clr-segmented label:first-of-type {
border-radius: 10px 0 0 10px;
}
.clr-segmented label:last-of-type {
border-radius: 0 10px 10px 0;
}
.clr-segmented input:checked + label {
color: #fff;
background-color: #666;
}
.clr-swatches {
order: 2;
width: calc(100% - 32px);
margin: 0 16px;
}
.clr-swatches div {
display: flex;
flex-wrap: wrap;
padding-bottom: 12px;
justify-content: center;
}
.clr-swatches button {
position: relative;
width: 20px;
height: 20px;
margin: 0 4px 6px 4px;
padding: 0;
border: 0;
border-radius: 50%;
color: inherit;
text-indent: -1000px;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
}
.clr-swatches button:after {
content: '';
display: block;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
border-radius: inherit;
background-color: currentColor;
box-shadow: inset 0 0 0 1px rgba(0,0,0,.1);
}
input.clr-color {
order: 1;
width: calc(100% - 80px);
height: 32px;
margin: 15px 20px 20px auto;
padding: 0 10px;
border: 1px solid #ddd;
border-radius: 16px;
color: #444;
background-color: #fff;
font-family: sans-serif;
font-size: 14px;
text-align: center;
box-shadow: none;
}
input.clr-color:focus {
outline: none;
border: 1px solid #1e90ff;
}
.clr-close,
.clr-clear {
display: none;
order: 2;
height: 24px;
margin: 0 20px 20px;
padding: 0 20px;
border: 0;
border-radius: 12px;
color: #fff;
background-color: #666;
font-family: inherit;
font-size: 12px;
font-weight: 400;
cursor: pointer;
}
.clr-close {
display: block;
margin: 0 20px 20px auto;
}
.clr-preview {
position: relative;
width: 32px;
height: 32px;
margin: 15px 0 20px 20px;
border-radius: 50%;
overflow: hidden;
}
.clr-preview:before,
.clr-preview:after {
content: '';
position: absolute;
height: 100%;
width: 100%;
left: 0;
top: 0;
border: 1px solid #fff;
border-radius: 50%;
}
.clr-preview:after {
border: 0;
background-color: currentColor;
box-shadow: inset 0 0 0 1px rgba(0,0,0,.1);
}
.clr-preview button {
position: absolute;
width: 100%;
height: 100%;
z-index: 1;
margin: 0;
padding: 0;
border: 0;
border-radius: 50%;
outline-offset: -2px;
background-color: transparent;
text-indent: -9999px;
cursor: pointer;
overflow: hidden;
}
.clr-marker,
.clr-hue div,
.clr-alpha div,
.clr-color {
box-sizing: border-box;
}
.clr-field {
display: inline-block;
position: relative;
color: transparent;
}
.clr-field input {
margin: 0;
direction: ltr;
}
.clr-field.clr-rtl input {
text-align: right;
}
.clr-field button {
position: absolute;
width: 30px;
height: 100%;
right: 0;
top: 50%;
transform: translateY(-50%);
margin: 0;
padding: 0;
border: 0;
color: inherit;
text-indent: -1000px;
white-space: nowrap;
overflow: hidden;
pointer-events: none;
}
.clr-field.clr-rtl button {
right: auto;
left: 0;
}
.clr-field button:after {
content: '';
display: block;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
border-radius: inherit;
background-color: currentColor;
box-shadow: inset 0 0 1px rgba(0,0,0,.5);
}
.clr-alpha,
.clr-alpha div,
.clr-swatches button,
.clr-preview:before,
.clr-field button {
background-image: repeating-linear-gradient(45deg, #aaa 25%, transparent 25%, transparent 75%, #aaa 75%, #aaa), repeating-linear-gradient(45deg, #aaa 25%, #fff 25%, #fff 75%, #aaa 75%, #aaa);
background-position: 0 0, 4px 4px;
background-size: 8px 8px;
}
.clr-marker:focus {
outline: none;
}
.clr-keyboard-nav .clr-marker:focus,
.clr-keyboard-nav .clr-hue input:focus + div,
.clr-keyboard-nav .clr-alpha input:focus + div,
.clr-keyboard-nav .clr-segmented input:focus + label {
outline: none;
box-shadow: 0 0 0 2px #1e90ff, 0 0 2px 2px #fff;
}
.clr-picker[data-alpha="false"] .clr-alpha {
display: none;
}
.clr-picker[data-minimal="true"] {
padding-top: 16px;
}
.clr-picker[data-minimal="true"] .clr-gradient,
.clr-picker[data-minimal="true"] .clr-hue,
.clr-picker[data-minimal="true"] .clr-alpha,
.clr-picker[data-minimal="true"] .clr-color,
.clr-picker[data-minimal="true"] .clr-preview {
display: none;
}
/** Dark theme **/
.clr-dark {
background-color: #444;
}
.clr-dark .clr-segmented {
border-color: #777;
}
.clr-dark .clr-swatches button:after {
box-shadow: inset 0 0 0 1px rgba(255,255,255,.3);
}
.clr-dark input.clr-color {
color: #fff;
border-color: #777;
background-color: #555;
}
.clr-dark input.clr-color:focus {
border-color: #1e90ff;
}
.clr-dark .clr-preview:after {
box-shadow: inset 0 0 0 1px rgba(255,255,255,.5);
}
.clr-dark .clr-alpha,
.clr-dark .clr-alpha div,
.clr-dark .clr-swatches button,
.clr-dark .clr-preview:before {
background-image: repeating-linear-gradient(45deg, #666 25%, transparent 25%, transparent 75%, #888 75%, #888), repeating-linear-gradient(45deg, #888 25%, #444 25%, #444 75%, #888 75%, #888);
}
/** Polaroid theme **/
.clr-picker.clr-polaroid {
border-radius: 6px;
box-shadow: 0 0 5px rgba(0,0,0,.1), 0 5px 30px rgba(0,0,0,.2);
}
.clr-picker.clr-polaroid:before {
content: '';
display: block;
position: absolute;
width: 16px;
height: 10px;
left: 20px;
top: -10px;
border: solid transparent;
border-width: 0 8px 10px 8px;
border-bottom-color: currentColor;
box-sizing: border-box;
color: #fff;
filter: drop-shadow(0 -4px 3px rgba(0,0,0,.1));
pointer-events: none;
}
.clr-picker.clr-polaroid.clr-dark:before {
color: #444;
}
.clr-picker.clr-polaroid.clr-left:before {
left: auto;
right: 20px;
}
.clr-picker.clr-polaroid.clr-top:before {
top: auto;
bottom: -10px;
transform: rotateZ(180deg);
}
.clr-polaroid .clr-gradient {
width: calc(100% - 20px);
height: 120px;
margin: 10px;
border-radius: 3px;
}
.clr-polaroid .clr-hue,
.clr-polaroid .clr-alpha {
width: calc(100% - 30px);
height: 10px;
margin: 6px 15px;
border-radius: 5px;
}
.clr-polaroid .clr-hue div,
.clr-polaroid .clr-alpha div {
box-shadow: 0 0 5px rgba(0,0,0,.2);
}
.clr-polaroid .clr-format {
width: calc(100% - 20px);
margin: 0 10px 15px;
}
.clr-polaroid .clr-swatches {
width: calc(100% - 12px);
margin: 0 6px;
}
.clr-polaroid .clr-swatches div {
padding-bottom: 10px;
}
.clr-polaroid .clr-swatches button {
width: 22px;
height: 22px;
}
.clr-polaroid input.clr-color {
width: calc(100% - 60px);
margin: 10px 10px 15px auto;
}
.clr-polaroid .clr-clear {
margin: 0 10px 15px 10px;
}
.clr-polaroid .clr-close {
margin: 0 10px 15px auto;
}
.clr-polaroid .clr-preview {
margin: 10px 0 15px 10px;
}
/** Large theme **/
.clr-picker.clr-large {
width: 275px;
}
.clr-large .clr-gradient {
height: 150px;
}
.clr-large .clr-swatches button {
width: 22px;
height: 22px;
}
/** Pill (horizontal) theme **/
.clr-picker.clr-pill {
width: 380px;
padding-left: 180px;
box-sizing: border-box;
}
.clr-pill .clr-gradient {
position: absolute;
width: 180px;
height: 100%;
left: 0;
top: 0;
margin-bottom: 0;
border-radius: 3px 0 0 3px;
}
.clr-pill .clr-hue {
margin-top: 20px;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,22 +0,0 @@
(function() {
'use strict';
var windowRef = window;
var openerRef = windowRef.parent;
var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse);
switch (initData.action) {
case 'change':
openerRef.streamapps[initData.app_id].updateBlock(initData.block_id, initData.instance_id);
openerRef.dismissRelatedObjectModal();
break;
case 'delete':
break;
default:
openerRef.streamapps[initData.app_id].updateBlock(initData.block_id, initData.instance_id);
openerRef.dismissRelatedObjectModal();
break;
}
})();