app can run
|
|
@ -1,58 +1,66 @@
|
|||
"""
|
||||
Django settings for accounts project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 2.2.
|
||||
Generated by 'django-admin startproject' using Django 5.0.4.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/2.2/topics/settings/
|
||||
https://docs.djangoproject.com/en/5.0/topics/settings/
|
||||
|
||||
For the full list of settings and their values, see
|
||||
https://docs.djangoproject.com/en/2.2/ref/settings/
|
||||
https://docs.djangoproject.com/en/5.0/ref/settings/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from pathlib import Path
|
||||
from decouple import config
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
|
||||
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'tm9-y*5r=n028ii8iny#u1p3&mdjqf-#kj!z^fg%sbussj@r+o'
|
||||
SECRET_KEY = 'django-insecure-&+7fi$8#2!r=b6=^i_6surhka6!%uw1a+pz^m0qc!t_#6y=qr2'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = config('DEBUG', False, cast=bool)
|
||||
DEBUG = config('DEBUG', default=True, cast=bool)
|
||||
|
||||
ALLOWED_HOSTS = ['*']
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
# django apps
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
|
||||
# pip installed apps
|
||||
'drf_spectacular',
|
||||
'oauth2_provider',
|
||||
'rest_framework',
|
||||
'corsheaders',
|
||||
'apps.users',
|
||||
'apps.wallet',
|
||||
'apps.gooyal_oauth2',
|
||||
'apps.superapp',
|
||||
'crispy_forms',
|
||||
'crispy_bootstrap5',
|
||||
'django_filters',
|
||||
'jalali_date',
|
||||
|
||||
# local apps
|
||||
'apps.users',
|
||||
'apps.wallet',
|
||||
'apps.accounts_oauth2',
|
||||
'apps.superapp',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
# 'django.middleware.locale.LocaleMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
|
|
@ -61,20 +69,20 @@ MIDDLEWARE = [
|
|||
]
|
||||
|
||||
# Tell Django OAuth Toolkit to use the Gooyal Application model
|
||||
OAUTH2_PROVIDER_ID_TOKEN_MODEL = 'gooyal_oauth2.IDToken'
|
||||
OAUTH2_PROVIDER_APPLICATION_MODEL = 'gooyal_oauth2.Application'
|
||||
OAUTH2_PROVIDER_ACCESS_TOKEN_MODEL = 'gooyal_oauth2.AccessToken'
|
||||
OAUTH2_PROVIDER_GRANT_MODEL = 'gooyal_oauth2.Grant'
|
||||
OAUTH2_PROVIDER_REFRESH_TOKEN_MODEL = 'gooyal_oauth2.RefreshToken'
|
||||
OAUTH2_PROVIDER_ID_TOKEN_MODEL = 'accounts_oauth2.IDToken'
|
||||
OAUTH2_PROVIDER_APPLICATION_MODEL = 'accounts_oauth2.Application'
|
||||
OAUTH2_PROVIDER_ACCESS_TOKEN_MODEL = 'accounts_oauth2.AccessToken'
|
||||
OAUTH2_PROVIDER_GRANT_MODEL = 'accounts_oauth2.Grant'
|
||||
OAUTH2_PROVIDER_REFRESH_TOKEN_MODEL = 'accounts_oauth2.RefreshToken'
|
||||
|
||||
OAUTH2_PROVIDER = {
|
||||
# this is the list of available scopes
|
||||
'SCOPES_BACKEND_CLASS': 'apps.gooyal_oauth2.scopes.Scopes',
|
||||
'SCOPES_BACKEND_CLASS': 'apps.accounts_oauth2.scopes.Scopes',
|
||||
'SCOPES': {'read': 'Read scope',
|
||||
'write': 'Write scope',
|
||||
'groups': 'Access to your groups',
|
||||
'introspection': 'Introspect token scope'},
|
||||
'OAUTH2_VALIDATOR_CLASS': 'apps.gooyal_oauth2.validators.OAuth2Validator',
|
||||
'OAUTH2_VALIDATOR_CLASS': 'apps.accounts_oauth2.validators.OAuth2Validator',
|
||||
# "INTROSPECTION_USER_CREATE_METHOD": 'apps.users.models.create_user_in_introspection',
|
||||
}
|
||||
|
||||
|
|
@ -109,7 +117,8 @@ ROOT_URLCONF = 'accounts.urls'
|
|||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [os.path.join(BASE_DIR, 'templates')],
|
||||
'DIRS': [BASE_DIR / 'templates']
|
||||
,
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
|
|
@ -130,11 +139,18 @@ AUTHENTICATION_BACKENDS = (
|
|||
WSGI_APPLICATION = 'accounts.wsgi.application'
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
|
||||
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
|
||||
|
||||
# DATABASES = {
|
||||
# 'default': {
|
||||
# 'ENGINE': 'django.db.backends.sqlite3',
|
||||
# 'NAME': BASE_DIR / 'db.sqlite3',
|
||||
# }
|
||||
# }
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.mysql',
|
||||
'ENGINE': 'django.db.backends.postgresql',
|
||||
'NAME': config('DB_NAME'),
|
||||
'USER': config('DB_USER'),
|
||||
'PASSWORD': config('DB_PASSWORD'),
|
||||
|
|
@ -144,7 +160,7 @@ DATABASES = {
|
|||
}
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
|
||||
# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators
|
||||
|
||||
AUTH_PASSWORD_VALIDATORS = [
|
||||
{
|
||||
|
|
@ -161,10 +177,11 @@ AUTH_PASSWORD_VALIDATORS = [
|
|||
},
|
||||
]
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/2.2/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/5.0/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en'
|
||||
|
||||
TIME_ZONE = 'UTC'
|
||||
|
||||
|
|
@ -174,33 +191,57 @@ USE_L10N = True
|
|||
|
||||
USE_TZ = True
|
||||
|
||||
LOCALE_PATHS = [
|
||||
BASE_DIR / 'locale',
|
||||
]
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/2.2/howto/static-files/
|
||||
# https://docs.djangoproject.com/en/5.0/howto/static-files/
|
||||
|
||||
# LOGIN_URL = '/accounts/login/'
|
||||
# LOGIN_REDIRECT_URL = '/accounts/profile/'
|
||||
|
||||
LOGIN_URL = '/users/login'
|
||||
LOGIN_REDIRECT_URL = '/'
|
||||
MEDIA_URL = 'media/'
|
||||
MEDIA_ROOT = BASE_DIR / 'media'
|
||||
|
||||
AUTH_USER_MODEL = 'users.User'
|
||||
CORS_ORIGIN_ALLOW_ALL = True
|
||||
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||
MEDIA_URL = "/media/"
|
||||
|
||||
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
# BASE_NOTIFICATION_URL = config('BASE_NOTIFICATION_URL')
|
||||
# CLIENT_ID = config('CLIENT_ID')
|
||||
# CLIENT_SECRET = config('CLIENT_SECRET')
|
||||
if DEBUG == True:
|
||||
STATICFILES_DIRS = (
|
||||
BASE_DIR / 'static',
|
||||
)
|
||||
else:
|
||||
STATIC_ROOT = BASE_DIR / 'static'
|
||||
|
||||
|
||||
|
||||
# Default primary key field type
|
||||
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
|
||||
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||
|
||||
|
||||
|
||||
LOGIN_URL = '/users/login/'
|
||||
LOGIN_REDIRECT_URL = '/'
|
||||
|
||||
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
|
||||
CRISPY_TEMPLATE_PACK = "bootstrap5"
|
||||
|
||||
CELERY_BROKER_URL = config('CELERY_BROKER_URL')
|
||||
SPECTACULAR_SETTINGS = {
|
||||
'TITLE': 'srv',
|
||||
'DESCRIPTION': 'service api reference',
|
||||
'VERSION': '1.0.0',
|
||||
'SERVE_INCLUDE_SCHEMA': False,
|
||||
# OTHER SETTINGS
|
||||
}
|
||||
|
||||
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
|
||||
USE_X_FORWARDED_HOST = True
|
||||
USE_X_FORWARDED_PORT = True
|
||||
AUTH_USER_MODEL = 'users.User'
|
||||
CORS_ORIGIN_ALLOW_ALL = True
|
||||
CSRF_TRUSTED_ORIGINS = ['http://*.boostanweb.ir', 'https://*.boostanweb.ir']
|
||||
|
||||
JALALI_DATE_DEFAULTS = {
|
||||
'Strftime': {
|
||||
'date': '%Y/%m/%d',
|
||||
'datetime': '%H:%M:%S _ %Y/%m/%d',
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ from rest_framework import permissions
|
|||
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
|
||||
|
||||
|
||||
# from apps.gooyal_oauth2.views.introspect import introspect_token
|
||||
# from apps.accounts_oauth2.views.introspect import introspect_token
|
||||
from apps.wallet.views import TransactionList, TransactionDetail, TransactionPay, TransactionReceipt, \
|
||||
WithdrawVerify, WithdrawSubmit, DepositSubmit, DepositVerify
|
||||
from django.contrib.auth import urls as auth_urls
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ from django.apps import AppConfig
|
|||
|
||||
|
||||
class GooyalOauthConfig(AppConfig):
|
||||
name = 'apps.gooyal_oauth2'
|
||||
name = 'apps.accounts_oauth2'
|
||||
|
|
@ -117,7 +117,7 @@ class Migration(migrations.Migration):
|
|||
('description', models.TextField(help_text='A brief description of the scope. This text is displayed to users when authorising access for the scope.')),
|
||||
('is_default', models.BooleanField(default=False, help_text='Indicates if this scope should be included in the default scopes.')),
|
||||
('application', models.ForeignKey(blank=True, help_text='The application to which the scope belongs.', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='scopes', to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL)),
|
||||
('resource', models.ForeignKey(blank=True, help_text='The resource of scope.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='scopes', to='gooyal_oauth2.resource')),
|
||||
('resource', models.ForeignKey(blank=True, help_text='The resource of scope.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='scopes', to='accounts_oauth2.resource')),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -10,7 +10,7 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('gooyal_oauth2', '0001_initial'),
|
||||
('accounts_oauth2', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
|
|
@ -58,7 +58,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='application',
|
||||
name='resource',
|
||||
field=models.OneToOneField(blank=True, help_text='The resource of application.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='application', to='gooyal_oauth2.resource'),
|
||||
field=models.OneToOneField(blank=True, help_text='The resource of application.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='application', to='accounts_oauth2.resource'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='application',
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# Generated by Django 5.0.6 on 2024-06-26 12:34
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('accounts_oauth2', '0002_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='application',
|
||||
name='allowed_origins',
|
||||
field=models.TextField(blank=True, default='', help_text='Allowed origins list to enable CORS, space separated'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='application',
|
||||
name='hash_client_secret',
|
||||
field=models.BooleanField(default=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='application',
|
||||
name='post_logout_redirect_uris',
|
||||
field=models.TextField(blank=True, default='', help_text='Allowed Post Logout URIs list, space separated'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='accesstoken',
|
||||
name='token',
|
||||
field=models.CharField(db_index=True, max_length=255, unique=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='scope',
|
||||
name='id',
|
||||
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
]
|
||||
|
|
@ -6,7 +6,7 @@ from rest_framework import generics
|
|||
|
||||
from .models import App
|
||||
from .serializers import AppSerializer
|
||||
from ..gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements
|
||||
from ..accounts_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements
|
||||
|
||||
|
||||
@method_decorator(login_required, name='dispatch')
|
||||
|
|
|
|||
|
|
@ -1,4 +1,2 @@
|
|||
from model_utils.choices import Choices
|
||||
|
||||
MAX_OTP_TRY = 3
|
||||
DEVELOPMENT_PHONE_NUMBERS = ['+989999999999', '+989999999998']
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from rest_framework import generics, status, permissions
|
|||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from apps.gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements
|
||||
from apps.accounts_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements
|
||||
from apps.users.forms import OTPAuthenticationForm, ProfileUpdateForm
|
||||
from apps.users.models import User
|
||||
from apps.users.provinces_and_cities import State
|
||||
|
|
|
|||
|
|
@ -2,4 +2,5 @@ from django.apps import AppConfig
|
|||
|
||||
|
||||
class WalletConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'apps.wallet'
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
from model_utils.choices import Choices
|
||||
from django.db.models import IntegerChoices
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
# TODO: add a state for invoice created
|
||||
STATE_CHOICES = Choices(
|
||||
(1, 'created', 'created'),
|
||||
(2, 'delayed', 'delayed'), # delayed as user wish
|
||||
(3, 'pending', 'pending'), # wait for external service response
|
||||
(4, 'incomplete', 'incomplete'), # started and wait for internal progress to complete
|
||||
(5, 'success', 'success'),
|
||||
(6, 'failed', 'failed'),
|
||||
(7, 'expected_failure', 'expected_failure'), # no exact data available but guessed to be failed
|
||||
)
|
||||
|
||||
class StateChoices(IntegerChoices):
|
||||
CREATED = 1 , _('created')
|
||||
DELAYED = 2 , _('delayed') # delayed as user wish
|
||||
PENDING = 3 , _('pending') # wait for external service response
|
||||
INCOMPLETE = 4 , _('incomplete') # started and wait for internal progress to complete
|
||||
SUCCESS = 5 , _('success')
|
||||
FAILED = 6 , _('failed')
|
||||
EXPECTED_FAILURE = 7 , _('expected_failure') # no exact data available but guessed to be failed
|
||||
|
|
|
|||
|
|
@ -5,10 +5,9 @@ from django.db import models
|
|||
from django.db import transaction
|
||||
from django.db.models import F
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from model_utils.choices import Choices
|
||||
from rest_framework.exceptions import APIException, ValidationError
|
||||
from django.conf import settings
|
||||
from .constans import STATE_CHOICES
|
||||
from .constans import StateChoices
|
||||
from apps.users.models import User
|
||||
|
||||
|
||||
|
|
@ -50,14 +49,13 @@ class TransactionManager(models.Manager):
|
|||
|
||||
|
||||
class Transaction(models.Model):
|
||||
state_choices = STATE_CHOICES
|
||||
uuid = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4, unique=True,
|
||||
db_index=True) # reserve_code
|
||||
amount = models.IntegerField(_('amount'), blank=False)
|
||||
delay = models.IntegerField(default=0, blank=True) # number of days for delayed payments
|
||||
payer = models.ForeignKey(User, on_delete=models.PROTECT, related_name='payments', blank=True, null=True)
|
||||
payee = models.ForeignKey(User, on_delete=models.PROTECT, related_name='receipts')
|
||||
state = models.IntegerField(choices=STATE_CHOICES, default=STATE_CHOICES.created)
|
||||
state = models.IntegerField(choices=StateChoices.choices, default=StateChoices.CREATED)
|
||||
create = models.DateTimeField(_('create'), blank=True, null=True, auto_now=True)
|
||||
last_update = models.DateTimeField(_('last update'), blank=True, null=True, auto_now=True)
|
||||
application = models.ForeignKey(settings.OAUTH2_PROVIDER_APPLICATION_MODEL, on_delete=models.PROTECT,
|
||||
|
|
@ -77,7 +75,7 @@ class Transaction(models.Model):
|
|||
raise APIException('payer identification error')
|
||||
|
||||
# TODO: check bundry conditions
|
||||
if not self.state == STATE_CHOICES.created:
|
||||
if not self.state == StateChoices.CREATED:
|
||||
raise APIException('this transaction is not ready to pay')
|
||||
|
||||
if not self.payer:
|
||||
|
|
@ -97,14 +95,14 @@ class Transaction(models.Model):
|
|||
raise APIException('not enough balance')
|
||||
|
||||
if self.delay:
|
||||
self.state = STATE_CHOICES.delayed
|
||||
self.state = StateChoices.DELAYED
|
||||
self.save()
|
||||
|
||||
else:
|
||||
self.payee.balance = F('balance') + self.amount
|
||||
self.payee.save(update_fields=['balance'])
|
||||
|
||||
self.state = STATE_CHOICES.success
|
||||
self.state = StateChoices.SUCCESS
|
||||
self.save()
|
||||
|
||||
self.save()
|
||||
|
|
@ -112,13 +110,13 @@ class Transaction(models.Model):
|
|||
|
||||
def receipt(self):
|
||||
# TODO: check bundry conditions
|
||||
if not self.state == STATE_CHOICES.delayed:
|
||||
if not self.state == StateChoices.DELAYED:
|
||||
raise APIException('this transaction is not delayed')
|
||||
|
||||
with transaction.atomic():
|
||||
self.last_update = datetime.datetime.now()
|
||||
self.payee.balance = F('balance') + self.amount
|
||||
self.state = STATE_CHOICES.success
|
||||
self.state = StateChoices.SUCCESS
|
||||
self.payee.save()
|
||||
self.save()
|
||||
|
||||
|
|
@ -130,7 +128,7 @@ class Transaction(models.Model):
|
|||
raise APIException('payee identification error')
|
||||
|
||||
# TODO: check bundry conditions
|
||||
if not self.state == STATE_CHOICES.created:
|
||||
if not self.state == StateChoices.CREATED:
|
||||
raise APIException('this transaction is not ready to pay')
|
||||
|
||||
with transaction.atomic():
|
||||
|
|
@ -143,7 +141,7 @@ class Transaction(models.Model):
|
|||
self.payer.save(update_fields=['balance'])
|
||||
|
||||
self.payer.refresh_from_db()
|
||||
self.state = STATE_CHOICES.pending
|
||||
self.state = StateChoices.PENDING
|
||||
if self.payer.balance < 0:
|
||||
raise APIException('not enough balance')
|
||||
|
||||
|
|
@ -152,13 +150,13 @@ class Transaction(models.Model):
|
|||
|
||||
def verify(self):
|
||||
# TODO: check bundry conditions
|
||||
if not self.state == STATE_CHOICES.pending:
|
||||
if not self.state == StateChoices.PENDING:
|
||||
raise APIException('this transaction is not pending')
|
||||
|
||||
with transaction.atomic():
|
||||
self.last_update = datetime.datetime.now()
|
||||
self.payee.balance = F('balance') + self.amount
|
||||
self.state = STATE_CHOICES.success
|
||||
self.state = StateChoices.SUCCESS
|
||||
self.payee.save()
|
||||
self.save()
|
||||
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ from oauth2_provider.contrib.rest_framework import TokenHasScope, IsAuthenticate
|
|||
from rest_framework import generics, permissions
|
||||
from rest_framework.response import Response
|
||||
|
||||
from apps.gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements
|
||||
from apps.accounts_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements
|
||||
from apps.wallet.models import Transaction
|
||||
from apps.wallet.serializers import TransactionSerializer, DepositSerializer, WithdrawSerializer, WalletSerializer
|
||||
from .constans import STATE_CHOICES
|
||||
from .constans import StateChoices
|
||||
from .forms import TransactionActionForm
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
|
@ -143,7 +143,7 @@ class DepositVerify(generics.RetrieveAPIView):
|
|||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
if instance.state == STATE_CHOICES.pending:
|
||||
if instance.state == StateChoices.PENDING:
|
||||
instance.verify()
|
||||
|
||||
serializer = self.get_serializer(instance)
|
||||
|
|
@ -176,7 +176,7 @@ class WithdrawVerify(generics.RetrieveAPIView):
|
|||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
if instance.state == STATE_CHOICES.pending:
|
||||
if instance.state == StateChoices.PENDING:
|
||||
instance.verify()
|
||||
|
||||
serializer = self.get_serializer(instance)
|
||||
|
|
|
|||
|
|
@ -2,59 +2,88 @@
|
|||
DJANGO Admin styles
|
||||
*/
|
||||
|
||||
@import url(fonts.css);
|
||||
|
||||
/* VARIABLE DEFINITIONS */
|
||||
html[data-theme="light"],
|
||||
:root {
|
||||
--primary: #79aec8;
|
||||
--secondary: #417690;
|
||||
--accent: #f5dd5d;
|
||||
--primary-fg: #fff;
|
||||
--primary: #79aec8;
|
||||
--secondary: #417690;
|
||||
--accent: #f5dd5d;
|
||||
--primary-fg: #fff;
|
||||
|
||||
--body-fg: #333;
|
||||
--body-bg: #fff;
|
||||
--body-quiet-color: #666;
|
||||
--body-loud-color: #000;
|
||||
--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);
|
||||
--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);
|
||||
--breadcrumbs-fg: #c4dce8;
|
||||
--breadcrumbs-link-fg: var(--body-bg);
|
||||
--breadcrumbs-bg: #264b5d;
|
||||
|
||||
--link-fg: #447e9b;
|
||||
--link-hover-color: #036;
|
||||
--link-selected-fg: #5b80b2;
|
||||
--link-fg: #417893;
|
||||
--link-hover-color: #036;
|
||||
--link-selected-fg: var(--secondary);
|
||||
|
||||
--hairline-color: #e8e8e8;
|
||||
--border-color: #ccc;
|
||||
--hairline-color: #e8e8e8;
|
||||
--border-color: #ccc;
|
||||
|
||||
--error-fg: #ba2121;
|
||||
--error-fg: #ba2121;
|
||||
|
||||
--message-success-bg: #dfd;
|
||||
--message-warning-bg: #ffc;
|
||||
--message-error-bg: #ffefef;
|
||||
--message-success-bg: #dfd;
|
||||
--message-warning-bg: #ffc;
|
||||
--message-error-bg: #ffefef;
|
||||
|
||||
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
||||
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
||||
--selected-row: #ffc;
|
||||
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
||||
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
||||
--selected-row: #ffc;
|
||||
|
||||
--button-fg: #fff;
|
||||
--button-bg: var(--primary);
|
||||
--button-hover-bg: #609ab6;
|
||||
--default-button-bg: var(--secondary);
|
||||
--default-button-hover-bg: #205067;
|
||||
--close-button-bg: #888; /* Previously #bbb, contrast 1.92 */
|
||||
--close-button-hover-bg: #747474;
|
||||
--delete-button-bg: #ba2121;
|
||||
--delete-button-hover-bg: #a41515;
|
||||
--button-fg: #fff;
|
||||
--button-bg: var(--secondary);
|
||||
--button-hover-bg: #205067;
|
||||
--default-button-bg: #205067;
|
||||
--default-button-hover-bg: var(--secondary);
|
||||
--close-button-bg: #747474;
|
||||
--close-button-hover-bg: #333;
|
||||
--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);
|
||||
--object-tools-fg: var(--button-fg);
|
||||
--object-tools-bg: var(--close-button-bg);
|
||||
--object-tools-hover-bg: var(--close-button-hover-bg);
|
||||
|
||||
--font-family-primary:
|
||||
"Segoe UI",
|
||||
system-ui,
|
||||
Roboto,
|
||||
"Helvetica Neue",
|
||||
Arial,
|
||||
sans-serif,
|
||||
"Apple Color Emoji",
|
||||
"Segoe UI Emoji",
|
||||
"Segoe UI Symbol",
|
||||
"Noto Color Emoji";
|
||||
--font-family-monospace:
|
||||
ui-monospace,
|
||||
Menlo,
|
||||
Monaco,
|
||||
"Cascadia Mono",
|
||||
"Segoe UI Mono",
|
||||
"Roboto Mono",
|
||||
"Oxygen Mono",
|
||||
"Ubuntu Monospace",
|
||||
"Source Code Pro",
|
||||
"Fira Mono",
|
||||
"Droid Sans Mono",
|
||||
"Courier New",
|
||||
monospace,
|
||||
"Apple Color Emoji",
|
||||
"Segoe UI Emoji",
|
||||
"Segoe UI Symbol",
|
||||
"Noto Color Emoji";
|
||||
}
|
||||
|
||||
html, body {
|
||||
|
|
@ -65,7 +94,7 @@ body {
|
|||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
|
||||
font-family: var(--font-family-primary);
|
||||
color: var(--body-fg);
|
||||
background: var(--body-bg);
|
||||
}
|
||||
|
|
@ -163,7 +192,7 @@ li ul {
|
|||
|
||||
li, dt, dd {
|
||||
font-size: 0.8125rem;
|
||||
line-height: 20px;
|
||||
line-height: 1.25rem;
|
||||
}
|
||||
|
||||
dt {
|
||||
|
|
@ -197,7 +226,7 @@ blockquote {
|
|||
}
|
||||
|
||||
code, pre {
|
||||
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
|
||||
font-family: var(--font-family-monospace);
|
||||
color: var(--body-quiet-color);
|
||||
font-size: 0.75rem;
|
||||
overflow-x: auto;
|
||||
|
|
@ -277,7 +306,7 @@ table {
|
|||
|
||||
td, th {
|
||||
font-size: 0.8125rem;
|
||||
line-height: 16px;
|
||||
line-height: 1rem;
|
||||
border-bottom: 1px solid var(--hairline-color);
|
||||
vertical-align: top;
|
||||
padding: 8px;
|
||||
|
|
@ -441,7 +470,7 @@ input, textarea, select, .form-row p, form .button {
|
|||
margin: 2px 0;
|
||||
padding: 2px 3px;
|
||||
vertical-align: middle;
|
||||
font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif;
|
||||
font-family: var(--font-family-primary);
|
||||
font-weight: normal;
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
|
|
@ -470,7 +499,7 @@ textarea:focus, select:focus, .vTextField:focus {
|
|||
}
|
||||
|
||||
select {
|
||||
height: 30px;
|
||||
height: 1.875rem;
|
||||
}
|
||||
|
||||
select[multiple] {
|
||||
|
|
@ -506,7 +535,6 @@ a.button {
|
|||
}
|
||||
|
||||
.button.default, input[type=submit].default, .submit-row input.default {
|
||||
float: right;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
background: var(--default-button-bg);
|
||||
|
|
@ -556,7 +584,7 @@ input[type=button][disabled].default {
|
|||
font-weight: 400;
|
||||
font-size: 0.8125rem;
|
||||
text-align: left;
|
||||
background: var(--primary);
|
||||
background: var(--header-bg);
|
||||
color: var(--header-link-color);
|
||||
}
|
||||
|
||||
|
|
@ -692,6 +720,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover {
|
|||
background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
|
||||
}
|
||||
|
||||
.hidelink {
|
||||
padding-left: 16px;
|
||||
background: url(../img/icon-hidelink.svg) 0 1px no-repeat;
|
||||
}
|
||||
|
||||
.addlink {
|
||||
padding-left: 16px;
|
||||
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
||||
|
|
@ -731,7 +764,7 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
display: block;
|
||||
float: left;
|
||||
margin-left: 5px;
|
||||
height: 16px;
|
||||
height: 1rem;
|
||||
}
|
||||
|
||||
.object-tools a {
|
||||
|
|
@ -801,10 +834,6 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
height: 100%;
|
||||
}
|
||||
|
||||
#container > div {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
#container > .main {
|
||||
display: flex;
|
||||
flex: 1 0 auto;
|
||||
|
|
@ -815,6 +844,20 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
max-width: 100%;
|
||||
}
|
||||
|
||||
.skip-to-content-link {
|
||||
position: absolute;
|
||||
top: -999px;
|
||||
margin: 5px;
|
||||
padding: 5px;
|
||||
background: var(--body-bg);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.skip-to-content-link:focus {
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
}
|
||||
|
||||
#content {
|
||||
padding: 20px 40px;
|
||||
}
|
||||
|
|
@ -875,7 +918,6 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
padding: 10px 40px;
|
||||
background: var(--header-bg);
|
||||
color: var(--header-color);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#header a:link, #header a:visited, #logout-form button {
|
||||
|
|
@ -887,18 +929,19 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
}
|
||||
|
||||
#branding {
|
||||
float: left;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#branding h1 {
|
||||
#site-name {
|
||||
padding: 0;
|
||||
margin: 0 20px 0 0;
|
||||
margin: 0;
|
||||
margin-inline-end: 20px;
|
||||
font-weight: 300;
|
||||
font-size: 1.5rem;
|
||||
color: var(--header-branding-color);
|
||||
}
|
||||
|
||||
#branding h1 a:link, #branding h1 a:visited {
|
||||
#site-name a:link, #site-name a:visited {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
|
|
@ -922,7 +965,7 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
background: none;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
|
||||
font-family: var(--font-family-primary);
|
||||
}
|
||||
|
||||
#user-tools {
|
||||
|
|
@ -1014,8 +1057,8 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
.delete-confirmation form .cancel-link {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
height: 15px;
|
||||
line-height: 15px;
|
||||
height: 0.9375rem;
|
||||
line-height: 0.9375rem;
|
||||
border-radius: 4px;
|
||||
padding: 10px 15px;
|
||||
color: var(--button-fg);
|
||||
|
|
@ -1045,6 +1088,9 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
/* PAGINATOR */
|
||||
|
||||
.paginator {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
font-size: 0.8125rem;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
|
|
@ -1087,3 +1133,24 @@ a.deletelink:focus, a.deletelink:hover {
|
|||
color: white;
|
||||
background: var(--link-hover-color);
|
||||
}
|
||||
|
||||
.paginator input {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.base-svgs {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.visually-hidden {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0,0,0,0);
|
||||
white-space: nowrap;
|
||||
border: 0;
|
||||
color: var(--body-fg);
|
||||
background-color: var(--body-bg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@
|
|||
}
|
||||
|
||||
#toolbar #searchbar {
|
||||
height: 19px;
|
||||
height: 1.1875rem;
|
||||
border: 1px solid var(--border-color);
|
||||
padding: 2px 5px;
|
||||
margin: 0;
|
||||
|
|
@ -153,6 +153,7 @@
|
|||
font-weight: 400;
|
||||
padding: 0 15px;
|
||||
margin-bottom: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#changelist-filter details summary > * {
|
||||
|
|
@ -215,35 +216,32 @@
|
|||
color: var(--link-hover-color);
|
||||
}
|
||||
|
||||
#changelist-filter #changelist-filter-clear a {
|
||||
#changelist-filter #changelist-filter-extra-actions {
|
||||
font-size: 0.8125rem;
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px solid var(--hairline-color);
|
||||
}
|
||||
|
||||
/* DATE DRILLDOWN */
|
||||
|
||||
.change-list ul.toplinks {
|
||||
display: block;
|
||||
float: left;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.change-list ul.toplinks li {
|
||||
padding: 3px 6px;
|
||||
.change-list .toplinks {
|
||||
display: flex;
|
||||
padding-bottom: 5px;
|
||||
flex-wrap: wrap;
|
||||
gap: 3px 17px;
|
||||
font-weight: bold;
|
||||
list-style-type: none;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.change-list ul.toplinks .date-back a {
|
||||
.change-list .toplinks a {
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
|
||||
.change-list .toplinks .date-back {
|
||||
color: var(--body-quiet-color);
|
||||
}
|
||||
|
||||
.change-list ul.toplinks .date-back a:focus,
|
||||
.change-list ul.toplinks .date-back a:hover {
|
||||
.change-list .toplinks .date-back:focus,
|
||||
.change-list .toplinks .date-back:hover {
|
||||
color: var(--link-hover-color);
|
||||
}
|
||||
|
||||
|
|
@ -258,16 +256,31 @@
|
|||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
#changelist table tbody tr.selected {
|
||||
/* Once the :has() pseudo-class is supported by all browsers, the tr.selected
|
||||
selector and the JS adding the class can be removed. */
|
||||
#changelist tbody tr.selected {
|
||||
background-color: var(--selected-row);
|
||||
}
|
||||
|
||||
#changelist tbody tr:has(.action-select:checked) {
|
||||
background-color: var(--selected-row);
|
||||
}
|
||||
|
||||
@media (forced-colors: active) {
|
||||
#changelist tbody tr.selected {
|
||||
background-color: SelectedItem;
|
||||
}
|
||||
#changelist tbody tr:has(.action-select:checked) {
|
||||
background-color: SelectedItem;
|
||||
}
|
||||
}
|
||||
|
||||
#changelist .actions {
|
||||
padding: 10px;
|
||||
background: var(--body-bg);
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
line-height: 24px;
|
||||
line-height: 1.5rem;
|
||||
color: var(--body-quiet-color);
|
||||
width: 100%;
|
||||
}
|
||||
|
|
@ -286,7 +299,7 @@
|
|||
|
||||
#changelist .actions select {
|
||||
vertical-align: top;
|
||||
height: 24px;
|
||||
height: 1.5rem;
|
||||
color: var(--body-fg);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
|
|
@ -313,7 +326,7 @@
|
|||
background: var(--body-bg);
|
||||
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
||||
cursor: pointer;
|
||||
height: 24px;
|
||||
height: 1.5rem;
|
||||
line-height: 1;
|
||||
padding: 4px 8px;
|
||||
margin: 0;
|
||||
|
|
|
|||
|
|
@ -31,3 +31,94 @@
|
|||
--close-button-hover-bg: #666666;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
html[data-theme="dark"] {
|
||||
--primary: #264b5d;
|
||||
--primary-fg: #f7f7f7;
|
||||
|
||||
--body-fg: #eeeeee;
|
||||
--body-bg: #121212;
|
||||
--body-quiet-color: #e0e0e0;
|
||||
--body-loud-color: #ffffff;
|
||||
|
||||
--breadcrumbs-link-fg: #e0e0e0;
|
||||
--breadcrumbs-bg: var(--primary);
|
||||
|
||||
--link-fg: #81d4fa;
|
||||
--link-hover-color: #4ac1f7;
|
||||
--link-selected-fg: #6f94c6;
|
||||
|
||||
--hairline-color: #272727;
|
||||
--border-color: #353535;
|
||||
|
||||
--error-fg: #e35f5f;
|
||||
--message-success-bg: #006b1b;
|
||||
--message-warning-bg: #583305;
|
||||
--message-error-bg: #570808;
|
||||
|
||||
--darkened-bg: #212121;
|
||||
--selected-bg: #1b1b1b;
|
||||
--selected-row: #00363a;
|
||||
|
||||
--close-button-bg: #333333;
|
||||
--close-button-hover-bg: #666666;
|
||||
}
|
||||
|
||||
/* THEME SWITCH */
|
||||
.theme-toggle {
|
||||
cursor: pointer;
|
||||
border: none;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
vertical-align: middle;
|
||||
margin-inline-start: 5px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.theme-toggle svg {
|
||||
vertical-align: middle;
|
||||
height: 1rem;
|
||||
width: 1rem;
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
Fully hide screen reader text so we only show the one matching the current
|
||||
theme.
|
||||
*/
|
||||
.theme-toggle .visually-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html[data-theme="auto"] .theme-toggle .theme-label-when-auto {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html[data-theme="dark"] .theme-toggle .theme-label-when-dark {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html[data-theme="light"] .theme-toggle .theme-label-when-light {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* ICONS */
|
||||
.theme-toggle svg.theme-icon-when-auto,
|
||||
.theme-toggle svg.theme-icon-when-dark,
|
||||
.theme-toggle svg.theme-icon-when-light {
|
||||
fill: var(--header-link-color);
|
||||
color: var(--header-bg);
|
||||
}
|
||||
|
||||
html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html[data-theme="light"] .theme-toggle svg.theme-icon-when-light {
|
||||
display: block;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
/* DASHBOARD */
|
||||
.dashboard td, .dashboard th {
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.dashboard .module table th {
|
||||
width: 100%;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,18 @@ form .form-row p {
|
|||
padding-left: 0;
|
||||
}
|
||||
|
||||
.flex-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.form-multiline {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.form-multiline > div {
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
/* FORM LABELS */
|
||||
|
||||
label {
|
||||
|
|
@ -69,7 +81,7 @@ form ul.inline li {
|
|||
.aligned label {
|
||||
display: block;
|
||||
padding: 4px 10px 0 0;
|
||||
float: left;
|
||||
min-width: 160px;
|
||||
width: 160px;
|
||||
word-wrap: break-word;
|
||||
line-height: 1;
|
||||
|
|
@ -79,14 +91,14 @@ form ul.inline li {
|
|||
content: '';
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
height: 26px;
|
||||
height: 1.625rem;
|
||||
}
|
||||
|
||||
.aligned label + p, .aligned label + div.help, .aligned label + div.readonly {
|
||||
.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly {
|
||||
padding: 6px 0;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 170px;
|
||||
margin-left: 0;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
|
|
@ -117,16 +129,17 @@ form .aligned div.radiolist {
|
|||
|
||||
form .aligned p.help,
|
||||
form .aligned div.help {
|
||||
clear: left;
|
||||
margin-top: 0;
|
||||
margin-left: 160px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
form .aligned label + p.help,
|
||||
form .aligned label + div.help {
|
||||
form .aligned p.date div.help.timezonewarning,
|
||||
form .aligned p.datetime div.help.timezonewarning,
|
||||
form .aligned p.time div.help.timezonewarning {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
form .aligned p.help:last-child,
|
||||
|
|
@ -171,14 +184,7 @@ form .aligned table p {
|
|||
width: 610px;
|
||||
}
|
||||
|
||||
.checkbox-row p.help,
|
||||
.checkbox-row div.help {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
fieldset .fieldBox {
|
||||
float: left;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
|
|
@ -189,6 +195,7 @@ fieldset .fieldBox {
|
|||
}
|
||||
|
||||
form .wide p,
|
||||
form .wide ul.errorlist,
|
||||
form .wide input + p.help,
|
||||
form .wide input + div.help {
|
||||
margin-left: 200px;
|
||||
|
|
@ -196,7 +203,7 @@ form .wide input + div.help {
|
|||
|
||||
form .wide p.help,
|
||||
form .wide div.help {
|
||||
padding-left: 38px;
|
||||
padding-left: 50px;
|
||||
}
|
||||
|
||||
form div.help ul {
|
||||
|
|
@ -242,19 +249,21 @@ fieldset.collapsed .collapse-toggle {
|
|||
/* MONOSPACE TEXTAREAS */
|
||||
|
||||
fieldset.monospace textarea {
|
||||
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
|
||||
font-family: var(--font-family-monospace);
|
||||
}
|
||||
|
||||
/* SUBMIT ROW */
|
||||
|
||||
.submit-row {
|
||||
padding: 12px 14px 7px;
|
||||
padding: 12px 14px 12px;
|
||||
margin: 0 0 20px;
|
||||
background: var(--darkened-bg);
|
||||
border: 1px solid var(--hairline-color);
|
||||
border-radius: 4px;
|
||||
text-align: right;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
body.popup .submit-row {
|
||||
|
|
@ -262,33 +271,29 @@ body.popup .submit-row {
|
|||
}
|
||||
|
||||
.submit-row input {
|
||||
height: 35px;
|
||||
line-height: 15px;
|
||||
margin: 0 0 5px 5px;
|
||||
height: 2.1875rem;
|
||||
line-height: 0.9375rem;
|
||||
}
|
||||
|
||||
.submit-row input, .submit-row a {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.submit-row input.default {
|
||||
margin: 0 0 5px 8px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.submit-row p {
|
||||
margin: 0.3em;
|
||||
}
|
||||
|
||||
.submit-row p.deletelink-box {
|
||||
float: left;
|
||||
margin: 0;
|
||||
.submit-row a.deletelink {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.submit-row a.deletelink {
|
||||
display: block;
|
||||
background: var(--delete-button-bg);
|
||||
border-radius: 4px;
|
||||
padding: 10px 15px;
|
||||
height: 15px;
|
||||
line-height: 15px;
|
||||
margin-bottom: 5px;
|
||||
padding: 0.625rem 0.9375rem;
|
||||
height: 0.9375rem;
|
||||
line-height: 0.9375rem;
|
||||
color: var(--button-fg);
|
||||
}
|
||||
|
||||
|
|
@ -297,9 +302,8 @@ body.popup .submit-row {
|
|||
background: var(--close-button-bg);
|
||||
border-radius: 4px;
|
||||
padding: 10px 15px;
|
||||
height: 15px;
|
||||
line-height: 15px;
|
||||
margin: 0 0 0 5px;
|
||||
height: 0.9375rem;
|
||||
line-height: 0.9375rem;
|
||||
color: var(--button-fg);
|
||||
}
|
||||
|
||||
|
|
@ -307,12 +311,14 @@ body.popup .submit-row {
|
|||
.submit-row a.deletelink:hover,
|
||||
.submit-row a.deletelink:active {
|
||||
background: var(--delete-button-hover-bg);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.submit-row a.closelink:focus,
|
||||
.submit-row a.closelink:hover,
|
||||
.submit-row a.closelink:active {
|
||||
background: var(--close-button-hover-bg);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* CUSTOM FORM FIELDS */
|
||||
|
|
@ -512,8 +518,8 @@ body.popup .submit-row {
|
|||
}
|
||||
|
||||
.related-lookup {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
background-image: url(../img/search.svg);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,8 +59,13 @@
|
|||
content: '\00AB';
|
||||
}
|
||||
|
||||
.main > #nav-sidebar {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.main.shifted > #nav-sidebar {
|
||||
margin-left: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
[dir="rtl"] .main.shifted > #nav-sidebar {
|
||||
|
|
@ -97,6 +102,12 @@
|
|||
background: var(--selected-row);
|
||||
}
|
||||
|
||||
@media (forced-colors: active) {
|
||||
#nav-sidebar .current-model {
|
||||
background-color: SelectedItem;
|
||||
}
|
||||
}
|
||||
|
||||
.main > #nav-sidebar + .content {
|
||||
max-width: calc(100% - 23px);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ input[type="submit"], button {
|
|||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
#branding h1 {
|
||||
#site-name {
|
||||
margin: 0 0 8px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
|
@ -104,13 +104,13 @@ input[type="submit"], button {
|
|||
}
|
||||
|
||||
#changelist-search label {
|
||||
line-height: 22px;
|
||||
line-height: 1.375rem;
|
||||
}
|
||||
|
||||
#toolbar form #searchbar {
|
||||
flex: 1 0 auto;
|
||||
width: 0;
|
||||
height: 22px;
|
||||
height: 1.375rem;
|
||||
margin: 0 10px 0 6px;
|
||||
}
|
||||
|
||||
|
|
@ -186,12 +186,12 @@ input[type="submit"], button {
|
|||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 6px 8px;
|
||||
min-height: 36px;
|
||||
min-height: 2.25rem;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.form-row select {
|
||||
height: 36px;
|
||||
height: 2.25rem;
|
||||
}
|
||||
|
||||
.form-row select[multiple] {
|
||||
|
|
@ -199,12 +199,6 @@ input[type="submit"], button {
|
|||
min-height: 0;
|
||||
}
|
||||
|
||||
fieldset .fieldBox {
|
||||
float: none;
|
||||
margin: 0 -10px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
fieldset .fieldBox + .fieldBox {
|
||||
margin-top: 10px;
|
||||
padding-top: 10px;
|
||||
|
|
@ -232,37 +226,17 @@ input[type="submit"], button {
|
|||
}
|
||||
|
||||
.submit-row {
|
||||
padding: 8px 8px 3px 8px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.submit-row a.deletelink {
|
||||
padding: 10px 7px;
|
||||
}
|
||||
|
||||
.submit-row input.default {
|
||||
margin: 0 0 5px 5px;
|
||||
}
|
||||
|
||||
.button, input[type=submit], input[type=button], .submit-row input, a.button {
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
/* Related widget */
|
||||
|
||||
.related-widget-wrapper {
|
||||
float: none;
|
||||
}
|
||||
|
||||
.related-widget-wrapper-link + .selector {
|
||||
max-width: calc(100% - 30px);
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
select + .related-widget-wrapper-link,
|
||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
/* Selector */
|
||||
|
||||
.selector {
|
||||
|
|
@ -280,7 +254,7 @@ input[type="submit"], button {
|
|||
}
|
||||
|
||||
.selector .selector-filter input {
|
||||
width: auto;
|
||||
width: 100%;
|
||||
min-height: 0;
|
||||
flex: 1 1;
|
||||
}
|
||||
|
|
@ -302,7 +276,6 @@ input[type="submit"], button {
|
|||
width: 26px;
|
||||
height: 52px;
|
||||
padding: 2px 0;
|
||||
margin: auto 15px;
|
||||
border-radius: 20px;
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
|
|
@ -346,7 +319,6 @@ input[type="submit"], button {
|
|||
width: 52px;
|
||||
height: 26px;
|
||||
padding: 0 2px;
|
||||
margin: 15px auto;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
|
|
@ -394,10 +366,6 @@ input[type="submit"], button {
|
|||
display: none;
|
||||
}
|
||||
|
||||
form .form-row p.datetime {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.datetime input {
|
||||
width: 50%;
|
||||
max-width: 120px;
|
||||
|
|
@ -446,7 +414,7 @@ input[type="submit"], button {
|
|||
padding: 15px 20px;
|
||||
}
|
||||
|
||||
.login #branding h1 {
|
||||
.login #site-name {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
|
@ -568,8 +536,6 @@ input[type="submit"], button {
|
|||
|
||||
.aligned .form-row,
|
||||
.aligned .form-row > div {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
max-width: 100vw;
|
||||
}
|
||||
|
||||
|
|
@ -577,6 +543,14 @@ input[type="submit"], button {
|
|||
width: calc(100vw - 30px);
|
||||
}
|
||||
|
||||
.flex-container {
|
||||
flex-flow: column;
|
||||
}
|
||||
|
||||
.flex-container.checkbox-row {
|
||||
flex-flow: row;
|
||||
}
|
||||
|
||||
textarea {
|
||||
max-width: none;
|
||||
}
|
||||
|
|
@ -596,6 +570,7 @@ input[type="submit"], button {
|
|||
|
||||
.aligned label {
|
||||
width: 100%;
|
||||
min-width: auto;
|
||||
padding: 0 0 10px;
|
||||
}
|
||||
|
||||
|
|
@ -610,10 +585,6 @@ input[type="submit"], button {
|
|||
max-width: 100%;
|
||||
}
|
||||
|
||||
.aligned .checkbox-row {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.aligned .checkbox-row input {
|
||||
flex: 0 1 auto;
|
||||
margin: 0;
|
||||
|
|
@ -632,7 +603,6 @@ input[type="submit"], button {
|
|||
}
|
||||
|
||||
.aligned p.file-upload {
|
||||
margin-left: 0;
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
|
||||
|
|
@ -656,7 +626,8 @@ input[type="submit"], button {
|
|||
padding: 0;
|
||||
}
|
||||
|
||||
form .aligned ul {
|
||||
form .aligned ul,
|
||||
form .aligned ul.errorlist {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
|
@ -695,23 +666,14 @@ input[type="submit"], button {
|
|||
align-self: center;
|
||||
}
|
||||
|
||||
select + .related-widget-wrapper-link,
|
||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* Selector */
|
||||
|
||||
.selector {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.selector > * {
|
||||
float: none;
|
||||
gap: 10px 0;
|
||||
}
|
||||
|
||||
.selector-available, .selector-chosen {
|
||||
margin-bottom: 0;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
|
|
@ -721,11 +683,9 @@ input[type="submit"], button {
|
|||
|
||||
.selector ul.selector-chooser {
|
||||
display: block;
|
||||
float: none;
|
||||
width: 52px;
|
||||
height: 26px;
|
||||
padding: 0 2px;
|
||||
margin: 15px auto 20px;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
|
|
@ -823,28 +783,23 @@ input[type="submit"], button {
|
|||
/* Submit row */
|
||||
|
||||
.submit-row {
|
||||
padding: 10px 10px 5px;
|
||||
padding: 10px;
|
||||
margin: 0 0 15px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.submit-row > * {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.submit-row input, .submit-row input.default, .submit-row a, .submit-row a.closelink {
|
||||
float: none;
|
||||
margin: 0 0 10px;
|
||||
.submit-row input, .submit-row input.default, .submit-row a {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.submit-row a.closelink {
|
||||
padding: 10px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.submit-row p.deletelink-box {
|
||||
order: 4;
|
||||
.submit-row a.deletelink {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Messages */
|
||||
|
|
@ -966,7 +921,7 @@ input[type="submit"], button {
|
|||
.calendar-shortcuts {
|
||||
padding: 10px 0;
|
||||
font-size: 0.75rem;
|
||||
line-height: 12px;
|
||||
line-height: 0.75rem;
|
||||
}
|
||||
|
||||
.calendar-shortcuts a {
|
||||
|
|
|
|||
|
|
@ -69,7 +69,8 @@
|
|||
margin-right: 15px;
|
||||
}
|
||||
|
||||
[dir="rtl"] .aligned ul {
|
||||
[dir="rtl"] .aligned ul,
|
||||
[dir="rtl"] form .aligned ul.errorlist {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
|
|
@ -77,4 +78,7 @@
|
|||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
[dir="rtl"] .aligned .vCheckboxLabel {
|
||||
padding: 1px 5px 0 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ th {
|
|||
margin-right: 1.5em;
|
||||
}
|
||||
|
||||
.viewlink, .addlink, .changelink {
|
||||
.viewlink, .addlink, .changelink, .hidelink {
|
||||
padding-left: 0;
|
||||
padding-right: 16px;
|
||||
background-position: 100% 1px;
|
||||
|
|
@ -107,23 +107,25 @@ thead th.sorted .text {
|
|||
border-left: none;
|
||||
}
|
||||
|
||||
.paginator .end {
|
||||
margin-left: 6px;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.paginator input {
|
||||
margin-left: 0;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* FORMS */
|
||||
|
||||
.aligned label {
|
||||
padding: 0 0 3px 1em;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.submit-row {
|
||||
text-align: left
|
||||
}
|
||||
|
||||
.submit-row p.deletelink-box {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.submit-row input.default {
|
||||
.submit-row a.deletelink {
|
||||
margin-left: 0;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.vDateField, .vTimeField {
|
||||
|
|
@ -134,13 +136,11 @@ thead th.sorted .text {
|
|||
margin-left: 5px;
|
||||
}
|
||||
|
||||
form .aligned p.help, form .aligned div.help {
|
||||
clear: right;
|
||||
}
|
||||
|
||||
form .aligned ul {
|
||||
margin-right: 163px;
|
||||
padding-right: 10px;
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
form ul.inline li {
|
||||
|
|
@ -149,12 +149,39 @@ form ul.inline li {
|
|||
padding-left: 7px;
|
||||
}
|
||||
|
||||
input[type=submit].default, .submit-row input.default {
|
||||
float: left;
|
||||
form .aligned p.help,
|
||||
form .aligned div.help {
|
||||
margin-right: 160px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
form div.help ul,
|
||||
form .aligned .checkbox-row + .help,
|
||||
form .aligned p.date div.help.timezonewarning,
|
||||
form .aligned p.datetime div.help.timezonewarning,
|
||||
form .aligned p.time div.help.timezonewarning {
|
||||
margin-right: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
form .wide p.help, form .wide div.help {
|
||||
padding-left: 0;
|
||||
padding-right: 50px;
|
||||
}
|
||||
|
||||
form .wide p,
|
||||
form .wide ul.errorlist,
|
||||
form .wide input + p.help,
|
||||
form .wide input + div.help {
|
||||
margin-right: 200px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.submit-row {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
fieldset .fieldBox {
|
||||
float: right;
|
||||
margin-left: 20px;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
|
@ -207,6 +234,38 @@ fieldset .fieldBox {
|
|||
text-align: right;
|
||||
}
|
||||
|
||||
.selector-add {
|
||||
background: url(../img/selector-icons.svg) 0 -64px no-repeat;
|
||||
}
|
||||
|
||||
.active.selector-add:focus, .active.selector-add:hover {
|
||||
background-position: 0 -80px;
|
||||
}
|
||||
|
||||
.selector-remove {
|
||||
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
||||
}
|
||||
|
||||
.active.selector-remove:focus, .active.selector-remove:hover {
|
||||
background-position: 0 -112px;
|
||||
}
|
||||
|
||||
a.selector-chooseall {
|
||||
background: url(../img/selector-icons.svg) right -128px no-repeat;
|
||||
}
|
||||
|
||||
a.active.selector-chooseall:focus, a.active.selector-chooseall:hover {
|
||||
background-position: 100% -144px;
|
||||
}
|
||||
|
||||
a.selector-clearall {
|
||||
background: url(../img/selector-icons.svg) 0 -160px no-repeat;
|
||||
}
|
||||
|
||||
a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
||||
background-position: 0 -176px;
|
||||
}
|
||||
|
||||
.inline-deletelink {
|
||||
float: left;
|
||||
}
|
||||
|
|
@ -237,3 +296,7 @@ form .form-row p.datetime {
|
|||
margin-left: inherit;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.selector .selector-chooser {
|
||||
margin: 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,27 +1,23 @@
|
|||
/* SELECTOR (FILTER INTERFACE) */
|
||||
|
||||
.selector {
|
||||
width: 800px;
|
||||
float: left;
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
gap: 0 10px;
|
||||
}
|
||||
|
||||
.selector select {
|
||||
width: 380px;
|
||||
height: 17.2em;
|
||||
flex: 1 0 auto;
|
||||
overflow: scroll;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.selector-available, .selector-chosen {
|
||||
width: 380px;
|
||||
text-align: center;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.selector-chosen select {
|
||||
border-top: none;
|
||||
flex: 1 1;
|
||||
}
|
||||
|
||||
.selector-available h2, .selector-chosen h2 {
|
||||
|
|
@ -29,9 +25,24 @@
|
|||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
|
||||
.selector-chosen h2 {
|
||||
.selector-chosen .list-footer-display {
|
||||
border: 1px solid var(--border-color);
|
||||
border-top: none;
|
||||
border-radius: 0 0 4px 4px;
|
||||
margin: 0 0 10px;
|
||||
padding: 8px;
|
||||
text-align: center;
|
||||
background: var(--primary);
|
||||
color: var(--header-link-color);
|
||||
cursor: pointer;
|
||||
}
|
||||
.selector-chosen .list-footer-display__clear {
|
||||
color: var(--breadcrumbs-fg);
|
||||
}
|
||||
|
||||
.selector-chosen h2 {
|
||||
background: var(--secondary);
|
||||
color: var(--header-link-color);
|
||||
}
|
||||
|
||||
.selector .selector-available h2 {
|
||||
|
|
@ -47,6 +58,7 @@
|
|||
font-size: 0.625rem;
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.selector .selector-filter label,
|
||||
|
|
@ -58,10 +70,15 @@
|
|||
padding: 0;
|
||||
overflow: hidden;
|
||||
line-height: 1;
|
||||
min-width: auto;
|
||||
}
|
||||
|
||||
.selector .selector-available input {
|
||||
width: 320px;
|
||||
.selector-filter input {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.selector .selector-available input,
|
||||
.selector .selector-chosen input {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
|
|
@ -70,7 +87,7 @@
|
|||
width: 22px;
|
||||
background-color: var(--selected-bg);
|
||||
border-radius: 10px;
|
||||
margin: 0 5px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
transform: translateY(-17px);
|
||||
}
|
||||
|
|
@ -86,6 +103,15 @@
|
|||
margin: 0 0 10px;
|
||||
border-radius: 0 0 4px 4px;
|
||||
}
|
||||
.selector .selector-chosen--with-filtered select {
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
height: 14em;
|
||||
}
|
||||
|
||||
.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.selector-add, .selector-remove {
|
||||
width: 16px;
|
||||
|
|
@ -125,7 +151,7 @@ a.selector-chooseall, a.selector-clearall {
|
|||
display: inline-block;
|
||||
height: 16px;
|
||||
text-align: left;
|
||||
margin: 1px auto 3px;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
font-weight: bold;
|
||||
line-height: 16px;
|
||||
|
|
@ -256,8 +282,8 @@ a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
|||
.selector .search-label-icon {
|
||||
background: url(../img/search.svg) 0 0 no-repeat;
|
||||
display: inline-block;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
height: 1.125rem;
|
||||
width: 1.125rem;
|
||||
}
|
||||
|
||||
/* DATE AND TIME */
|
||||
|
|
@ -347,10 +373,6 @@ p.file-upload {
|
|||
font-weight: bold;
|
||||
}
|
||||
|
||||
.aligned p.file-upload {
|
||||
margin-left: 170px;
|
||||
}
|
||||
|
||||
.file-upload a {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
|
@ -429,7 +451,7 @@ span.clearable-file-input label {
|
|||
}
|
||||
|
||||
.calendar td.selected a {
|
||||
background: var(--primary);
|
||||
background: var(--secondary);
|
||||
color: var(--button-fg);
|
||||
}
|
||||
|
||||
|
|
@ -477,7 +499,7 @@ span.clearable-file-input label {
|
|||
background: var(--body-bg);
|
||||
color: var(--body-quiet-color);
|
||||
font-size: 0.6875rem;
|
||||
line-height: 11px;
|
||||
line-height: 0.6875rem;
|
||||
border-top: 1px solid var(--hairline-color);
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
|
@ -516,17 +538,17 @@ span.clearable-file-input label {
|
|||
margin: 0;
|
||||
padding: 4px 0;
|
||||
font-size: 0.75rem;
|
||||
background: #eee;
|
||||
background: var(--close-button-bg);
|
||||
border-top: 1px solid var(--border-color);
|
||||
color: var(--body-fg);
|
||||
color: var(--button-fg);
|
||||
}
|
||||
|
||||
.calendar-cancel:focus, .calendar-cancel:hover {
|
||||
background: #ddd;
|
||||
background: var(--close-button-hover-bg);
|
||||
}
|
||||
|
||||
.calendar-cancel a {
|
||||
color: black;
|
||||
color: var(--button-fg);
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
|
@ -557,24 +579,25 @@ ul.timelist, .timelist li {
|
|||
|
||||
/* RELATED WIDGET WRAPPER */
|
||||
.related-widget-wrapper {
|
||||
float: left; /* display properly in form rows with multiple fields */
|
||||
overflow: hidden; /* clear floated contents */
|
||||
display: flex;
|
||||
gap: 0 10px;
|
||||
flex-grow: 1;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.related-widget-wrapper-link {
|
||||
opacity: 0.3;
|
||||
opacity: .6;
|
||||
filter: grayscale(1);
|
||||
}
|
||||
|
||||
.related-widget-wrapper-link:link {
|
||||
opacity: .8;
|
||||
}
|
||||
|
||||
.related-widget-wrapper-link:link:focus,
|
||||
.related-widget-wrapper-link:link:hover {
|
||||
opacity: 1;
|
||||
filter: grayscale(0);
|
||||
}
|
||||
|
||||
select + .related-widget-wrapper-link,
|
||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
||||
margin-left: 7px;
|
||||
/* GIS MAPS */
|
||||
.dj_map {
|
||||
width: 600px;
|
||||
height: 400px;
|
||||
}
|
||||
|
|
|
|||
3
static/admin/img/icon-hidelink.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#2b70bf" d="m555 1335 78-141q-87-63-136-159t-49-203q0-121 61-225-229 117-381 353 167 258 427 375zm389-759q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm363-191q0 7-1 9-105 188-315 566t-316 567l-49 89q-10 16-28 16-12 0-134-70-16-10-16-28 0-12 44-87-143-65-263.5-173T20 1029Q0 998 0 960t20-69q153-235 380-371t496-136q89 0 180 17l54-97q10-16 28-16 5 0 18 6t31 15.5 33 18.5 31.5 18.5T1291 358q16 10 16 27zm37 447q0 139-79 253.5T1056 1250l280-502q8 45 8 84zm448 128q0 35-20 69-39 64-109 145-150 172-347.5 267T896 1536l74-132q212-18 392.5-137T1664 960q-115-179-282-294l63-112q95 64 182.5 153T1772 891q20 34 20 69z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 784 B |
238
static/admin/jquery.ui.datepicker.jalali/default.htm
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
<!doctype html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="fa">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>تست پلاگین انتخاب تاریخ</title>
|
||||
|
||||
<link type="text/css" href="themes/base/jquery-ui.min.css" rel="stylesheet" />
|
||||
<script type="text/javascript" src="scripts/jquery-1.10.2.min.js"></script>
|
||||
<script type="text/javascript" src="scripts/jquery.ui.core.js"></script>
|
||||
<script type="text/javascript" src="scripts/jquery.ui.datepicker-cc.js"></script>
|
||||
<script type="text/javascript" src="scripts/calendar.js"></script>
|
||||
<script type="text/javascript" src="scripts/jquery.ui.datepicker-cc-fa.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
// حالت پیشفرض
|
||||
$('#datepicker0').datepicker();
|
||||
//-----------------------------------
|
||||
// نمایش شماره هفته
|
||||
$('#datepicker1').datepicker({
|
||||
showWeek: true
|
||||
});
|
||||
//-----------------------------------
|
||||
// پرکردن فیلد اضافی
|
||||
$("#datepicker2").datepicker({
|
||||
dateFormat: 'dd/mm/yy',
|
||||
altField: '#alternate2',
|
||||
altFormat: 'DD، d MM yy'
|
||||
});
|
||||
//-----------------------------------
|
||||
// نمایش دکمه ها
|
||||
$('#datepicker3').datepicker({
|
||||
showButtonPanel: true
|
||||
});
|
||||
//-----------------------------------
|
||||
// تغییر قالب نمایش تاریخ و تغییر سایز خودکار فیلد
|
||||
$("#datepicker4").datepicker({
|
||||
dateFormat: 'dd/mm/yy',
|
||||
autoSize: true
|
||||
});
|
||||
$("#format4").change(function() {
|
||||
$('#datepicker4').datepicker('option', { dateFormat: $(this).val() });
|
||||
});
|
||||
//-----------------------------------
|
||||
// استفاده از dropdown
|
||||
$('#datepicker5').datepicker({
|
||||
changeMonth: true,
|
||||
changeYear: true
|
||||
});
|
||||
//-----------------------------------
|
||||
// انتخاب با کلیک بر روی عکس
|
||||
$("#datepicker6").datepicker({
|
||||
showOn: 'button',
|
||||
buttonImage: 'styles/images/calendar.png',
|
||||
buttonImageOnly: true
|
||||
});
|
||||
//-----------------------------------
|
||||
// نمایش inline
|
||||
$('#datepicker7').datepicker();
|
||||
//-----------------------------------
|
||||
// نمایش چند ماه
|
||||
$('#datepicker8').datepicker({
|
||||
numberOfMonths: 3,
|
||||
showButtonPanel: true
|
||||
});
|
||||
//-----------------------------------
|
||||
// غیرفعال کردن روزها
|
||||
$('#datepicker9').datepicker({
|
||||
beforeShowDay: function(date) {
|
||||
if (date.getDay() == 5)
|
||||
return [false, '', 'تعطیلات آخر هفته'];
|
||||
return [true];
|
||||
}
|
||||
});
|
||||
//-----------------------------------
|
||||
// تاریخ پیشفرض
|
||||
$('#datepicker10').datepicker({
|
||||
defaultDate: new JalaliDate(1361, 4, 10) //this means "1361/05/10"
|
||||
});
|
||||
//-----------------------------------
|
||||
// تنظیم حداقل و حداکثر
|
||||
$('#datepicker11').datepicker({
|
||||
minDate: '-3d',
|
||||
maxDate: '+1w +2d'
|
||||
});
|
||||
//-----------------------------------
|
||||
// تنظیم حداقل بصورت پویا
|
||||
$('#datepicker12from').datepicker({
|
||||
onSelect: function(dateText, inst) {
|
||||
$('#datepicker12to').datepicker('option', 'minDate', new JalaliDate(inst['selectedYear'], inst['selectedMonth'], inst['selectedDay']));
|
||||
}
|
||||
});
|
||||
$('#datepicker12to').datepicker();
|
||||
//-----------------------------------
|
||||
// استفاده همزمان از تقویم میلادی
|
||||
$('#datepicker13').datepicker({
|
||||
regional: ''
|
||||
});
|
||||
//-----------------------------------
|
||||
// استفاده همزمان از تقویم هجری قمری
|
||||
$('#datepicker14').datepicker({
|
||||
regional: 'ar'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style type="text/css">
|
||||
*
|
||||
{
|
||||
font-family: Tahoma !important;
|
||||
padding:0;
|
||||
margin:0;
|
||||
border:0;
|
||||
}
|
||||
body
|
||||
{
|
||||
background-color: #0972a5;
|
||||
direction: rtl;
|
||||
font-size: 80%;
|
||||
}
|
||||
p
|
||||
{
|
||||
padding: 25px;
|
||||
margin: 25px auto;
|
||||
width: 450px;
|
||||
}
|
||||
p.ui-state-hover
|
||||
{
|
||||
font-weight: normal;
|
||||
}
|
||||
p.ui-widget-header
|
||||
{
|
||||
text-align: center;
|
||||
font-weight: normal;
|
||||
}
|
||||
strong.ui-state-error
|
||||
{
|
||||
display: block;
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<p class='ui-widget-header'>
|
||||
نمونه روشهای استفاده از پلاگین datepicker با تاریخ هجری شمسی<br />
|
||||
توسط: <a href='http://hasheminezhad.com'>مهدی هاشمی نژاد</a><br />
|
||||
ارایه نظرات و گزارش باگ: hasheminezhad at gmail dot com<br />
|
||||
بروز شده به نسخه jquery-ui-1.10.3 توسط گروه Caspico
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>حالت پیشفرض</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker0" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>نمایش شماره هفته</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker1" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>پرکردن فیلد اضافی</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker2" />
|
||||
<input type="text" id="alternate2" size="30" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>نمایش دکمه ها</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker3" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>تغییر قالب نمایش تاریخ و تغییر سایز خودکار فیلد</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker4" />
|
||||
<select id="format4" class='ui-state-highlight'>
|
||||
<option value="dd/mm/yy">کوتاه - dd/mm/yy</option>
|
||||
<option value="d MM yy">متوسط - dd MM yy</option>
|
||||
<option value="DD، d MM yy">کامل - DD, d MM, yy</option>
|
||||
<option value="yy-mm-dd">ISO 8601 - yy-mm-dd</option>
|
||||
<option value="'روز' d MM 'سال' yy">دارای متن - 'روز' d MM 'سال' yy</option>
|
||||
</select>
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>استفاده از dropdown</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker5" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>انتخاب با کلیک بر روی عکس</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker6" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>نمایش inline</strong><br />
|
||||
<span id="datepicker7"></span>
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>نمایش چند ماه</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker8" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>غیرفعال کردن روزها</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker9" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>تاریخ پیشفرض</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker10" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>تنظیم حداقل و حداکثر</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker11" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>تنظیم حداقل بصورت پویا</strong><br />
|
||||
از تاریخ:
|
||||
<input type="text" id="datepicker12from" />
|
||||
تا تاریخ:
|
||||
<input type="text" id="datepicker12to" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>استفاده همزمان از تقویم میلادی</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker13" />
|
||||
</p>
|
||||
<p class='ui-widget-content'>
|
||||
<strong class='ui-state-error'>استفاده همزمان از تقویم هجری قمری</strong><br />
|
||||
تاریخ:
|
||||
<input type="text" id="datepicker14" />
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
1419
static/admin/jquery.ui.datepicker.jalali/scripts/calendar.all.js
Normal file
131
static/admin/jquery.ui.datepicker.jalali/scripts/calendar.js
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
function mod(a, b) {return a - (b * Math.floor(a / b));}
|
||||
/*
|
||||
JavaScript functions for the Fourmilab Calendar Converter
|
||||
|
||||
by John Walker -- September, MIM
|
||||
http://www.fourmilab.ch/documents/calendar/
|
||||
|
||||
This program is in the public domain.
|
||||
*/
|
||||
function leap_gregorian(year)
|
||||
{
|
||||
return ((year % 4) == 0) &&
|
||||
(!(((year % 100) == 0) && ((year % 400) != 0)));
|
||||
}
|
||||
var GREGORIAN_EPOCH = 1721425.5;
|
||||
function gregorian_to_jd(year, month, day)
|
||||
{
|
||||
return (GREGORIAN_EPOCH - 1) +
|
||||
(365 * (year - 1)) +
|
||||
Math.floor((year - 1) / 4) +
|
||||
(-Math.floor((year - 1) / 100)) +
|
||||
Math.floor((year - 1) / 400) +
|
||||
Math.floor((((367 * month) - 362) / 12) +
|
||||
((month <= 2) ? 0 :
|
||||
(leap_gregorian(year) ? -1 : -2)
|
||||
) +
|
||||
day);
|
||||
}
|
||||
function jd_to_gregorian(jd) {
|
||||
var wjd, depoch, quadricent, dqc, cent, dcent, quad, dquad,
|
||||
yindex, dyindex, year, yearday, leapadj;
|
||||
|
||||
wjd = Math.floor(jd - 0.5) + 0.5;
|
||||
depoch = wjd - GREGORIAN_EPOCH;
|
||||
quadricent = Math.floor(depoch / 146097);
|
||||
dqc = mod(depoch, 146097);
|
||||
cent = Math.floor(dqc / 36524);
|
||||
dcent = mod(dqc, 36524);
|
||||
quad = Math.floor(dcent / 1461);
|
||||
dquad = mod(dcent, 1461);
|
||||
yindex = Math.floor(dquad / 365);
|
||||
year = (quadricent * 400) + (cent * 100) + (quad * 4) + yindex;
|
||||
if (!((cent == 4) || (yindex == 4))) {
|
||||
year++;
|
||||
}
|
||||
yearday = wjd - gregorian_to_jd(year, 1, 1);
|
||||
leapadj = ((wjd < gregorian_to_jd(year, 3, 1)) ? 0
|
||||
:
|
||||
(leap_gregorian(year) ? 1 : 2)
|
||||
);
|
||||
month = Math.floor((((yearday + leapadj) * 12) + 373) / 367);
|
||||
day = (wjd - gregorian_to_jd(year, month, 1)) + 1;
|
||||
|
||||
return new Array(year, month, day);
|
||||
}
|
||||
|
||||
function leap_islamic(year)
|
||||
{
|
||||
return (((year * 11) + 14) % 30) < 11;
|
||||
}
|
||||
var ISLAMIC_EPOCH = 1948439.5;
|
||||
function islamic_to_jd(year, month, day)
|
||||
{
|
||||
return (day +
|
||||
Math.ceil(29.5 * (month - 1)) +
|
||||
(year - 1) * 354 +
|
||||
Math.floor((3 + (11 * year)) / 30) +
|
||||
ISLAMIC_EPOCH) - 1;
|
||||
}
|
||||
function jd_to_islamic(jd)
|
||||
{
|
||||
var year, month, day;
|
||||
|
||||
jd = Math.floor(jd) + 0.5;
|
||||
year = Math.floor(((30 * (jd - ISLAMIC_EPOCH)) + 10646) / 10631);
|
||||
month = Math.min(12,
|
||||
Math.ceil((jd - (29 + islamic_to_jd(year, 1, 1))) / 29.5) + 1);
|
||||
day = (jd - islamic_to_jd(year, month, 1)) + 1;
|
||||
return new Array(year, month, day);
|
||||
}
|
||||
|
||||
function leap_persian(year)
|
||||
{
|
||||
return ((((((year - ((year > 0) ? 474 : 473)) % 2820) + 474) + 38) * 682) % 2816) < 682;
|
||||
}
|
||||
var PERSIAN_EPOCH = 1948320.5;
|
||||
function persian_to_jd(year, month, day)
|
||||
{
|
||||
var epbase, epyear;
|
||||
|
||||
epbase = year - ((year >= 0) ? 474 : 473);
|
||||
epyear = 474 + mod(epbase, 2820);
|
||||
|
||||
return day +
|
||||
((month <= 7) ?
|
||||
((month - 1) * 31) :
|
||||
(((month - 1) * 30) + 6)
|
||||
) +
|
||||
Math.floor(((epyear * 682) - 110) / 2816) +
|
||||
(epyear - 1) * 365 +
|
||||
Math.floor(epbase / 2820) * 1029983 +
|
||||
(PERSIAN_EPOCH - 1);
|
||||
}
|
||||
function jd_to_persian(jd)
|
||||
{
|
||||
var year, month, day, depoch, cycle, cyear, ycycle,
|
||||
aux1, aux2, yday;
|
||||
|
||||
|
||||
jd = Math.floor(jd) + 0.5;
|
||||
|
||||
depoch = jd - persian_to_jd(475, 1, 1);
|
||||
cycle = Math.floor(depoch / 1029983);
|
||||
cyear = mod(depoch, 1029983);
|
||||
if (cyear == 1029982) {
|
||||
ycycle = 2820;
|
||||
} else {
|
||||
aux1 = Math.floor(cyear / 366);
|
||||
aux2 = mod(cyear, 366);
|
||||
ycycle = Math.floor(((2134 * aux1) + (2816 * aux2) + 2815) / 1028522) +
|
||||
aux1 + 1;
|
||||
}
|
||||
year = ycycle + (2820 * cycle) + 474;
|
||||
if (year <= 0) {
|
||||
year--;
|
||||
}
|
||||
yday = (jd - persian_to_jd(year, 1, 1)) + 1;
|
||||
month = (yday <= 186) ? Math.ceil(yday / 31) : Math.ceil((yday - 6) / 30);
|
||||
day = (jd - persian_to_jd(year, month, 1)) + 1;
|
||||
return new Array(year, month, day);
|
||||
}
|
||||
6
static/admin/jquery.ui.datepicker.jalali/scripts/jquery-1.10.2.min.js
vendored
Normal file
320
static/admin/jquery.ui.datepicker.jalali/scripts/jquery.ui.core.js
vendored
Normal file
|
|
@ -0,0 +1,320 @@
|
|||
/*!
|
||||
* jQuery UI Core 1.10.3
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright 2013 jQuery Foundation and other contributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://api.jqueryui.com/category/ui-core/
|
||||
*/
|
||||
(function( $, undefined ) {
|
||||
|
||||
var uuid = 0,
|
||||
runiqueId = /^ui-id-\d+$/;
|
||||
|
||||
// $.ui might exist from components with no dependencies, e.g., $.ui.position
|
||||
$.ui = $.ui || {};
|
||||
|
||||
$.extend( $.ui, {
|
||||
version: "1.10.3",
|
||||
|
||||
keyCode: {
|
||||
BACKSPACE: 8,
|
||||
COMMA: 188,
|
||||
DELETE: 46,
|
||||
DOWN: 40,
|
||||
END: 35,
|
||||
ENTER: 13,
|
||||
ESCAPE: 27,
|
||||
HOME: 36,
|
||||
LEFT: 37,
|
||||
NUMPAD_ADD: 107,
|
||||
NUMPAD_DECIMAL: 110,
|
||||
NUMPAD_DIVIDE: 111,
|
||||
NUMPAD_ENTER: 108,
|
||||
NUMPAD_MULTIPLY: 106,
|
||||
NUMPAD_SUBTRACT: 109,
|
||||
PAGE_DOWN: 34,
|
||||
PAGE_UP: 33,
|
||||
PERIOD: 190,
|
||||
RIGHT: 39,
|
||||
SPACE: 32,
|
||||
TAB: 9,
|
||||
UP: 38
|
||||
}
|
||||
});
|
||||
|
||||
// plugins
|
||||
$.fn.extend({
|
||||
focus: (function( orig ) {
|
||||
return function( delay, fn ) {
|
||||
return typeof delay === "number" ?
|
||||
this.each(function() {
|
||||
var elem = this;
|
||||
setTimeout(function() {
|
||||
$( elem ).focus();
|
||||
if ( fn ) {
|
||||
fn.call( elem );
|
||||
}
|
||||
}, delay );
|
||||
}) :
|
||||
orig.apply( this, arguments );
|
||||
};
|
||||
})( $.fn.focus ),
|
||||
|
||||
scrollParent: function() {
|
||||
var scrollParent;
|
||||
if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
|
||||
scrollParent = this.parents().filter(function() {
|
||||
return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
|
||||
}).eq(0);
|
||||
} else {
|
||||
scrollParent = this.parents().filter(function() {
|
||||
return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
|
||||
}).eq(0);
|
||||
}
|
||||
|
||||
return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
|
||||
},
|
||||
|
||||
zIndex: function( zIndex ) {
|
||||
if ( zIndex !== undefined ) {
|
||||
return this.css( "zIndex", zIndex );
|
||||
}
|
||||
|
||||
if ( this.length ) {
|
||||
var elem = $( this[ 0 ] ), position, value;
|
||||
while ( elem.length && elem[ 0 ] !== document ) {
|
||||
// Ignore z-index if position is set to a value where z-index is ignored by the browser
|
||||
// This makes behavior of this function consistent across browsers
|
||||
// WebKit always returns auto if the element is positioned
|
||||
position = elem.css( "position" );
|
||||
if ( position === "absolute" || position === "relative" || position === "fixed" ) {
|
||||
// IE returns 0 when zIndex is not specified
|
||||
// other browsers return a string
|
||||
// we ignore the case of nested elements with an explicit value of 0
|
||||
// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
|
||||
value = parseInt( elem.css( "zIndex" ), 10 );
|
||||
if ( !isNaN( value ) && value !== 0 ) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
elem = elem.parent();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
},
|
||||
|
||||
uniqueId: function() {
|
||||
return this.each(function() {
|
||||
if ( !this.id ) {
|
||||
this.id = "ui-id-" + (++uuid);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
removeUniqueId: function() {
|
||||
return this.each(function() {
|
||||
if ( runiqueId.test( this.id ) ) {
|
||||
$( this ).removeAttr( "id" );
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// selectors
|
||||
function focusable( element, isTabIndexNotNaN ) {
|
||||
var map, mapName, img,
|
||||
nodeName = element.nodeName.toLowerCase();
|
||||
if ( "area" === nodeName ) {
|
||||
map = element.parentNode;
|
||||
mapName = map.name;
|
||||
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
|
||||
return false;
|
||||
}
|
||||
img = $( "img[usemap=#" + mapName + "]" )[0];
|
||||
return !!img && visible( img );
|
||||
}
|
||||
return ( /input|select|textarea|button|object/.test( nodeName ) ?
|
||||
!element.disabled :
|
||||
"a" === nodeName ?
|
||||
element.href || isTabIndexNotNaN :
|
||||
isTabIndexNotNaN) &&
|
||||
// the element and all of its ancestors must be visible
|
||||
visible( element );
|
||||
}
|
||||
|
||||
function visible( element ) {
|
||||
return $.expr.filters.visible( element ) &&
|
||||
!$( element ).parents().addBack().filter(function() {
|
||||
return $.css( this, "visibility" ) === "hidden";
|
||||
}).length;
|
||||
}
|
||||
|
||||
$.extend( $.expr[ ":" ], {
|
||||
data: $.expr.createPseudo ?
|
||||
$.expr.createPseudo(function( dataName ) {
|
||||
return function( elem ) {
|
||||
return !!$.data( elem, dataName );
|
||||
};
|
||||
}) :
|
||||
// support: jQuery <1.8
|
||||
function( elem, i, match ) {
|
||||
return !!$.data( elem, match[ 3 ] );
|
||||
},
|
||||
|
||||
focusable: function( element ) {
|
||||
return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
|
||||
},
|
||||
|
||||
tabbable: function( element ) {
|
||||
var tabIndex = $.attr( element, "tabindex" ),
|
||||
isTabIndexNaN = isNaN( tabIndex );
|
||||
return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
|
||||
}
|
||||
});
|
||||
|
||||
// support: jQuery <1.8
|
||||
if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
|
||||
$.each( [ "Width", "Height" ], function( i, name ) {
|
||||
var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
|
||||
type = name.toLowerCase(),
|
||||
orig = {
|
||||
innerWidth: $.fn.innerWidth,
|
||||
innerHeight: $.fn.innerHeight,
|
||||
outerWidth: $.fn.outerWidth,
|
||||
outerHeight: $.fn.outerHeight
|
||||
};
|
||||
|
||||
function reduce( elem, size, border, margin ) {
|
||||
$.each( side, function() {
|
||||
size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
|
||||
if ( border ) {
|
||||
size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
|
||||
}
|
||||
if ( margin ) {
|
||||
size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
|
||||
}
|
||||
});
|
||||
return size;
|
||||
}
|
||||
|
||||
$.fn[ "inner" + name ] = function( size ) {
|
||||
if ( size === undefined ) {
|
||||
return orig[ "inner" + name ].call( this );
|
||||
}
|
||||
|
||||
return this.each(function() {
|
||||
$( this ).css( type, reduce( this, size ) + "px" );
|
||||
});
|
||||
};
|
||||
|
||||
$.fn[ "outer" + name] = function( size, margin ) {
|
||||
if ( typeof size !== "number" ) {
|
||||
return orig[ "outer" + name ].call( this, size );
|
||||
}
|
||||
|
||||
return this.each(function() {
|
||||
$( this).css( type, reduce( this, size, true, margin ) + "px" );
|
||||
});
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
// support: jQuery <1.8
|
||||
if ( !$.fn.addBack ) {
|
||||
$.fn.addBack = function( selector ) {
|
||||
return this.add( selector == null ?
|
||||
this.prevObject : this.prevObject.filter( selector )
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
|
||||
if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
|
||||
$.fn.removeData = (function( removeData ) {
|
||||
return function( key ) {
|
||||
if ( arguments.length ) {
|
||||
return removeData.call( this, $.camelCase( key ) );
|
||||
} else {
|
||||
return removeData.call( this );
|
||||
}
|
||||
};
|
||||
})( $.fn.removeData );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// deprecated
|
||||
$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
|
||||
|
||||
$.support.selectstart = "onselectstart" in document.createElement( "div" );
|
||||
$.fn.extend({
|
||||
disableSelection: function() {
|
||||
return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
|
||||
".ui-disableSelection", function( event ) {
|
||||
event.preventDefault();
|
||||
});
|
||||
},
|
||||
|
||||
enableSelection: function() {
|
||||
return this.unbind( ".ui-disableSelection" );
|
||||
}
|
||||
});
|
||||
|
||||
$.extend( $.ui, {
|
||||
// $.ui.plugin is deprecated. Use $.widget() extensions instead.
|
||||
plugin: {
|
||||
add: function( module, option, set ) {
|
||||
var i,
|
||||
proto = $.ui[ module ].prototype;
|
||||
for ( i in set ) {
|
||||
proto.plugins[ i ] = proto.plugins[ i ] || [];
|
||||
proto.plugins[ i ].push( [ option, set[ i ] ] );
|
||||
}
|
||||
},
|
||||
call: function( instance, name, args ) {
|
||||
var i,
|
||||
set = instance.plugins[ name ];
|
||||
if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
for ( i = 0; i < set.length; i++ ) {
|
||||
if ( instance.options[ set[ i ][ 0 ] ] ) {
|
||||
set[ i ][ 1 ].apply( instance.element, args );
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// only used by resizable
|
||||
hasScroll: function( el, a ) {
|
||||
|
||||
//If overflow is hidden, the element might have extra content, but the user wants to hide it
|
||||
if ( $( el ).css( "overflow" ) === "hidden") {
|
||||
return false;
|
||||
}
|
||||
|
||||
var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
|
||||
has = false;
|
||||
|
||||
if ( el[ scroll ] > 0 ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: determine which cases actually cause this to happen
|
||||
// if the element doesn't have the scroll set, see if it's possible to
|
||||
// set the scroll
|
||||
el[ scroll ] = 1;
|
||||
has = ( el[ scroll ] > 0 );
|
||||
el[ scroll ] = 0;
|
||||
return has;
|
||||
}
|
||||
});
|
||||
|
||||
})( jQuery );
|
||||
103
static/admin/jquery.ui.datepicker.jalali/scripts/jquery.ui.datepicker-cc-fa.js
vendored
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
// Mahdi Hasheminezhad. email: hasheminezhad at gmail dot com (http://hasheminezhad.com)
|
||||
jQuery(function($){
|
||||
$.datepicker.regional['fa'] = {
|
||||
calendar: JalaliDate,
|
||||
closeText: 'بستن',
|
||||
prevText: 'قبل',
|
||||
nextText: 'بعد',
|
||||
currentText: 'امروز',
|
||||
monthNames: ['فروردین','اردیبهشت','خرداد','تیر','مرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند'],
|
||||
monthNamesShort: ['فروردین','اردیبهشت','خرداد','تیر','مرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند'],
|
||||
dayNames: ['یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'],
|
||||
dayNamesShort: ['یک', 'دو', 'سه', 'چهار', 'پنج', 'جمعه', 'شنبه'],
|
||||
dayNamesMin: ['ی','د','س','چ','پ','ج','ش'],
|
||||
weekHeader: 'ه',
|
||||
dateFormat: 'dd/mm/yy',
|
||||
firstDay: 6,
|
||||
isRTL: true,
|
||||
showMonthAfterYear: false,
|
||||
yearSuffix: '',
|
||||
calculateWeek: function(date) {
|
||||
var checkDate = new JalaliDate(date.getFullYear(), date.getMonth(), date.getDate() + (date.getDay() || 7) - 3);
|
||||
return Math.floor(Math.round((checkDate.getTime() - new JalaliDate(checkDate.getFullYear(), 0, 1).getTime()) / 86400000) / 7) + 1;
|
||||
}};
|
||||
$.datepicker.setDefaults($.datepicker.regional['fa']);
|
||||
});
|
||||
|
||||
function JalaliDate(p0, p1, p2) {
|
||||
var gregorianDate;
|
||||
var jalaliDate;
|
||||
|
||||
if (!isNaN(parseInt(p0)) && !isNaN(parseInt(p1)) && !isNaN(parseInt(p2))) {
|
||||
var g = jalali_to_gregorian([parseInt(p0, 10), parseInt(p1, 10), parseInt(p2, 10)]);
|
||||
setFullDate(new Date(g[0], g[1], g[2]));
|
||||
} else {
|
||||
setFullDate(p0);
|
||||
};
|
||||
|
||||
function jalali_to_gregorian(d) {
|
||||
var adjustDay = 0;
|
||||
if(d[1]<0){
|
||||
adjustDay = leap_persian(d[0]-1)? 30: 29;
|
||||
d[1]++;
|
||||
}
|
||||
var gregorian = jd_to_gregorian(persian_to_jd(d[0], d[1] + 1, d[2])-adjustDay);
|
||||
gregorian[1]--;
|
||||
return gregorian;
|
||||
};
|
||||
|
||||
function gregorian_to_jalali(d) {
|
||||
var jalali = jd_to_persian(gregorian_to_jd(d[0], d[1] + 1, d[2]));
|
||||
jalali[1]--;
|
||||
return jalali;
|
||||
};
|
||||
|
||||
function setFullDate(date) {
|
||||
if (date && date.getGregorianDate) date = date.getGregorianDate();
|
||||
gregorianDate = new Date(date);
|
||||
gregorianDate.setHours(gregorianDate.getHours() > 12 ? gregorianDate.getHours() + 2 : 0)
|
||||
if (!gregorianDate || gregorianDate == 'Invalid Date' || isNaN(gregorianDate || !gregorianDate.getDate())) {
|
||||
gregorianDate = new Date();
|
||||
}
|
||||
jalaliDate = gregorian_to_jalali([
|
||||
gregorianDate.getFullYear(),
|
||||
gregorianDate.getMonth(),
|
||||
gregorianDate.getDate()]);
|
||||
return this;
|
||||
};
|
||||
|
||||
this.getGregorianDate = function() { return gregorianDate; }
|
||||
|
||||
this.setFullDate = setFullDate;
|
||||
|
||||
this.setMonth = function(e) {
|
||||
jalaliDate[1] = e;
|
||||
var g = jalali_to_gregorian(jalaliDate);
|
||||
gregorianDate = new Date(g[0], g[1], g[2]);
|
||||
jalaliDate = gregorian_to_jalali([g[0], g[1], g[2]]);
|
||||
};
|
||||
|
||||
this.setDate = function(e) {
|
||||
jalaliDate[2] = e;
|
||||
var g = jalali_to_gregorian(jalaliDate);
|
||||
gregorianDate = new Date(g[0], g[1], g[2]);
|
||||
jalaliDate = gregorian_to_jalali([g[0], g[1], g[2]]);
|
||||
};
|
||||
|
||||
this.getFullYear = function() { return jalaliDate[0]; };
|
||||
this.getMonth = function() { return jalaliDate[1]; };
|
||||
this.getDate = function() { return jalaliDate[2]; };
|
||||
this.toString = function() { return jalaliDate.join(',').toString(); };
|
||||
this.getDay = function() { return gregorianDate.getDay(); };
|
||||
this.getHours = function() { return gregorianDate.getHours(); };
|
||||
this.getMinutes = function() { return gregorianDate.getMinutes(); };
|
||||
this.getSeconds = function() { return gregorianDate.getSeconds(); };
|
||||
this.getTime = function() { return gregorianDate.getTime(); };
|
||||
this.getTimeZoneOffset = function() { return gregorianDate.getTimeZoneOffset(); };
|
||||
this.getYear = function() { return jalaliDate[0] % 100; };
|
||||
|
||||
this.setHours = function(e) { gregorianDate.setHours(e) };
|
||||
this.setMinutes = function(e) { gregorianDate.setMinutes(e) };
|
||||
this.setSeconds = function(e) { gregorianDate.setSeconds(e) };
|
||||
this.setMilliseconds = function(e) { gregorianDate.setMilliseconds(e) };
|
||||
};
|
||||
2069
static/admin/jquery.ui.datepicker.jalali/scripts/jquery.ui.datepicker-cc.js
vendored
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
7
static/admin/jquery.ui.datepicker.jalali/themes/base/jquery-ui.min.css
vendored
Normal file
|
|
@ -41,6 +41,10 @@
|
|||
}
|
||||
SelectBox.redisplay(id);
|
||||
},
|
||||
get_hidden_node_count(id) {
|
||||
const cache = SelectBox.cache[id] || [];
|
||||
return cache.filter(node => node.displayed === 0).length;
|
||||
},
|
||||
delete_from_cache: function(id, value) {
|
||||
let delete_index = null;
|
||||
const cache = SelectBox.cache[id];
|
||||
|
|
|
|||
|
|
@ -30,6 +30,9 @@ Requires core.js and SelectBox.js.
|
|||
|
||||
// <div class="selector"> or <div class="selector stacked">
|
||||
const selector_div = quickElement('div', from_box.parentNode);
|
||||
// Make sure the selector div is at the beginning so that the
|
||||
// add link would be displayed to the right of the widget.
|
||||
from_box.parentNode.prepend(selector_div);
|
||||
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
|
||||
|
||||
// <div class="selector-available">
|
||||
|
|
@ -78,7 +81,7 @@ Requires core.js and SelectBox.js.
|
|||
remove_link.className = 'selector-remove';
|
||||
|
||||
// <div class="selector-chosen">
|
||||
const selector_chosen = quickElement('div', selector_div);
|
||||
const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen');
|
||||
selector_chosen.className = 'selector-chosen';
|
||||
const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name]));
|
||||
quickElement(
|
||||
|
|
@ -93,9 +96,30 @@ Requires core.js and SelectBox.js.
|
|||
[field_name]
|
||||
)
|
||||
);
|
||||
|
||||
const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected');
|
||||
filter_selected_p.className = 'selector-filter';
|
||||
|
||||
const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input');
|
||||
|
||||
quickElement(
|
||||
'span', search_filter_selected_label, '',
|
||||
'class', 'help-tooltip search-label-icon',
|
||||
'title', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name])
|
||||
);
|
||||
|
||||
filter_selected_p.appendChild(document.createTextNode(' '));
|
||||
|
||||
const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter"));
|
||||
filter_selected_input.id = field_id + '_selected_input';
|
||||
|
||||
const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name);
|
||||
to_box.className = 'filtered';
|
||||
|
||||
const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display');
|
||||
quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text');
|
||||
quickElement('span', warning_footer, ' (click to clear)', 'class', 'list-footer-display__clear');
|
||||
|
||||
const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link');
|
||||
clear_all.className = 'selector-clearall';
|
||||
|
||||
|
|
@ -106,6 +130,8 @@ Requires core.js and SelectBox.js.
|
|||
if (elem.classList.contains('active')) {
|
||||
move_func(from, to);
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
SelectFilter.refresh_filtered_selects(field_id);
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
}
|
||||
e.preventDefault();
|
||||
};
|
||||
|
|
@ -121,14 +147,29 @@ Requires core.js and SelectBox.js.
|
|||
clear_all.addEventListener('click', function(e) {
|
||||
move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from');
|
||||
});
|
||||
warning_footer.addEventListener('click', function(e) {
|
||||
filter_selected_input.value = '';
|
||||
SelectBox.filter(field_id + '_to', '');
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
});
|
||||
filter_input.addEventListener('keypress', function(e) {
|
||||
SelectFilter.filter_key_press(e, field_id);
|
||||
SelectFilter.filter_key_press(e, field_id, '_from', '_to');
|
||||
});
|
||||
filter_input.addEventListener('keyup', function(e) {
|
||||
SelectFilter.filter_key_up(e, field_id);
|
||||
SelectFilter.filter_key_up(e, field_id, '_from');
|
||||
});
|
||||
filter_input.addEventListener('keydown', function(e) {
|
||||
SelectFilter.filter_key_down(e, field_id);
|
||||
SelectFilter.filter_key_down(e, field_id, '_from', '_to');
|
||||
});
|
||||
filter_selected_input.addEventListener('keypress', function(e) {
|
||||
SelectFilter.filter_key_press(e, field_id, '_to', '_from');
|
||||
});
|
||||
filter_selected_input.addEventListener('keyup', function(e) {
|
||||
SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input');
|
||||
});
|
||||
filter_selected_input.addEventListener('keydown', function(e) {
|
||||
SelectFilter.filter_key_down(e, field_id, '_to', '_from');
|
||||
});
|
||||
selector_div.addEventListener('change', function(e) {
|
||||
if (e.target.tagName === 'SELECT') {
|
||||
|
|
@ -146,6 +187,7 @@ Requires core.js and SelectBox.js.
|
|||
}
|
||||
});
|
||||
from_box.closest('form').addEventListener('submit', function() {
|
||||
SelectBox.filter(field_id + '_to', '');
|
||||
SelectBox.select_all(field_id + '_to');
|
||||
});
|
||||
SelectBox.init(field_id + '_from');
|
||||
|
|
@ -163,6 +205,24 @@ Requires core.js and SelectBox.js.
|
|||
field.required = false;
|
||||
return any_selected;
|
||||
},
|
||||
refresh_filtered_warning: function(field_id) {
|
||||
const count = SelectBox.get_hidden_node_count(field_id + '_to');
|
||||
const selector = document.getElementById(field_id + '_selector_chosen');
|
||||
const warning = document.getElementById(field_id + '_list-footer-display-text');
|
||||
selector.className = selector.className.replace('selector-chosen--with-filtered', '');
|
||||
warning.textContent = interpolate(ngettext(
|
||||
'%s selected option not visible',
|
||||
'%s selected options not visible',
|
||||
count
|
||||
), [count]);
|
||||
if(count > 0) {
|
||||
selector.className += ' selector-chosen--with-filtered';
|
||||
}
|
||||
},
|
||||
refresh_filtered_selects: function(field_id) {
|
||||
SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value);
|
||||
SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value);
|
||||
},
|
||||
refresh_icons: function(field_id) {
|
||||
const from = document.getElementById(field_id + '_from');
|
||||
const to = document.getElementById(field_id + '_to');
|
||||
|
|
@ -172,39 +232,47 @@ Requires core.js and SelectBox.js.
|
|||
// Active if the corresponding box isn't empty
|
||||
document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option'));
|
||||
document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option'));
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
},
|
||||
filter_key_press: function(event, field_id) {
|
||||
const from = document.getElementById(field_id + '_from');
|
||||
filter_key_press: function(event, field_id, source, target) {
|
||||
const source_box = document.getElementById(field_id + source);
|
||||
// don't submit form if user pressed Enter
|
||||
if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) {
|
||||
from.selectedIndex = 0;
|
||||
SelectBox.move(field_id + '_from', field_id + '_to');
|
||||
from.selectedIndex = 0;
|
||||
source_box.selectedIndex = 0;
|
||||
SelectBox.move(field_id + source, field_id + target);
|
||||
source_box.selectedIndex = 0;
|
||||
event.preventDefault();
|
||||
}
|
||||
},
|
||||
filter_key_up: function(event, field_id) {
|
||||
const from = document.getElementById(field_id + '_from');
|
||||
const temp = from.selectedIndex;
|
||||
SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value);
|
||||
from.selectedIndex = temp;
|
||||
filter_key_up: function(event, field_id, source, filter_input) {
|
||||
const input = filter_input || '_input';
|
||||
const source_box = document.getElementById(field_id + source);
|
||||
const temp = source_box.selectedIndex;
|
||||
SelectBox.filter(field_id + source, document.getElementById(field_id + input).value);
|
||||
source_box.selectedIndex = temp;
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
SelectFilter.refresh_icons(field_id);
|
||||
},
|
||||
filter_key_down: function(event, field_id) {
|
||||
const from = document.getElementById(field_id + '_from');
|
||||
filter_key_down: function(event, field_id, source, target) {
|
||||
const source_box = document.getElementById(field_id + source);
|
||||
// right key (39) or left key (37)
|
||||
const direction = source === '_from' ? 39 : 37;
|
||||
// right arrow -- move across
|
||||
if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) {
|
||||
const old_index = from.selectedIndex;
|
||||
SelectBox.move(field_id + '_from', field_id + '_to');
|
||||
from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index;
|
||||
if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) {
|
||||
const old_index = source_box.selectedIndex;
|
||||
SelectBox.move(field_id + source, field_id + target);
|
||||
SelectFilter.refresh_filtered_selects(field_id);
|
||||
SelectFilter.refresh_filtered_warning(field_id);
|
||||
source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index;
|
||||
return;
|
||||
}
|
||||
// down arrow -- wrap around
|
||||
if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) {
|
||||
from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1;
|
||||
source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1;
|
||||
}
|
||||
// up arrow -- wrap around
|
||||
if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) {
|
||||
from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1;
|
||||
source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -179,6 +179,9 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
// Sync counter when navigating to the page, such as through the back
|
||||
// button.
|
||||
window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options));
|
||||
};
|
||||
|
||||
// Call function fn when the DOM is loaded and ready. If it is already
|
||||
|
|
|
|||
|
|
@ -90,10 +90,9 @@
|
|||
}
|
||||
message = interpolate(message, [timezoneOffset]);
|
||||
|
||||
const warning = document.createElement('span');
|
||||
warning.className = warningClass;
|
||||
const warning = document.createElement('div');
|
||||
warning.classList.add('help', warningClass);
|
||||
warning.textContent = message;
|
||||
inp.parentNode.appendChild(document.createElement('br'));
|
||||
inp.parentNode.appendChild(warning);
|
||||
},
|
||||
// Add clock widget to a given field
|
||||
|
|
|
|||
|
|
@ -26,13 +26,11 @@
|
|||
}
|
||||
|
||||
function addPopupIndex(name) {
|
||||
name = name + "__" + (popupIndex + 1);
|
||||
return name;
|
||||
return name + "__" + (popupIndex + 1);
|
||||
}
|
||||
|
||||
function removePopupIndex(name) {
|
||||
name = name.replace(new RegExp("__" + (popupIndex + 1) + "$"), '');
|
||||
return name;
|
||||
return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), '');
|
||||
}
|
||||
|
||||
function showAdminPopup(triggeringLink, name_regexp, add_popup) {
|
||||
|
|
@ -81,9 +79,11 @@
|
|||
siblings.each(function() {
|
||||
const elm = $(this);
|
||||
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
|
||||
elm.removeAttr('aria-disabled');
|
||||
});
|
||||
} else {
|
||||
siblings.removeAttr('href');
|
||||
siblings.attr('aria-disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -96,7 +96,8 @@
|
|||
// Extract the model from the popup url '.../<model>/add/' or
|
||||
// '.../<model>/<id>/change/' depending the action (add or change).
|
||||
const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)];
|
||||
const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] select`);
|
||||
// Exclude autocomplete selects.
|
||||
const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] select:not(.admin-autocomplete)`);
|
||||
|
||||
selectsRelated.forEach(function(select) {
|
||||
if (currentSelect === select) {
|
||||
|
|
|
|||
|
|
@ -36,6 +36,24 @@ depends on core.js for utility functions like removeChildren or quickElement
|
|||
pgettext('abbrev. month December', 'Dec')
|
||||
],
|
||||
daysOfWeek: [
|
||||
gettext('Sunday'),
|
||||
gettext('Monday'),
|
||||
gettext('Tuesday'),
|
||||
gettext('Wednesday'),
|
||||
gettext('Thursday'),
|
||||
gettext('Friday'),
|
||||
gettext('Saturday')
|
||||
],
|
||||
daysOfWeekAbbrev: [
|
||||
pgettext('abbrev. day Sunday', 'Sun'),
|
||||
pgettext('abbrev. day Monday', 'Mon'),
|
||||
pgettext('abbrev. day Tuesday', 'Tue'),
|
||||
pgettext('abbrev. day Wednesday', 'Wed'),
|
||||
pgettext('abbrev. day Thursday', 'Thur'),
|
||||
pgettext('abbrev. day Friday', 'Fri'),
|
||||
pgettext('abbrev. day Saturday', 'Sat')
|
||||
],
|
||||
daysOfWeekInitial: [
|
||||
pgettext('one letter Sunday', 'S'),
|
||||
pgettext('one letter Monday', 'M'),
|
||||
pgettext('one letter Tuesday', 'T'),
|
||||
|
|
@ -98,7 +116,7 @@ depends on core.js for utility functions like removeChildren or quickElement
|
|||
// Draw days-of-week header
|
||||
let tableRow = quickElement('tr', tableBody);
|
||||
for (let i = 0; i < 7; i++) {
|
||||
quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]);
|
||||
quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]);
|
||||
}
|
||||
|
||||
const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
|
||||
|
|
|
|||
|
|
@ -1,23 +1,9 @@
|
|||
/*global gettext*/
|
||||
'use strict';
|
||||
{
|
||||
const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];
|
||||
const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName;
|
||||
let submitted = false;
|
||||
|
||||
if (modelName) {
|
||||
const form = document.getElementById(modelName + '_form');
|
||||
|
||||
form.addEventListener('submit', (event) => {
|
||||
event.preventDefault();
|
||||
if (submitted) {
|
||||
const answer = window.confirm(gettext('You have already submitted this form. Are you sure you want to submit it again?'));
|
||||
if (!answer) {return;}
|
||||
};
|
||||
event.target.submit();
|
||||
submitted = true;
|
||||
});
|
||||
|
||||
for (const element of form.elements) {
|
||||
// HTMLElement.offsetParent returns null when the element is not
|
||||
// rendered.
|
||||
|
|
|
|||
|
|
@ -85,6 +85,18 @@ function findPosY(obj) {
|
|||
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
|
||||
};
|
||||
|
||||
Date.prototype.getAbbrevDayName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? '0' + this.getDay()
|
||||
: window.CalendarNamespace.daysOfWeekAbbrev[this.getDay()];
|
||||
};
|
||||
|
||||
Date.prototype.getFullDayName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? '0' + this.getDay()
|
||||
: window.CalendarNamespace.daysOfWeek[this.getDay()];
|
||||
};
|
||||
|
||||
Date.prototype.getAbbrevMonthName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? this.getTwoDigitMonth()
|
||||
|
|
@ -99,6 +111,8 @@ function findPosY(obj) {
|
|||
|
||||
Date.prototype.strftime = function(format) {
|
||||
const fields = {
|
||||
a: this.getAbbrevDayName(),
|
||||
A: this.getFullDayName(),
|
||||
b: this.getAbbrevMonthName(),
|
||||
B: this.getFullMonthName(),
|
||||
c: this.toString(),
|
||||
|
|
@ -119,11 +133,11 @@ function findPosY(obj) {
|
|||
let result = '', i = 0;
|
||||
while (i < format.length) {
|
||||
if (format.charAt(i) === '%') {
|
||||
result = result + fields[format.charAt(i + 1)];
|
||||
result += fields[format.charAt(i + 1)];
|
||||
++i;
|
||||
}
|
||||
else {
|
||||
result = result + format.charAt(i);
|
||||
result += format.charAt(i);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
|
|
|
|||
8095
static/admin/js/django_jalali..js
Normal file
5
static/admin/js/django_jalali.min.js
vendored
Normal file
|
|
@ -11,7 +11,7 @@
|
|||
}
|
||||
|
||||
Object.entries(filters).forEach(([key, value]) => {
|
||||
const detailElement = document.querySelector(`[data-filter-title='${key}']`);
|
||||
const detailElement = document.querySelector(`[data-filter-title='${CSS.escape(key)}']`);
|
||||
|
||||
// Check if the filter is present, it could be from other view.
|
||||
if (detailElement) {
|
||||
|
|
|
|||
16
static/admin/js/main.js
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
/**
|
||||
* Created by arman on 7/24/16.
|
||||
*/
|
||||
$(document).ready(function () {
|
||||
let JQ = jQuery || {};
|
||||
if (typeof django !== 'undefined') {
|
||||
JQ = django.jQuery;
|
||||
}
|
||||
|
||||
JQ(".jalali_date-date").datepicker({
|
||||
dateFormat: "yy-mm-dd",
|
||||
changeMonth: !0,
|
||||
changeYear: !0,
|
||||
yearRange: "c-70:c+10"
|
||||
})
|
||||
});
|
||||
|
|
@ -2,47 +2,24 @@
|
|||
{
|
||||
const toggleNavSidebar = document.getElementById('toggle-nav-sidebar');
|
||||
if (toggleNavSidebar !== null) {
|
||||
const navLinks = document.querySelectorAll('#nav-sidebar a');
|
||||
function disableNavLinkTabbing() {
|
||||
for (const navLink of navLinks) {
|
||||
navLink.tabIndex = -1;
|
||||
}
|
||||
}
|
||||
function enableNavLinkTabbing() {
|
||||
for (const navLink of navLinks) {
|
||||
navLink.tabIndex = 0;
|
||||
}
|
||||
}
|
||||
function disableNavFilterTabbing() {
|
||||
document.getElementById('nav-filter').tabIndex = -1;
|
||||
}
|
||||
function enableNavFilterTabbing() {
|
||||
document.getElementById('nav-filter').tabIndex = 0;
|
||||
}
|
||||
|
||||
const navSidebar = document.getElementById('nav-sidebar');
|
||||
const main = document.getElementById('main');
|
||||
let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen');
|
||||
if (navSidebarIsOpen === null) {
|
||||
navSidebarIsOpen = 'true';
|
||||
}
|
||||
if (navSidebarIsOpen === 'false') {
|
||||
disableNavLinkTabbing();
|
||||
disableNavFilterTabbing();
|
||||
}
|
||||
main.classList.toggle('shifted', navSidebarIsOpen === 'true');
|
||||
navSidebar.setAttribute('aria-expanded', navSidebarIsOpen);
|
||||
|
||||
toggleNavSidebar.addEventListener('click', function() {
|
||||
if (navSidebarIsOpen === 'true') {
|
||||
navSidebarIsOpen = 'false';
|
||||
disableNavLinkTabbing();
|
||||
disableNavFilterTabbing();
|
||||
} else {
|
||||
navSidebarIsOpen = 'true';
|
||||
enableNavLinkTabbing();
|
||||
enableNavFilterTabbing();
|
||||
}
|
||||
localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen);
|
||||
main.classList.toggle('shifted');
|
||||
navSidebar.setAttribute('aria-expanded', navSidebarIsOpen);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
56
static/admin/js/theme.js
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
'use strict';
|
||||
{
|
||||
window.addEventListener('load', function(e) {
|
||||
|
||||
function setTheme(mode) {
|
||||
if (mode !== "light" && mode !== "dark" && mode !== "auto") {
|
||||
console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);
|
||||
mode = "auto";
|
||||
}
|
||||
document.documentElement.dataset.theme = mode;
|
||||
localStorage.setItem("theme", mode);
|
||||
}
|
||||
|
||||
function cycleTheme() {
|
||||
const currentTheme = localStorage.getItem("theme") || "auto";
|
||||
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
||||
|
||||
if (prefersDark) {
|
||||
// Auto (dark) -> Light -> Dark
|
||||
if (currentTheme === "auto") {
|
||||
setTheme("light");
|
||||
} else if (currentTheme === "light") {
|
||||
setTheme("dark");
|
||||
} else {
|
||||
setTheme("auto");
|
||||
}
|
||||
} else {
|
||||
// Auto (light) -> Dark -> Light
|
||||
if (currentTheme === "auto") {
|
||||
setTheme("dark");
|
||||
} else if (currentTheme === "dark") {
|
||||
setTheme("light");
|
||||
} else {
|
||||
setTheme("auto");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function initTheme() {
|
||||
// set theme defined in localStorage if there is one, or fallback to auto mode
|
||||
const currentTheme = localStorage.getItem("theme");
|
||||
currentTheme ? setTheme(currentTheme) : setTheme("auto");
|
||||
}
|
||||
|
||||
function setupTheme() {
|
||||
// Attach event handlers for toggling themes
|
||||
const buttons = document.getElementsByClassName("theme-toggle");
|
||||
Array.from(buttons).forEach((btn) => {
|
||||
btn.addEventListener("click", cycleTheme);
|
||||
});
|
||||
initTheme();
|
||||
}
|
||||
|
||||
setupTheme();
|
||||
});
|
||||
}
|
||||
|
|
@ -163,8 +163,7 @@
|
|||
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
|
||||
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
|
||||
s = s.substring(0, num_chars); // trim to first num_chars chars
|
||||
s = s.replace(/-+$/g, ''); // trim any trailing hyphens
|
||||
return s;
|
||||
return s.replace(/-+$/g, ''); // trim any trailing hyphens
|
||||
}
|
||||
window.URLify = URLify;
|
||||
}
|
||||
|
|
|
|||
2103
static/admin/js/vendor/jquery/jquery.js
vendored
4
static/admin/js/vendor/jquery/jquery.min.js
vendored
2
static/admin/js/vendor/xregexp/LICENSE.txt
vendored
|
|
@ -1,6 +1,6 @@
|
|||
The MIT License
|
||||
|
||||
Copyright (c) 2007-2017 Steven Levithan <http://xregexp.com/>
|
||||
Copyright (c) 2007-present Steven Levithan <http://xregexp.com/>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
|||
9160
static/admin/js/vendor/xregexp/xregexp.js
vendored
177
static/admin/js/vendor/xregexp/xregexp.min.js
vendored
100
static/assets/analytics.js
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
(function(){/*
|
||||
|
||||
Copyright The Closure Library Authors.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
var aa=this||self,l=function(a,b){a=a.split(".");var c=aa;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}:c[d]=b};var m=function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])},q=function(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1};var r=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;/*
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
var t=window,u=window.history,v=document,w=navigator,x=function(a,b){v.addEventListener?v.addEventListener(a,b,!1):v.attachEvent&&v.attachEvent("on"+a,b)};var y={},z=function(){y.TAGGING=y.TAGGING||[];y.TAGGING[1]=!0};var A=/:[0-9]+$/,B=function(a,b,c){a=a.split("&");for(var d=0;d<a.length;d++){var e=a[d].split("=");if(decodeURIComponent(e[0]).replace(/\+/g," ")===b)return b=e.slice(1).join("="),c?b:decodeURIComponent(b).replace(/\+/g," ")}},E=function(a,b){b&&(b=String(b).toLowerCase());if("protocol"===b||"port"===b)a.protocol=C(a.protocol)||C(t.location.protocol);"port"===b?a.port=String(Number(a.hostname?a.port:t.location.port)||("http"==a.protocol?80:"https"==a.protocol?443:"")):"host"===b&&(a.hostname=(a.hostname||
|
||||
t.location.hostname).replace(A,"").toLowerCase());return D(a,b,void 0,void 0,void 0)},D=function(a,b,c,d,e){var f=C(a.protocol);b&&(b=String(b).toLowerCase());switch(b){case "url_no_fragment":d="";a&&a.href&&(d=a.href.indexOf("#"),d=0>d?a.href:a.href.substr(0,d));a=d;break;case "protocol":a=f;break;case "host":a=a.hostname.replace(A,"").toLowerCase();c&&(d=/^www\d*\./.exec(a))&&d[0]&&(a=a.substr(d[0].length));break;case "port":a=String(Number(a.port)||("http"==f?80:"https"==f?443:""));break;case "path":a.pathname||
|
||||
a.hostname||z();a="/"==a.pathname.substr(0,1)?a.pathname:"/"+a.pathname;a=a.split("/");0<=(d||[]).indexOf(a[a.length-1])&&(a[a.length-1]="");a=a.join("/");break;case "query":a=a.search.replace("?","");e&&(a=B(a,e,void 0));break;case "extension":a=a.pathname.split(".");a=1<a.length?a[a.length-1]:"";a=a.split("/")[0];break;case "fragment":a=a.hash.replace("#","");break;default:a=a&&a.href}return a},C=function(a){return a?a.replace(":","").toLowerCase():""},F=function(a){var b=v.createElement("a");a&&
|
||||
(b.href=a);var c=b.pathname;"/"!==c[0]&&(a||z(),c="/"+c);a=b.hostname.replace(A,"");return{href:b.href,protocol:b.protocol,host:b.host,hostname:a,pathname:c,search:b.search,hash:b.hash,port:b.port}};function G(){for(var a=H,b={},c=0;c<a.length;++c)b[a[c]]=c;return b}function I(){var a="ABCDEFGHIJKLMNOPQRSTUVWXYZ";a+=a.toLowerCase()+"0123456789-_";return a+"."}var H,J;function K(a){H=H||I();J=J||G();for(var b=[],c=0;c<a.length;c+=3){var d=c+1<a.length,e=c+2<a.length,f=a.charCodeAt(c),g=d?a.charCodeAt(c+1):0,h=e?a.charCodeAt(c+2):0,k=f>>2;f=(f&3)<<4|g>>4;g=(g&15)<<2|h>>6;h&=63;e||(h=64,d||(g=64));b.push(H[k],H[f],H[g],H[h])}return b.join("")}
|
||||
function ba(a){function b(k){for(;d<a.length;){var n=a.charAt(d++),p=J[n];if(null!=p)return p;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n);}return k}H=H||I();J=J||G();for(var c="",d=0;;){var e=b(-1),f=b(0),g=b(64),h=b(64);if(64===h&&-1===e)return c;c+=String.fromCharCode(e<<2|f>>4);64!=g&&(c+=String.fromCharCode(f<<4&240|g>>2),64!=h&&(c+=String.fromCharCode(g<<6&192|h)))}};var L;var M=void 0,O=function(){var a=ca,b=da,c=N(),d=function(g){a(g.target||g.srcElement||{})},e=function(g){b(g.target||g.srcElement||{})};if(!c.init){x("mousedown",d);x("keyup",d);x("submit",e);var f=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){b(this);f.call(this)};c.init=!0}},P=function(a,b,c,d,e){a={callback:a,domains:b,fragment:2===c,placement:c,forms:d,sameHost:e};N().decorators.push(a)},Q=function(a,b,c){for(var d=N().decorators,e={},f=0;f<d.length;++f){var g=d[f],
|
||||
h;if(h=!c||g.forms)a:{h=g.domains;var k=a,n=!!g.sameHost;if(h&&(n||k!==v.location.hostname))for(var p=0;p<h.length;p++)if(h[p]instanceof RegExp){if(h[p].test(k)){h=!0;break a}}else if(0<=k.indexOf(h[p])||n&&0<=h[p].indexOf(k)){h=!0;break a}h=!1}h&&(h=g.placement,void 0==h&&(h=g.fragment?2:1),h===b&&m(e,g.callback()))}return e};function N(){var a={};var b=t.google_tag_data;t.google_tag_data=void 0===b?a:b;a=t.google_tag_data;b=a.gl;b&&b.decorators||(b={decorators:[]},a.gl=b);return b};var ea=/(.*?)\*(.*?)\*(.*)/,fa=/([^?#]+)(\?[^#]*)?(#.*)?/;function R(a){return new RegExp("(.*?)(^|&)"+a+"=([^&]*)&?(.*)")}var T=function(a,b){var c=[],d;for(d in a)if(a.hasOwnProperty(d)){var e=a[d];void 0!==e&&e===e&&null!==e&&"[object Object]"!==e.toString()&&(c.push(d),c.push(K(String(e))))}a=c.join("*");void 0!==b&&(c="xp_"+b,b=ha[b](a),a=a+"*"+[c,K(String(b))].join("*"));return["1",S(a),a].join("*")};
|
||||
function S(a,b){a=[t.navigator.userAgent,(new Date).getTimezoneOffset(),w.userLanguage||w.language,Math.floor((new Date(Date.now())).getTime()/60/1E3)-(void 0===b?0:b),a].join("*");if(!(b=L)){b=Array(256);for(var c=0;256>c;c++){for(var d=c,e=0;8>e;e++)d=d&1?d>>>1^3988292384:d>>>1;b[c]=d}}L=b;b=4294967295;for(c=0;c<a.length;c++)b=b>>>8^L[(b^a.charCodeAt(c))&255];return((b^-1)>>>0).toString(36)}var U={},ha=(U[1]=ia,U[2]=ja,U[3]=ka,U);function ia(){return"CHECKSUM_EXP_DISABLED"}
|
||||
function ja(){return"CHECKSUM_EXP_DISABLED"}function la(){w.userAgentData&&w.userAgentData.getHighEntropyValues(["architecture","model","bitness","platformVersion","uaFullVersion"]).then(function(){})}function ka(){return"CHECKSUM_EXP_DISABLED"}function ma(a){return function(b){var c=F(t.location.href),d=c.search.replace("?","");var e=B(d,"_gl",!0);b.query=V(e||"")||{};e=E(c,"fragment");var f=e.match(R("_gl"));b.fragment=V(f&&f[3]||"")||{};a&&na(c,d,e)}}
|
||||
function W(a,b){if(a=R(a).exec(b)){var c=a[2],d=a[4];b=a[1];d&&(b=b+c+d)}return b}function na(a,b,c){function d(f,g){f=W("_gl",f);f.length&&(f=g+f);return f}if(u&&u.replaceState){var e=R("_gl");if(e.test(b)||e.test(c))a=E(a,"path"),b=d(b,"?"),c=d(c,"#"),u.replaceState({},void 0,""+a+b+c)}}
|
||||
var V=function(a){var b=void 0===b?3:b;try{if(a){a:{for(var c=0;3>c;++c){var d=ea.exec(a);if(d){var e=d;break a}a=decodeURIComponent(a)}e=void 0}if(e&&"1"===e[1]){var f=e[2],g=e[3];a:{for(e=0;e<b;++e)if(f===S(g,e)){var h=!0;break a}h=!1}if(h){b={};var k=g?g.split("*"):[];for(g=0;g<k.length;g+=2)b[k[g]]=ba(k[g+1]);return b}}}}catch(n){}};
|
||||
function X(a,b,c,d){function e(k){k=W(a,k);var n=k.charAt(k.length-1);k&&"&"!==n&&(k+="&");return k+h}d=void 0===d?!1:d;var f=fa.exec(c);if(!f)return"";c=f[1];var g=f[2]||"";f=f[3]||"";var h=a+"="+b;d?f="#"+e(f.substring(1)):g="?"+e(g.substring(1));return""+c+g+f}function Y(a,b){var c="FORM"===(a.tagName||"").toUpperCase(),d=Q(b,1,c),e=Q(b,2,c);b=Q(b,3,c);var f=M;q(d)&&(d=T(d,f),c?oa("_gl",d,a):Z("_gl",d,a,!1));!c&&q(e)&&(c=T(e),Z("_gl",c,a,!0));for(var g in b)b.hasOwnProperty(g)&&pa(g,b[g],a)}
|
||||
function pa(a,b,c,d){if(c.tagName){if("a"===c.tagName.toLowerCase())return Z(a,b,c,d);if("form"===c.tagName.toLowerCase())return oa(a,b,c)}if("string"==typeof c)return X(a,b,c,d)}function Z(a,b,c,d){c.href&&(a=X(a,b,c.href,void 0===d?!1:d),r.test(a)&&(c.href=a))}
|
||||
function oa(a,b,c){if(c&&c.action){var d=(c.method||"").toLowerCase();if("get"===d){d=c.childNodes||[];for(var e=!1,f=0;f<d.length;f++){var g=d[f];if(g.name===a){g.setAttribute("value",b);e=!0;break}}e||(d=v.createElement("input"),d.setAttribute("type","hidden"),d.setAttribute("name",a),d.setAttribute("value",b),c.appendChild(d))}else"post"===d&&(a=X(a,b,c.action),r.test(a)&&(c.action=a))}}
|
||||
function ca(a){try{a:{for(var b=100;a&&0<b;){if(a.href&&a.nodeName.match(/^a(?:rea)?$/i)){var c=a;break a}a=a.parentNode;b--}c=null}if(c){var d=c.protocol;"http:"!==d&&"https:"!==d||Y(c,c.hostname)}}catch(e){}}function da(a){try{if(a.action){var b=E(F(a.action),"host");Y(a,b)}}catch(c){}};l("google_tag_data.glBridge.auto",function(a,b,c,d,e){O();void 0!==e&&(M=e);3===e&&la();P(a,b,"fragment"===c?2:1,!!d,!1)});l("google_tag_data.glBridge.passthrough",function(a,b,c,d){O();void 0!==d&&(M=d);P(a,[D(t.location,"host",!0)],b,!!c,!0)});l("google_tag_data.glBridge.decorate",function(a,b,c){a=T(a);return pa("_gl",a,b,!!c)});l("google_tag_data.glBridge.generate",T);
|
||||
l("google_tag_data.glBridge.get",function(a,b){var c=ma(!!b);b=N();b.data||(b.data={query:{},fragment:{}},c(b.data));c={};if(b=b.data)m(c,b.query),a&&m(c,b.fragment);return c});})(window);
|
||||
(function(){function La(a){var b=1,c;if(a)for(b=0,c=a.length-1;0<=c;c--){var d=a.charCodeAt(c);b=(b<<6&268435455)+d+(d<<14);d=b&266338304;b=0!=d?b^d>>21:b}return b};/*
|
||||
|
||||
Copyright The Closure Library Authors.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
var $c=function(a){this.C=a||[]};$c.prototype.set=function(a){this.C[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b<this.C.length;b++)this.C[b]&&(a[Math.floor(b/6)]^=1<<b%6);for(b=0;b<a.length;b++)a[b]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(a[b]||0);return a.join("")+"~"};var ha=window.GoogleAnalyticsObject,wa;if(wa=void 0!=ha)wa=-1<(ha.constructor+"").indexOf("String");var ya;if(ya=wa){var fc=window.GoogleAnalyticsObject;ya=fc?fc.replace(/^[\s\xa0]+|[\s\xa0]+$/g,""):""}var gb=ya||"ga",jd=/^(?:utma\.)?\d+\.\d+$/,kd=/^amp-[\w.-]{22,64}$/,Ba=!1;var vd=new $c;function J(a){vd.set(a)}var Td=function(a){a=Dd(a);a=new $c(a);for(var b=vd.C.slice(),c=0;c<a.C.length;c++)b[c]=b[c]||a.C[c];return(new $c(b)).encode()},Dd=function(a){a=a.get(Gd);ka(a)||(a=[]);return a};var ea=function(a){return"function"==typeof a},ka=function(a){return"[object Array]"==Object.prototype.toString.call(Object(a))},qa=function(a){return void 0!=a&&-1<(a.constructor+"").indexOf("String")},D=function(a,b){return 0==a.indexOf(b)},sa=function(a){return a?a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,""):""},ra=function(){for(var a=O.navigator.userAgent+(M.cookie?M.cookie:"")+(M.referrer?M.referrer:""),b=a.length,c=O.history.length;0<c;)a+=c--^b++;return[hd()^La(a)&2147483647,Math.round((new Date).getTime()/
|
||||
1E3)].join(".")},ta=function(a){var b=M.createElement("img");b.width=1;b.height=1;b.src=a;return b},ua=function(){},K=function(a){if(encodeURIComponent instanceof Function)return encodeURIComponent(a);J(28);return a},L=function(a,b,c,d){try{a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent("on"+b,c)}catch(e){J(27)}},f=/^[\w\-:/.?=&%!\[\]]+$/,Nd=/^[\w+/_-]+[=]{0,2}$/,ff=null,Id=function(a,b,c,d,e){if(!ff){ff={createScriptURL:function(ca){return ca},createHTML:function(ca){return ca}};
|
||||
try{ff=window.trustedTypes.createPolicy("google-analytics",ff)}catch(ca){}}if(a){var g=M.querySelector&&M.querySelector("script[nonce]")||null;g=g?g.nonce||g.getAttribute&&g.getAttribute("nonce")||"":"";c?(e=d="",b&&f.test(b)&&(d=' id="'+b+'"'),g&&Nd.test(g)&&(e=' nonce="'+g+'"'),f.test(a)&&M.write(ff.createHTML("<script"+d+e+' src="'+a+'">\x3c/script>'))):(c=M.createElement("script"),c.type="text/javascript",c.async=!0,c.src=ff.createScriptURL(a),d&&(c.onload=d),e&&(c.onerror=e),b&&(c.id=b),g&&c.setAttribute("nonce",
|
||||
g),a=M.getElementsByTagName("script")[0],a.parentNode.insertBefore(c,a))}},be=function(a,b){return E(M.location[b?"href":"search"],a)},E=function(a,b){return(a=a.match("(?:&|#|\\?)"+K(b).replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")+"=([^&#]*)"))&&2==a.length?a[1]:""},xa=function(){var a=""+M.location.hostname;return 0==a.indexOf("www.")?a.substring(4):a},de=function(a,b){var c=a.indexOf(b);if(5==c||6==c)if(a=a.charAt(c+b.length),"/"==a||"?"==a||""==a||":"==a)return!0;return!1},za=function(a,b){if(1==
|
||||
b.length&&null!=b[0]&&"object"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e<d;e++)if("object"===typeof b[e]){for(var g in b[e])b[e].hasOwnProperty(g)&&(c[g]=b[e][g]);break}else e<a.length&&(c[a[e]]=b[e]);return c},Ee=function(a,b){for(var c=0;c<a.length;c++)if(b==a[c])return!0;return!1};var ee=function(){this.oa=[];this.ea={};this.m={}};ee.prototype.set=function(a,b,c){this.oa.push(a);c?this.m[":"+a]=b:this.ea[":"+a]=b};ee.prototype.get=function(a){return this.m.hasOwnProperty(":"+a)?this.m[":"+a]:this.ea[":"+a]};ee.prototype.map=function(a){for(var b=0;b<this.oa.length;b++){var c=this.oa[b],d=this.get(c);d&&a(c,d)}};var O=window,M=document,jf=document.currentScript?document.currentScript.src:"",va=function(a,b){return setTimeout(a,b)};var Qa=window,Za=document,G=function(a){var b=Qa._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===Qa["ga-disable-"+a])return!0;try{var c=Qa.external;if(c&&c._gaUserPrefs&&"oo"==c._gaUserPrefs)return!0}catch(g){}a=[];b=String(Za.cookie).split(";");for(c=0;c<b.length;c++){var d=b[c].split("="),e=d[0].replace(/^\s*|\s*$/g,"");e&&"AMP_TOKEN"==e&&((d=d.slice(1).join("=").replace(/^\s*|\s*$/g,""))&&(d=decodeURIComponent(d)),a.push(d))}for(b=0;b<a.length;b++)if("$OPT_OUT"==a[b])return!0;return Za.getElementById("__gaOptOutExtension")?
|
||||
!0:!1};var Ca=function(a){var b=[],c=M.cookie.split(";");a=new RegExp("^\\s*"+a+"=\\s*(.*?)\\s*$");for(var d=0;d<c.length;d++){var e=c[d].match(a);e&&b.push(e[1])}return b},zc=function(a,b,c,d,e,g,ca){e=G(e)?!1:eb.test(M.location.hostname)||"/"==c&&vc.test(d)?!1:!0;if(!e)return!1;b&&1200<b.length&&(b=b.substring(0,1200));c=a+"="+b+"; path="+c+"; ";g&&(c+="expires="+(new Date((new Date).getTime()+g)).toGMTString()+"; ");d&&"none"!==d&&(c+="domain="+d+";");ca&&(c+=ca+";");d=M.cookie;M.cookie=c;if(!(d=d!=M.cookie))a:{a=
|
||||
Ca(a);for(d=0;d<a.length;d++)if(b==a[d]){d=!0;break a}d=!1}return d},Cc=function(a){return encodeURIComponent?encodeURIComponent(a).replace(/\(/g,"%28").replace(/\)/g,"%29"):a},vc=/^(www\.)?google(\.com?)?(\.[a-z]{2})?$/,eb=/(^|\.)doubleclick\.net$/i;var Oe=function(a){var b=[],c=M.cookie.split(";");a=new RegExp("^\\s*"+(a||"_gac")+"_(UA-\\d+-\\d+)=\\s*(.+?)\\s*$");for(var d=0;d<c.length;d++){var e=c[d].match(a);e&&b.push({ja:e[1],value:e[2],timestamp:Number(e[2].split(".")[1])||0})}b.sort(function(g,ca){return ca.timestamp-g.timestamp});return b};
|
||||
function df(a,b,c){b=Oe(b);var d={};if(!b||!b.length)return d;for(var e=0;e<b.length;e++){var g=b[e].value.split(".");if("1"!==g[0]||c&&3>g.length||!c&&3!==g.length)a&&(a.na=!0);else if(Number(g[1])){d[b[e].ja]?a&&(a.pa=!0):d[b[e].ja]=[];var ca={version:g[0],timestamp:1E3*Number(g[1]),qa:g[2]};c&&3<g.length&&(ca.labels=g.slice(3));d[b[e].ja].push(ca)}}return d};var Fa,Ga,fb,Ab,ja=/^https?:\/\/[^/]*cdn\.ampproject\.org\//,Ue=/^(?:www\.|m\.|amp\.)+/,Ub=[],da=function(a){if(ye(a[Kd])){if(void 0===Ab){var b;if(b=(b=De.get())&&b._ga||void 0)Ab=b,J(81)}if(void 0!==Ab)return a[Q]||(a[Q]=Ab),!1}if(a[Kd]){J(67);if(a[ac]&&"cookie"!=a[ac])return!1;if(void 0!==Ab)a[Q]||(a[Q]=Ab);else{a:{b=String(a[W]||xa());var c=String(a[Yb]||"/"),d=Ca(String(a[U]||"_ga"));b=na(d,b,c);if(!b||jd.test(b))b=!0;else if(b=Ca("AMP_TOKEN"),0==b.length)b=!0;else{if(1==b.length&&(b=decodeURIComponent(b[0]),
|
||||
"$RETRIEVING"==b||"$OPT_OUT"==b||"$ERROR"==b||"$NOT_FOUND"==b)){b=!0;break a}b=!1}}if(b&&tc(ic,String(a[Na])))return!0}}return!1},ic=function(){Z.D([ua])},tc=function(a,b){var c=Ca("AMP_TOKEN");if(1<c.length)return J(55),!1;c=decodeURIComponent(c[0]||"");if("$OPT_OUT"==c||"$ERROR"==c||G(b))return J(62),!1;if(!ja.test(M.referrer)&&"$NOT_FOUND"==c)return J(68),!1;if(void 0!==Ab)return J(56),va(function(){a(Ab)},0),!0;if(Fa)return Ub.push(a),!0;if("$RETRIEVING"==c)return J(57),va(function(){tc(a,b)},
|
||||
1E4),!0;Fa=!0;c&&"$"!=c[0]||(xc("$RETRIEVING",3E4),setTimeout(Mc,3E4),c="");return Pc(c,b)?(Ub.push(a),!0):!1},Pc=function(a,b,c){if(!window.JSON)return J(58),!1;var d=O.XMLHttpRequest;if(!d)return J(59),!1;var e=new d;if(!("withCredentials"in e))return J(60),!1;e.open("POST",(c||"https://ampcid.google.com/v1/publisher:getClientId")+"?key=AIzaSyA65lEHUEizIsNtlbNo-l2K18dT680nsaM",!0);e.withCredentials=!0;e.setRequestHeader("Content-Type","text/plain");e.onload=function(){Fa=!1;if(4==e.readyState){try{200!=
|
||||
e.status&&(J(61),Qc("","$ERROR",3E4));var g=JSON.parse(e.responseText);g.optOut?(J(63),Qc("","$OPT_OUT",31536E6)):g.clientId?Qc(g.clientId,g.securityToken,31536E6):!c&&g.alternateUrl?(Ga&&clearTimeout(Ga),Fa=!0,Pc(a,b,g.alternateUrl)):(J(64),Qc("","$NOT_FOUND",36E5))}catch(ca){J(65),Qc("","$ERROR",3E4)}e=null}};d={originScope:"AMP_ECID_GOOGLE"};a&&(d.securityToken=a);e.send(JSON.stringify(d));Ga=va(function(){J(66);Qc("","$ERROR",3E4)},1E4);return!0},Mc=function(){Fa=!1},xc=function(a,b){if(void 0===
|
||||
fb){fb="";for(var c=id(),d=0;d<c.length;d++){var e=c[d];if(zc("AMP_TOKEN",encodeURIComponent(a),"/",e,"",b)){fb=e;return}}}zc("AMP_TOKEN",encodeURIComponent(a),"/",fb,"",b)},Qc=function(a,b,c){Ga&&clearTimeout(Ga);b&&xc(b,c);Ab=a;b=Ub;Ub=[];for(c=0;c<b.length;c++)b[c](a)},ye=function(a){a:{if(ja.test(M.referrer)){var b=M.location.hostname.replace(Ue,"");b:{var c=M.referrer;c=c.replace(/^https?:\/\//,"");var d=c.replace(/^[^/]+/,"").split("/"),e=d[2];d=(d="s"==e?d[3]:e)?decodeURIComponent(d):d;if(!d){if(0==
|
||||
c.indexOf("xn--")){c="";break b}(c=c.match(/(.*)\.cdn\.ampproject\.org\/?$/))&&2==c.length&&(d=c[1].replace(/-/g,".").replace(/\.\./g,"-"))}c=d?d.replace(Ue,""):""}(d=b===c)||(c="."+c,d=b.substring(b.length-c.length,b.length)===c);if(d){b=!0;break a}else J(78)}b=!1}return b&&!1!==a};var bd=function(a){return(a?"https:":Ba||"https:"==M.location.protocol?"https:":"http:")+"//www.google-analytics.com"},Ge=function(a){switch(a){default:case 1:return"https://www.google-analytics.com/gtm/js?id=";case 2:return"https://www.googletagmanager.com/gtag/js?id="}},Da=function(a){this.name="len";this.message=a+"-8192"},ba=function(a,b,c){c=c||ua;if(2036>=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,
|
||||
c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c,d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d&&"text/plain"===g.getResponseHeader("Content-Type"))try{Ea(d,g.responseText,c)}catch(ca){ge("xhr",
|
||||
"rsp"),c()}else c();g=null}};g.send(b);return!0},Ea=function(a,b,c){if(1>b.length)ge("xhr","ver","0"),c();else if(3<a.count++)ge("xhr","tmr",""+a.count),c();else{var d=b.charAt(0);if("1"===d)oc(a,b.substring(1),c);else if(a.V&&"2"===d){var e=b.substring(1).split(","),g=0;b=function(){++g===e.length&&c()};for(d=0;d<e.length;d++)oc(a,e[d],b)}else ge("xhr","ver",String(b.length)),c()}},oc=function(a,b,c){if(0===b.length)c();else{var d=b.charAt(0);switch(d){case "d":pe("https://stats.g.doubleclick.net/j/collect",
|
||||
a.U,a,c);break;case "g":wc("https://www.google.com/ads/ga-audiences",a.google,c);(b=b.substring(1))&&(/^[a-z.]{1,6}$/.test(b)?wc("https://www.google.%/ads/ga-audiences".replace("%",b),a.google,ua):ge("tld","bcc",b));break;case "G":if(a.V){a.V("G-"+b.substring(1));c();break}case "x":if(a.V){a.V();c();break}default:ge("xhr","brc",d),c()}}},x=function(a,b,c){return O.navigator.sendBeacon?O.navigator.sendBeacon(a,b)?(c(),!0):!1:!1},ge=function(a,b,c){1<=100*Math.random()||G("?")||(a=["t=error","_e="+
|
||||
a,"_v=j96","sr=1"],b&&a.push("_f="+b),c&&a.push("_m="+K(c.substring(0,100))),a.push("aip=1"),a.push("z="+hd()),wc(bd(!0)+"/u/d",a.join("&"),ua))};var qc=function(){return O.gaData=O.gaData||{}},h=function(a){var b=qc();return b[a]=b[a]||{}};var Ha=function(){this.M=[]};Ha.prototype.add=function(a){this.M.push(a)};Ha.prototype.D=function(a){try{for(var b=0;b<this.M.length;b++){var c=a.get(this.M[b]);c&&ea(c)&&c.call(O,a)}}catch(d){}b=a.get(Ia);b!=ua&&ea(b)&&(a.set(Ia,ua,!0),setTimeout(b,10))};function Ja(a){if(100!=a.get(Ka)&&La(P(a,Q))%1E4>=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";}
|
||||
function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});!1===a.get(xe)&&b.push("npa=1");b.push("z="+Bd());a.set(Ra,b.join("&"),!0)}
|
||||
function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d||bd(!1)+"")+"/collect";switch(P(a,ad)){case "d":e=c||(d||bd(!1)+"")+"/j/collect";b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e.first_hit||(e.first_hit=(new Date).getTime());e=P(a,Na);delete h(e).pending_experiments;a.set(Ia,
|
||||
ua,!0)}function Hc(a){qc().expId&&a.set(Nc,qc().expId);qc().expVar&&a.set(Oc,qc().expVar);var b=P(a,Na);if(b=h(b).pending_experiments){var c=[];for(d in b)b.hasOwnProperty(d)&&b[d]&&c.push(encodeURIComponent(d)+"."+encodeURIComponent(b[d]));var d=c.join("!")}else d=void 0;d&&((b=a.get(m))&&(d=b+"!"+d),a.set(m,d,!0))}function cd(){if(O.navigator&&"preview"==O.navigator.loadPurpose)throw"abort";}
|
||||
function yd(a){var b=O.gaDevIds||[];if(ka(b)){var c=a.get("&did");qa(c)&&0<c.length&&(b=b.concat(c.split(",")));c=[];for(var d=0;d<b.length;d++)Ee(c,b[d])||c.push(b[d]);0!=c.length&&a.set("&did",c.join(","),!0)}}function vb(a){if(!a.get(Na))throw"abort";}
|
||||
function Pe(a){try{if(!a.get(Qe)&&(a.set(Qe,!0),!a.get(">m"))){var b=void 0;lf(be("gtm_debug"))&&(b=2);!b&&D(M.referrer,"https://tagassistant.google.com/")&&(b=3);!b&&Ee(M.cookie.split("; "),"__TAG_ASSISTANT=x")&&(b=4);if(!b){var c=M.documentElement.getAttribute("data-tag-assistant-present");lf(c)&&(b=5)}if(b){O["google.tagmanager.debugui2.queue"]||(O["google.tagmanager.debugui2.queue"]=[],Id("https://www.google-analytics.com/debug/bootstrap?id="+a.get(Na)+"&src=LEGACY&cond="+b));var d=M.currentScript;
|
||||
O["google.tagmanager.debugui2.queue"].push({messageType:"LEGACY_CONTAINER_STARTING",data:{id:a.get(Na),scriptSource:d&&d.src||""}})}}}catch(e){}}function lf(a){if(null==a||0===a.length)return!1;a=Number(a);var b=Date.now();return a<b+3E5&&a>b-9E5};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if("transaction"!=c&&"item"!=c){c=R(a,Wa);var d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0<e&&(c=Math.min(c+e,20),a.set(Xa,d));if(0>=c)throw"abort";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee};Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?"":""+a},R=function(a,b){a=a.get(b);return void 0==a||""===a?0:Number(a)};Ya.prototype.Z=function(a){return(a=this.get(a))&&ea(a)?a:ua};
|
||||
Ya.prototype.set=function(a,b,c){if(a)if("object"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)};var ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)};var ue=new ee,ve=[],bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=ue.get(a);if(!b)for(var c=0;c<ve.length;c++){var d=ve[c],e=d[0].exec(a);if(e){b=d[1](e);ue.set(b.name,b);break}}return b},yc=function(a){var b;ue.map(function(c,d){d.F==a&&(b=d)});return b&&b.name},S=function(a,b,c,d,e){a=new bb(a,b,c,d,e);ue.set(a.name,a);return a.name},cb=function(a,b){ve.push([new RegExp("^"+a+"$"),b])},T=function(a,b,c){return S(a,b,c,void 0,db)},db=function(){};var hb=T("apiVersion","v"),ib=T("clientVersion","_v");S("anonymizeIp","aip");var jb=S("adSenseId","a"),Va=S("hitType","t"),Ia=S("hitCallback"),Ra=S("hitPayload");S("nonInteraction","ni");S("currencyCode","cu");S("dataSource","ds");var Vd=S("useBeacon",void 0,!1),fa=S("transport");S("sessionControl","sc","");S("sessionGroup","sg");S("queueTime","qt");var Ac=S("_s","_s");S("screenName","cd");var kb=S("location","dl",""),lb=S("referrer","dr"),mb=S("page","dp","");S("hostname","dh");
|
||||
var nb=S("language","ul"),ob=S("encoding","de");S("title","dt",function(){return M.title||void 0});cb("contentGroup([0-9]+)",function(a){return new bb(a[0],"cg"+a[1])});var pb=S("screenColors","sd"),qb=S("screenResolution","sr"),rb=S("viewportSize","vp"),sb=S("javaEnabled","je"),tb=S("flashVersion","fl");S("campaignId","ci");S("campaignName","cn");S("campaignSource","cs");S("campaignMedium","cm");S("campaignKeyword","ck");S("campaignContent","cc");
|
||||
var ub=S("eventCategory","ec"),xb=S("eventAction","ea"),yb=S("eventLabel","el"),zb=S("eventValue","ev"),Bb=S("socialNetwork","sn"),Cb=S("socialAction","sa"),Db=S("socialTarget","st"),Eb=S("l1","plt"),Fb=S("l2","pdt"),Gb=S("l3","dns"),Hb=S("l4","rrt"),Ib=S("l5","srt"),Jb=S("l6","tcp"),Kb=S("l7","dit"),Lb=S("l8","clt"),Ve=S("l9","_gst"),We=S("l10","_gbt"),Xe=S("l11","_cst"),Ye=S("l12","_cbt"),Mb=S("timingCategory","utc"),Nb=S("timingVar","utv"),Ob=S("timingLabel","utl"),Pb=S("timingValue","utt");
|
||||
S("appName","an");S("appVersion","av","");S("appId","aid","");S("appInstallerId","aiid","");S("exDescription","exd");S("exFatal","exf");var Nc=S("expId","xid"),Oc=S("expVar","xvar"),m=S("exp","exp"),Rc=S("_utma","_utma"),Sc=S("_utmz","_utmz"),Tc=S("_utmht","_utmht"),Ua=S("_hc",void 0,0),Xa=S("_ti",void 0,0),Wa=S("_to",void 0,20);cb("dimension([0-9]+)",function(a){return new bb(a[0],"cd"+a[1])});cb("metric([0-9]+)",function(a){return new bb(a[0],"cm"+a[1])});S("linkerParam",void 0,void 0,Bc,db);
|
||||
var Ze=T("_cd2l",void 0,!1),ld=S("usage","_u"),Gd=S("_um");S("forceSSL",void 0,void 0,function(){return Ba},function(a,b,c){J(34);Ba=!!c});var ed=S("_j1","jid"),ia=S("_j2","gjid");cb("\\&(.*)",function(a){var b=new bb(a[0],a[1]),c=yc(a[0].substring(1));c&&(b.Z=function(d){return d.get(c)},b.o=function(d,e,g,ca){d.set(c,g,ca)},b.F=void 0);return b});
|
||||
var Qb=T("_oot"),dd=S("previewTask"),Rb=S("checkProtocolTask"),md=S("validationTask"),Sb=S("checkStorageTask"),Uc=S("historyImportTask"),Tb=S("samplerTask"),Vb=S("_rlt"),Wb=S("buildHitTask"),Xb=S("sendHitTask"),Vc=S("ceTask"),zd=S("devIdTask"),Cd=S("timingTask"),Ld=S("displayFeaturesTask"),oa=S("customTask"),ze=S("fpsCrossDomainTask"),Re=T("_cta"),V=T("name"),Q=T("clientId","cid"),n=T("clientIdTime"),xd=T("storedClientId"),Ad=S("userId","uid"),Na=T("trackingId","tid"),U=T("cookieName",void 0,"_ga"),
|
||||
W=T("cookieDomain"),Yb=T("cookiePath",void 0,"/"),Zb=T("cookieExpires",void 0,63072E3),Hd=T("cookieUpdate",void 0,!0),Be=T("cookieFlags",void 0,""),$b=T("legacyCookieDomain"),Wc=T("legacyHistoryImport",void 0,!0),ac=T("storage",void 0,"cookie"),bc=T("allowLinker",void 0,!1),cc=T("allowAnchor",void 0,!0),Ka=T("sampleRate","sf",100),dc=T("siteSpeedSampleRate",void 0,1),ec=T("alwaysSendReferrer",void 0,!1),I=T("_gid","_gid"),la=T("_gcn"),Kd=T("useAmpClientId"),ce=T("_gclid"),fe=T("_gt"),he=T("_ge",void 0,
|
||||
7776E6),ie=T("_gclsrc"),je=T("storeGac",void 0,!0),oe=S("_x_19"),Ae=S("_fplc","_fplc"),F=T("_cs"),Je=T("_useUp",void 0,!1),Le=S("up","up"),Qe=S("_tac",void 0,!1),Se=T("_gbraid"),Te=T("_gbt"),bf=T("_gbe",void 0,7776E6),gd=S("transportUrl"),Md=S("_r","_r"),Od=S("_slc","_slc"),qe=S("_dp"),ad=S("_jt",void 0,"n"),Ud=S("allowAdFeatures",void 0,!0),xe=S("allowAdPersonalizationSignals",void 0,!0);
|
||||
function X(a,b,c,d){b[a]=function(){try{return d&&J(d),c.apply(this,arguments)}catch(e){throw ge("exc",a,e&&e.name),e;}}};var Ed=function(a){if("cookie"==a.get(ac))return a=Ca("FPLC"),0<a.length?a[0]:void 0},Fe=function(a){var b;if(b=P(a,oe)&&a.get(Ze))b=De.get(a.get(cc)),b=!(b&&b._fplc);b&&!Ed(a)&&a.set(Ae,"0")};var aa=function(a){var b=Math.min(R(a,dc),100);return La(P(a,Q))%100>=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0<c?(Y(b,Gb),Y(b,Jb),Y(b,Ib),Y(b,Fb),Y(b,Hb),Y(b,Kb),Y(b,Lb),Y(b,Ve),Y(b,We),Y(b,Xe),Y(b,Ye),va(function(){a(b)},10)):L(O,"load",function(){gc(a)},!1))}},Ec=function(a){var b=O.performance||O.webkitPerformance;b=b&&b.timing;if(!b)return!1;var c=b.navigationStart;if(0==c)return!1;a[Eb]=b.loadEventStart-c;a[Gb]=b.domainLookupEnd-b.domainLookupStart;
|
||||
a[Jb]=b.connectEnd-b.connectStart;a[Ib]=b.responseStart-b.requestStart;a[Fb]=b.responseEnd-b.responseStart;a[Hb]=b.fetchStart-c;a[Kb]=b.domInteractive-c;a[Lb]=b.domContentLoadedEventStart-c;a[Ve]=N.L-c;a[We]=N.ya-c;O.google_tag_manager&&O.google_tag_manager._li&&(b=O.google_tag_manager._li,a[Xe]=b.cst,a[Ye]=b.cbt);return!0},Fc=function(a){if(O.top!=O)return!1;var b=O.external,c=b&&b.onloadT;b&&!b.isValidLoadTime&&(c=void 0);2147483648<c&&(c=void 0);0<c&&b.setPageReadyTime();if(void 0==c)return!1;
|
||||
a[Eb]=c;return!0},Y=function(a,b){var c=a[b];if(isNaN(c)||Infinity==c||0>c)a[b]=void 0},Fd=function(a){return function(b){if("pageview"==b.get(Va)&&!a.I){a.I=!0;var c=aa(b),d=0<E(P(b,kb),"gclid").length,e=0<E(P(b,kb),"wbraid").length;(c||d||e)&&gc(function(g){c&&a.send("timing",g);(d||e)&&a.send("adtiming",g)})}}};var hc=!1,mc=function(a){if("cookie"==P(a,ac)){if(a.get(Hd)||P(a,xd)!=P(a,Q)){var b=1E3*R(a,Zb);ma(a,Q,U,b);a.data.set(xd,P(a,Q))}(a.get(Hd)||uc(a)!=P(a,I))&&ma(a,I,la,864E5);if(a.get(je)){if(b=P(a,ce)){var c=Math.min(R(a,he),1E3*R(a,Zb));c=0===c?0:Math.min(c,1E3*R(a,fe)+c-(new Date).getTime());a.data.set(he,c);var d={},e=P(a,fe),g=P(a,ie),ca=kc(P(a,Yb)),l=lc(P(a,W)),k=P(a,Na),w=P(a,Be);g&&"aw.ds"!=g?d&&(d.ua=!0):(b=["1",e,Cc(b)].join("."),0<=c&&(d&&(d.ta=!0),zc("_gac_"+Cc(k),b,ca,l,k,c,w)));le(d)}}else J(75);
|
||||
a.get(je)&&(b=P(a,Se))&&(c=Math.min(R(a,bf),1E3*R(a,Zb)),c=0===c?0:Math.min(c,1E3*R(a,Te)+c-(new Date).getTime()),a.data.set(bf,c),d={},w=P(a,Te),ca=kc(P(a,Yb)),l=lc(P(a,W)),k=P(a,Na),a=P(a,Be),b=["1",w,Cc(b)].join("."),0<=c&&(d&&(d.ta=!0),zc("_gac_gb_"+Cc(k),b,ca,l,k,c,a)),ef(d))}},ma=function(a,b,c,d){var e=nd(a,b);if(e){c=P(a,c);var g=kc(P(a,Yb)),ca=lc(P(a,W)),l=P(a,Be),k=P(a,Na);if("auto"!=ca)zc(c,e,g,ca,k,d,l)&&(hc=!0);else{J(32);for(var w=id(),Ce=0;Ce<w.length;Ce++)if(ca=w[Ce],a.data.set(W,
|
||||
ca),e=nd(a,b),zc(c,e,g,ca,k,d,l)){hc=!0;return}a.data.set(W,"auto")}}},uc=function(a){var b=Ca(P(a,la));return Xd(a,b)},nc=function(a){if("cookie"==P(a,ac)&&!hc&&(mc(a),!hc))throw"abort";},Yc=function(a){if(a.get(Wc)){var b=P(a,W),c=P(a,$b)||xa(),d=Xc("__utma",c,b);d&&(J(19),a.set(Tc,(new Date).getTime(),!0),a.set(Rc,d.R),(b=Xc("__utmz",c,b))&&d.hash==b.hash&&a.set(Sc,b.R))}},nd=function(a,b){b=Cc(P(a,b));var c=lc(P(a,W)).split(".").length;a=jc(P(a,Yb));1<a&&(c+="-"+a);return b?["GA1",c,b].join("."):
|
||||
""},Xd=function(a,b){return na(b,P(a,W),P(a,Yb))},na=function(a,b,c){if(!a||1>a.length)J(12);else{for(var d=[],e=0;e<a.length;e++){var g=a[e];var ca=g.split(".");var l=ca.shift();("GA1"==l||"1"==l)&&1<ca.length?(g=ca.shift().split("-"),1==g.length&&(g[1]="1"),g[0]*=1,g[1]*=1,ca={H:g,s:ca.join(".")}):ca=kd.test(g)?{H:[0,0],s:g}:void 0;ca&&d.push(ca)}if(1==d.length)return J(13),d[0].s;if(0==d.length)J(12);else{J(14);d=Gc(d,lc(b).split(".").length,0);if(1==d.length)return d[0].s;d=Gc(d,jc(c),1);1<d.length&&
|
||||
J(41);return d[0]&&d[0].s}}},Gc=function(a,b,c){for(var d=[],e=[],g,ca=0;ca<a.length;ca++){var l=a[ca];l.H[c]==b?d.push(l):void 0==g||l.H[c]<g?(e=[l],g=l.H[c]):l.H[c]==g&&e.push(l)}return 0<d.length?d:e},lc=function(a){return 0==a.indexOf(".")?a.substr(1):a},id=function(){var a=[],b=xa().split(".");if(4==b.length){var c=b[b.length-1];if(parseInt(c,10)==c)return["none"]}for(c=b.length-2;0<=c;c--)a.push(b.slice(c).join("."));b=M.location.hostname;eb.test(b)||vc.test(b)||a.push("none");return a},kc=
|
||||
function(a){if(!a)return"/";1<a.length&&a.lastIndexOf("/")==a.length-1&&(a=a.substr(0,a.length-1));0!=a.indexOf("/")&&(a="/"+a);return a},jc=function(a){a=kc(a);return"/"==a?1:a.split("/").length},le=function(a){a.ta&&J(77);a.na&&J(74);a.pa&&J(73);a.ua&&J(69)},ef=function(a){a.ta&&J(85);a.na&&J(86);a.pa&&J(87)};function Xc(a,b,c){"none"==b&&(b="");var d=[],e=Ca(a);a="__utma"==a?6:2;for(var g=0;g<e.length;g++){var ca=(""+e[g]).split(".");ca.length>=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){if(null==a)var c=a=1;else c=La(a),a=La(D(a,".")?a.substring(1):"."+a);for(var d=0;d<b.length;d++)if(b[d].hash==c||b[d].hash==a)return b[d]};var Jc=new RegExp(/^https?:\/\/([^\/:]+)/),De=O.google_tag_data.glBridge,Kc=RegExp("(.*)([?&#])(?:_ga=[^&#]*)(?:&?)(.*)"),od=RegExp("(.*)([?&#])(?:_gac=[^&#]*)(?:&?)(.*)");function Bc(a){if(a.get(Ze))return J(35),De.generate($e(a));var b=P(a,Q),c=P(a,I)||"";b="_ga=2."+K(pa(c+b,0)+"."+c+"-"+b);(a=af(a))?(J(44),a="&_gac=1."+K([pa(a.qa,0),a.timestamp,a.qa].join("."))):a="";return b+a}
|
||||
function Ic(a,b){var c=new Date,d=O.navigator,e=d.plugins||[];a=[a,d.userAgent,c.getTimezoneOffset(),c.getYear(),c.getDate(),c.getHours(),c.getMinutes()+b];for(b=0;b<e.length;++b)a.push(e[b].description);return La(a.join("."))}function pa(a,b){var c=new Date,d=O.navigator,e=c.getHours()+Math.floor((c.getMinutes()+b)/60);return La([a,d.userAgent,d.language||"",c.getTimezoneOffset(),c.getYear(),c.getDate()+Math.floor(e/24),(24+e)%24,(60+c.getMinutes()+b)%60].join("."))}
|
||||
var Dc=function(a){J(48);this.target=a;this.T=!1};Dc.prototype.ca=function(a,b){if(a){if(this.target.get(Ze))return De.decorate($e(this.target),a,b);if(a.tagName){if("a"==a.tagName.toLowerCase()){a.href&&(a.href=qd(this,a.href,b));return}if("form"==a.tagName.toLowerCase())return rd(this,a)}if("string"==typeof a)return qd(this,a,b)}};
|
||||
var qd=function(a,b,c){var d=Kc.exec(b);d&&3<=d.length&&(b=d[1]+(d[3]?d[2]+d[3]:""));(d=od.exec(b))&&3<=d.length&&(b=d[1]+(d[3]?d[2]+d[3]:""));a=a.target.get("linkerParam");d=b.indexOf("?");var e=b.indexOf("#");b=c?b+((-1==e?"#":"&")+a):-1==e?b+((-1===d?"?":"&")+a):b.substring(0,e)+(-1===d||d>e?"?":"&")+a+b.substring(e);b=b.replace(/&+_ga=/,"&_ga=");return b=b.replace(RegExp("&+_gac="),"&_gac=")},rd=function(a,b){if(b&&b.action)if("get"==b.method.toLowerCase()){a=a.target.get("linkerParam").split("&");
|
||||
for(var c=0;c<a.length;c++){var d=a[c].split("="),e=d[1];d=d[0];for(var g=b.childNodes||[],ca=!1,l=0;l<g.length;l++)if(g[l].name==d){g[l].setAttribute("value",e);ca=!0;break}ca||(g=M.createElement("input"),g.setAttribute("type","hidden"),g.setAttribute("name",d),g.setAttribute("value",e),b.appendChild(g))}}else"post"==b.method.toLowerCase()&&(b.action=qd(a,b.action))};
|
||||
Dc.prototype.S=function(a,b,c){function d(g){try{g=g||O.event;a:{var ca=g.target||g.srcElement;for(g=100;ca&&0<g;){if(ca.href&&ca.nodeName.match(/^a(?:rea)?$/i)){var l=ca;break a}ca=ca.parentNode;g--}l={}}("http:"==l.protocol||"https:"==l.protocol)&&sd(a,l.hostname||"")&&l.href&&(l.href=qd(e,l.href,b))}catch(k){J(26)}}var e=this;this.target.get(Ze)?De.auto(function(){return $e(e.target)},a,b?"fragment":"",c):(this.T||(this.T=!0,L(M,"mousedown",d,!1),L(M,"keyup",d,!1)),c&&L(M,"submit",function(g){g=
|
||||
g||O.event;if((g=g.target||g.srcElement)&&g.action){var ca=g.action.match(Jc);ca&&sd(a,ca[1])&&rd(e,g)}}))};Dc.prototype.$=function(a){if(a){var b=this,c=b.target.get(F);void 0!==c&&De.passthrough(function(){if(c("analytics_storage"))return{};var d={};return d._ga=b.target.get(Q),d._up="1",d},1,!0)}};function sd(a,b){if(b==M.location.hostname)return!1;for(var c=0;c<a.length;c++)if(a[c]instanceof RegExp){if(a[c].test(b))return!0}else if(0<=b.indexOf(a[c]))return!0;return!1}
|
||||
function ke(a,b){return b!=Ic(a,0)&&b!=Ic(a,-1)&&b!=Ic(a,-2)&&b!=pa(a,0)&&b!=pa(a,-1)&&b!=pa(a,-2)}function $e(a){var b=af(a),c={};c._ga=a.get(Q);c._gid=a.get(I)||void 0;c._gac=b?[b.qa,b.timestamp].join("."):void 0;b=a.get(Ae);a=Ed(a);return c._fplc=b&&"0"!==b?b:a,c}function af(a){function b(e){return void 0==e||""===e?0:Number(e)}var c=a.get(ce);if(c&&a.get(je)){var d=b(a.get(fe));if(1E3*d+b(a.get(he))<=(new Date).getTime())J(76);else return{timestamp:d,qa:c}}};var p=/^(GTM|OPT)-[A-Z0-9]+$/,Ie=/^G-[A-Z0-9]+$/,q=/;_gaexp=[^;]*/g,r=/;((__utma=)|([^;=]+=GAX?\d+\.))[^;]*/g,Aa=/^https?:\/\/[\w\-.]+\.google.com(:\d+)?\/optimize\/opt-launch\.html\?.*$/,t=function(a){function b(d,e){e&&(c+="&"+d+"="+K(e))}var c=Ge(a.type)+K(a.id);"dataLayer"!=a.B&&b("l",a.B);b("cx",a.context);b("t",a.target);b("cid",a.clientId);b("cidt",a.ka);b("gac",a.la);b("aip",a.ia);a.sync&&b("m","sync");b("cycle",a.G);a.qa&&b("gclid",a.qa);Aa.test(M.referrer)&&b("cb",String(hd()));return c},
|
||||
He=function(a,b){var c=(new Date).getTime();O[a.B]=O[a.B]||[];c={"gtm.start":c};a.sync||(c.event="gtm.js");O[a.B].push(c);2===a.type&&function(d,e,g){O[a.B].push(arguments)}("config",a.id,b)},Ke=function(a,b,c,d){c=c||{};var e=1;Ie.test(b)&&(e=2);var g={id:b,type:e,B:c.dataLayer||"dataLayer",G:!1},ca=void 0;a.get(">m")==b&&(g.G=!0);1===e?(g.ia=!!a.get("anonymizeIp"),g.sync=d,b=String(a.get("name")),"t0"!=b&&(g.target=b),G(String(a.get("trackingId")))||(g.clientId=String(a.get(Q)),g.ka=Number(a.get(n)),
|
||||
c=c.palindrome?r:q,c=(c=M.cookie.replace(/^|(; +)/g,";").match(c))?c.sort().join("").substring(1):void 0,g.la=c,g.qa=E(P(a,kb),"gclid"))):2===e&&(g.context="c",ca={allow_google_signals:a.get(Ud),allow_ad_personalization_signals:a.get(xe)});He(g,ca);return t(g)};var H={},Jd=function(a,b){b||(b=(b=P(a,V))&&"t0"!=b?Wd.test(b)?"_gat_"+Cc(P(a,Na)):"_gat_"+Cc(b):"_gat");this.Y=b},Rd=function(a,b){var c=b.get(Wb);b.set(Wb,function(e){Pd(a,e,ed);Pd(a,e,ia);var g=c(e);Qd(a,e);return g});var d=b.get(Xb);b.set(Xb,function(e){var g=d(e);if(se(e)){J(80);var ca={U:re(e,1),google:re(e,2),count:0};pe("https://stats.g.doubleclick.net/j/collect",ca.U,ca);e.set(ed,"",!0)}return g})},Pd=function(a,b,c){!1===b.get(Ud)||b.get(c)||("1"==Ca(a.Y)[0]?b.set(c,"",!0):b.set(c,""+hd(),
|
||||
!0))},Qd=function(a,b){se(b)&&zc(a.Y,"1",P(b,Yb),P(b,W),P(b,Na),6E4,P(b,Be))},se=function(a){return!!a.get(ed)&&!1!==a.get(Ud)},Ne=function(a){return!H[P(a,Na)]&&void 0===a.get(">m")&&void 0===a.get(fa)&&void 0===a.get(gd)&&void 0===a.get(oe)},re=function(a,b){var c=new ee,d=function(g){$a(g).F&&c.set($a(g).F,a.get(g))};d(hb);d(ib);d(Na);d(Q);d(ed);1==b&&(d(Ad),d(ia),d(I));!1===a.get(xe)&&c.set("npa","1");c.set($a(ld).F,Td(a));var e="";c.map(function(g,ca){e+=K(g)+"=";e+=K(""+ca)+"&"});e+="z="+
|
||||
hd();1==b?e="t=dc&aip=1&_r=3&"+e:2==b&&(e="t=sr&aip=1&_r=4&slf_rd=1&"+e);return e},Me=function(a){if(Ne(a))return H[P(a,Na)]=!0,function(b){if(b&&!H[b]){var c=Ke(a,b);Id(c);H[b]=!0}}},Wd=/^gtm\d+$/;var fd=function(a,b){a=a.model;if(!a.get("dcLoaded")){var c=new $c(Dd(a));c.set(29);a.set(Gd,c.C);b=b||{};var d;b[U]&&(d=Cc(b[U]));b=new Jd(a,d);Rd(b,a);a.set("dcLoaded",!0)}};var Sd=function(a){if(!a.get("dcLoaded")&&"cookie"==a.get(ac)){var b=new Jd(a);Pd(b,a,ed);Pd(b,a,ia);Qd(b,a);b=se(a);var c=Ne(a);b&&a.set(Md,1,!0);c&&a.set(Od,1,!0);if(b||c)a.set(ad,"d",!0),J(79),a.set(qe,{U:re(a,1),google:re(a,2),V:Me(a),count:0},!0)}};var Lc=function(){var a=O.gaGlobal=O.gaGlobal||{};return a.hid=a.hid||hd()};var wb=/^(UA|YT|MO|GP)-(\d+)-(\d+)$/,pc=function(a){function b(e,g){d.model.data.set(e,g)}function c(e,g){b(e,g);d.filters.add(e)}var d=this;this.model=new Ya;this.filters=new Ha;b(V,a[V]);b(Na,sa(a[Na]));b(U,a[U]);b(W,a[W]||xa());b(Yb,a[Yb]);b(Zb,a[Zb]);b(Hd,a[Hd]);b(Be,a[Be]);b($b,a[$b]);b(Wc,a[Wc]);b(bc,a[bc]);b(cc,a[cc]);b(Ka,a[Ka]);b(dc,a[dc]);b(ec,a[ec]);b(ac,a[ac]);b(Ad,a[Ad]);b(n,a[n]);b(Kd,a[Kd]);b(je,a[je]);b(Ze,a[Ze]);b(oe,a[oe]);b(Je,a[Je]);b(F,a[F]);b(hb,1);b(ib,"j96");c(Re,Pe);c(Qb,
|
||||
Ma);c(oa,ua);c(dd,cd);c(Rb,Oa);c(md,vb);c(Sb,nc);c(Uc,Yc);c(Tb,Ja);c(Vb,Ta);c(Vc,Hc);c(zd,yd);c(Ld,Sd);c(ze,Fe);c(Wb,Pa);c(Xb,Sa);c(Cd,Fd(this));pd(this.model);td(this.model,a[Q]);this.model.set(jb,Lc())};pc.prototype.get=function(a){return this.model.get(a)};pc.prototype.set=function(a,b){this.model.set(a,b)};
|
||||
pc.prototype.send=function(a){if(!(1>arguments.length)){if("string"===typeof arguments[0]){var b=arguments[0];var c=[].slice.call(arguments,1)}else b=arguments[0]&&arguments[0][Va],c=arguments;b&&(c=za(me[b]||[],c),c[Va]=b,this.model.set(c,void 0,!0),this.filters.D(this.model),this.model.data.m={})}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))};
|
||||
var td=function(a,b){var c=P(a,U);a.data.set(la,"_ga"==c?"_gid":c+"_gid");if("cookie"==P(a,ac)){hc=!1;c=Ca(P(a,U));c=Xd(a,c);if(!c){c=P(a,W);var d=P(a,$b)||xa();c=Xc("__utma",d,c);void 0!=c?(J(10),c=c.O[1]+"."+c.O[2]):c=void 0}c&&(hc=!0);if(d=c&&!a.get(Hd))if(d=c.split("."),2!=d.length)d=!1;else if(d=Number(d[1])){var e=R(a,Zb);d=d+e<(new Date).getTime()/1E3}else d=!1;d&&(c=void 0);c&&(a.data.set(xd,c),a.data.set(Q,c),(c=uc(a))&&a.data.set(I,c));a.get(je)&&(c=a.get(ce),d=a.get(ie),!c||d&&"aw.ds"!=
|
||||
d)&&(c={},d=(M?df(c):{})[P(a,Na)],le(c),d&&0!=d.length&&(c=d[0],a.data.set(fe,c.timestamp/1E3),a.data.set(ce,c.qa)));a.get(je)&&(c=a.get(Se),d={},e=(M?df(d,"_gac_gb",!0):{})[P(a,Na)],ef(d),e&&0!=e.length&&(d=e[0],e=d.qa,c&&c!==e||(d.labels&&d.labels.length&&(e+="."+d.labels.join(".")),a.data.set(Te,d.timestamp/1E3),a.data.set(Se,e))))}if(a.get(Hd)){c=be("_ga",!!a.get(cc));var g=be("_gl",!!a.get(cc));d=De.get(a.get(cc));e=d._ga;g&&0<g.indexOf("_ga*")&&!e&&J(30);if(b||!a.get(Je))g=!1;else if(g=a.get(F),
|
||||
void 0===g||g("analytics_storage"))g=!1;else{J(84);a.data.set(Le,1);if(g=d._up)if(g=Jc.exec(M.referrer)){g=g[1];var ca=M.location.hostname;g=ca===g||0<=ca.indexOf("."+g)||0<=g.indexOf("."+ca)?!0:!1}else g=!1;g=g?!0:!1}ca=d.gclid;var l=d._gac;if(c||e||ca||l)if(c&&e&&J(36),a.get(bc)||ye(a.get(Kd))||g){if(e&&(J(38),a.data.set(Q,e),d._gid&&(J(51),a.data.set(I,d._gid))),ca?(J(82),a.data.set(ce,ca),d.gclsrc&&a.data.set(ie,d.gclsrc)):l&&(e=l.split("."))&&2===e.length&&(J(37),a.data.set(ce,e[0]),a.data.set(fe,
|
||||
e[1])),(d=d._fplc)&&P(a,oe)&&(J(83),a.data.set(Ae,d)),c)b:if(d=c.indexOf("."),-1==d)J(22);else{e=c.substring(0,d);g=c.substring(d+1);d=g.indexOf(".");c=g.substring(0,d);g=g.substring(d+1);if("1"==e){if(d=g,ke(d,c)){J(23);break b}}else if("2"==e){d=g.indexOf("-");e="";0<d?(e=g.substring(0,d),d=g.substring(d+1)):d=g.substring(1);if(ke(e+d,c)){J(53);break b}e&&(J(2),a.data.set(I,e))}else{J(22);break b}J(11);a.data.set(Q,d);if(c=be("_gac",!!a.get(cc)))c=c.split("."),"1"!=c[0]||4!=c.length?J(72):ke(c[3],
|
||||
c[1])?J(71):(a.data.set(ce,c[3]),a.data.set(fe,c[2]),J(70))}}else J(21)}b&&(J(9),a.data.set(Q,K(b)));a.get(Q)||(b=(b=O.gaGlobal)&&b.from_cookie&&"cookie"!==P(a,ac)?void 0:(b=b&&b.vid)&&-1!==b.search(jd)?b:void 0,b?(J(17),a.data.set(Q,b)):(J(8),a.data.set(Q,ra())));a.get(I)||(J(3),a.data.set(I,ra()));mc(a);b=O.gaGlobal=O.gaGlobal||{};c=P(a,Q);a=c===P(a,xd);if(void 0==b.vid||a&&!b.from_cookie)b.vid=c,b.from_cookie=a},pd=function(a){var b=O.navigator,c=O.screen,d=M.location,e=a.set;a:{var g=!!a.get(ec),
|
||||
ca=!!a.get(Kd);var l=M.referrer;if(/^(https?|android-app):\/\//i.test(l)){if(g)break a;g="//"+M.location.hostname;if(!de(l,g)){if(ca&&(ca=g.replace(/\./g,"-")+".cdn.ampproject.org",de(l,ca))){l=void 0;break a}break a}}l=void 0}e.call(a,lb,l);d&&(e=d.pathname||"","/"!=e.charAt(0)&&(J(31),e="/"+e),a.set(kb,d.protocol+"//"+d.hostname+e+d.search));c&&a.set(qb,c.width+"x"+c.height);c&&a.set(pb,c.colorDepth+"-bit");c=M.documentElement;l=(e=M.body)&&e.clientWidth&&e.clientHeight;ca=[];c&&c.clientWidth&&
|
||||
c.clientHeight&&("CSS1Compat"===M.compatMode||!l)?ca=[c.clientWidth,c.clientHeight]:l&&(ca=[e.clientWidth,e.clientHeight]);c=0>=ca[0]||0>=ca[1]?"":ca.join("x");a.set(rb,c);c=a.set;var k;if((e=(e=O.navigator)?e.plugins:null)&&e.length)for(l=0;l<e.length&&!k;l++)ca=e[l],-1<ca.name.indexOf("Shockwave Flash")&&(k=ca.description);if(!k)try{var w=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");k=w.GetVariable("$version")}catch(Ce){}if(!k)try{w=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"),k=
|
||||
"WIN 6,0,21,0",w.AllowScriptAccess="always",k=w.GetVariable("$version")}catch(Ce){}if(!k)try{w=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"),k=w.GetVariable("$version")}catch(Ce){}k&&(w=k.match(/[\d]+/g))&&3<=w.length&&(k=w[0]+"."+w[1]+" r"+w[2]);c.call(a,tb,k||void 0);a.set(ob,M.characterSet||M.charset);a.set(sb,b&&"function"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb,(b&&(b.language||b.browserLanguage)||"").toLowerCase());a.data.set(ce,be("gclid",!0));a.data.set(ie,be("gclsrc",!0));
|
||||
a.data.set(fe,Math.round((new Date).getTime()/1E3));a.get(ce)||(a.data.set(Se,be("wbraid",!0)),a.data.set(Te,Math.round((new Date).getTime()/1E3)));if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(k=0;k<b.length;++k)(D(b[k],"utm_id")||D(b[k],"utm_campaign")||D(b[k],"utm_source")||D(b[k],"utm_medium")||D(b[k],"utm_term")||D(b[k],"utm_content")||D(b[k],"gclid")||D(b[k],"dclid")||D(b[k],"gclsrc")||D(b[k],"wbraid"))&&d.push(b[k]);0<d.length&&(b="#"+d.join("&"),a.set(kb,a.get(kb)+b))}},
|
||||
me={pageview:[mb],event:[ub,xb,yb,zb],social:[Bb,Cb,Db],timing:[Mb,Nb,Pb,Ob]};var rc=function(a){if("prerender"==M.visibilityState)return!1;a();return!0},z=function(a){if(!rc(a)){J(16);var b=!1,c=function(){if(!b&&rc(a)){b=!0;var d=c,e=M;e.removeEventListener?e.removeEventListener("visibilitychange",d,!1):e.detachEvent&&e.detachEvent("onvisibilitychange",d)}};L(M,"visibilitychange",c)}};var te=/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=te.exec(a[0]);null!=b&&4==b.length&&(this.da=b[1]||"t0",this.K=b[2]||"",this.methodName=b[3],this.aa=[].slice.call(a,1),this.K||(this.A="create"==this.methodName,this.i="require"==this.methodName,this.g="provide"==this.methodName,this.ba="remove"==this.methodName),this.i&&(3<=this.aa.length?(this.X=this.aa[1],this.W=this.aa[2]):this.aa[1]&&(qa(this.aa[1])?this.X=this.aa[1]:this.W=this.aa[1])));b=a[1];a=a[2];
|
||||
if(!this.methodName)throw"abort";if(this.i&&(!qa(b)||""==b))throw"abort";if(this.g&&(!qa(b)||""==b||!ea(a)))throw"abort";if(ud(this.da)||ud(this.K))throw"abort";if(this.g&&"t0"!=this.da)throw"abort";}};function ud(a){return 0<=a.indexOf(".")||0<=a.indexOf(":")};var Yd,Zd,$d,A;Yd=new ee;$d=new ee;A=new ee;Zd={ec:45,ecommerce:46,linkid:47};
|
||||
var u=function(a,b,c){b==N||b.get(V);var d=Yd.get(a);if(!ea(d))return!1;b.plugins_=b.plugins_||new ee;if(b.plugins_.get(a))return!0;b.plugins_.set(a,new d(b,c||{}));return!0},y=function(a,b,c,d,e){if(!ea(Yd.get(b))&&!$d.get(b)){Zd.hasOwnProperty(b)&&J(Zd[b]);var g=void 0;if(p.test(b)){J(52);a=N.j(a);if(!a)return!0;c=Ke(a.model,b,d,e);g=function(){Z.D(["provide",b,function(){}]);var l=O[d&&d.dataLayer||"dataLayer"];l&&l.hide&&ea(l.hide.end)&&l.hide[b]&&(l.hide.end(),l.hide.end=void 0)}}!c&&Zd.hasOwnProperty(b)?
|
||||
(J(39),c=b+".js"):J(43);if(c){var ca;d&&(ca=d[oe]);qa(ca)||(ca=void 0);a=ae(cf(c,ca));!ca||ne(a.protocol)&&B(a)||(a=ae(cf(c)));ne(a.protocol)&&B(a)&&(Id(a.url,void 0,e,void 0,g),$d.set(b,!0))}}},v=function(a,b){var c=A.get(a)||[];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;c<b.length;c++)b[c]();A.set(a,[])},B=function(a){var b=ae(M.location.href);if(D(a.url,Ge(1))||D(a.url,Ge(2)))return!0;if(a.query||0<=a.url.indexOf("?")||0<=a.path.indexOf("://"))return!1;if(a.host==
|
||||
b.host&&a.port==b.port||jf&&(b=M.createElement("a"),b.href=jf,b=kf(b),a.host===b[0]&&a.port===b[1]))return!0;b="http:"==a.protocol?80:443;return"www.google-analytics.com"==a.host&&(a.port||b)==b&&D(a.path,"/plugins/")?!0:!1},ne=function(a){var b=M.location.protocol;return"https:"==a||a==b?!0:"http:"!=a?!1:"http:"==b},kf=function(a){var b=a.hostname||"",c=0<=b.indexOf("]");b=b.split(c?"]":":")[0].toLowerCase();c&&(b+="]");c=(a.protocol||"").toLowerCase();c=1*a.port||("http:"==c?80:"https:"==c?443:
|
||||
"");a=a.pathname||"";D(a,"/")||(a="/"+a);return[b,""+c,a]},ae=function(a){var b=M.createElement("a");b.href=M.location.href;var c=(b.protocol||"").toLowerCase(),d=kf(b),e=b.search||"",g=c+"//"+d[0]+(d[1]?":"+d[1]:"");D(a,"//")?a=c+a:D(a,"/")?a=g+a:!a||D(a,"?")?a=g+d[2]+(a||e):0>a.split("/")[0].indexOf(":")&&(a=g+d[2].substring(0,d[2].lastIndexOf("/"))+"/"+a);b.href=a;c=kf(b);return{protocol:(b.protocol||"").toLowerCase(),host:c[0],port:c[1],path:c[2],query:b.search||"",url:a||""}},cf=function(a,b){return a&&
|
||||
0<=a.indexOf("/")?a:(b||bd(!1))+"/plugins/ua/"+a};var Z={ga:function(){Z.fa=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.fa.concat(b);for(Z.fa=[];0<b.length&&!Z.v(b[0])&&!(b.shift(),0<Z.fa.length););Z.fa=Z.fa.concat(b)};Z.ra=function(a){N.q&&(300===N.q.length&&(N.q.shift(),N.qd++),N.q.push(a))};Z.J=function(a){for(var b=[],c=0;c<arguments.length;c++)try{var d=new sc(arguments[c]);d.g?C(d.aa[0],d.aa[1]):(d.i&&(d.ha=y(d.da,d.aa[0],d.X,d.W)),b.push(d));Z.ra(arguments[c])}catch(e){}return b};
|
||||
Z.v=function(a){try{if(a.u)a.u.call(O,N.j("t0"));else{var b=a.da==gb?N:N.j(a.da);if(a.A){if("t0"==a.da&&(b=N.create.apply(N,a.aa),null===b))return!0}else if(a.ba)N.remove(a.da);else if(b)if(a.i){if(a.ha&&(a.ha=y(a.da,a.aa[0],a.X,a.W)),!u(a.aa[0],b,a.W))return!0}else if(a.K){var c=a.methodName,d=a.aa,e=b.plugins_.get(a.K);e[c].apply(e,d)}else b[a.methodName].apply(b,a.aa)}}catch(g){}};var N=function(a){J(1);Z.D.apply(Z,[arguments])};N.h={};N.P=[];N.L=0;N.ya=0;N.answer=42;var we=[Na,W,V];N.create=function(a){var b=za(we,[].slice.call(arguments));b[V]||(b[V]="t0");var c=""+b[V];if(N.h[c])return N.h[c];if(da(b))return null;b=new pc(b);N.h[c]=b;N.P.push(b);c=qc().tracker_created;if(ea(c))try{c(b)}catch(d){}return b};N.remove=function(a){for(var b=0;b<N.P.length;b++)if(N.P[b].get(V)==a){N.P.splice(b,1);N.h[a]=null;break}};N.j=function(a){return N.h[a]};N.getAll=function(){return N.P.slice(0)};
|
||||
N.N=function(){"ga"!=gb&&J(49);var a=O[gb];if(!a||42!=a.answer){N.L=a&&a.l;N.ya=1*new Date;N.loaded=!0;var b=a&&a.q,c=ka(b);a=[];c?a=b.slice(0):J(50);N.q=c?b:[];N.q.splice(0);N.qd=0;b=O[gb]=N;X("create",b,b.create);X("remove",b,b.remove);X("getByName",b,b.j,5);X("getAll",b,b.getAll,6);b=pc.prototype;X("get",b,b.get,7);X("set",b,b.set,4);X("send",b,b.send);X("requireSync",b,b.ma);b=Ya.prototype;X("get",b,b.get);X("set",b,b.set);if("https:"!=M.location.protocol&&!Ba){a:{b=M.getElementsByTagName("script");
|
||||
for(c=0;c<b.length&&100>c;c++){var d=b[c].src;if(d&&0==d.indexOf(bd(!0)+"/analytics")){b=!0;break a}}b=!1}b&&(Ba=!0)}(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C("linker",Dc);X("decorate",b,b.ca,20);X("autoLink",b,b.S,25);X("passthrough",b,b.$,25);C("displayfeatures",fd);C("adfeatures",fd);Z.D.apply(N,a)}};var gf=N.N,hf=O[gb];hf&&hf.r?gf():z(gf);z(function(){Z.D(["provide","render",ua])});})(window);
|
||||
100
static/assets/analytics_002.js
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
(function(){/*
|
||||
|
||||
Copyright The Closure Library Authors.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
var aa=this||self,l=function(a,b){a=a.split(".");var c=aa;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}:c[d]=b};var m=function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])},q=function(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1};var r=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;/*
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
var t=window,u=window.history,v=document,w=navigator,x=function(a,b){v.addEventListener?v.addEventListener(a,b,!1):v.attachEvent&&v.attachEvent("on"+a,b)};var y={},z=function(){y.TAGGING=y.TAGGING||[];y.TAGGING[1]=!0};var A=/:[0-9]+$/,B=function(a,b,c){a=a.split("&");for(var d=0;d<a.length;d++){var e=a[d].split("=");if(decodeURIComponent(e[0]).replace(/\+/g," ")===b)return b=e.slice(1).join("="),c?b:decodeURIComponent(b).replace(/\+/g," ")}},E=function(a,b){b&&(b=String(b).toLowerCase());if("protocol"===b||"port"===b)a.protocol=C(a.protocol)||C(t.location.protocol);"port"===b?a.port=String(Number(a.hostname?a.port:t.location.port)||("http"==a.protocol?80:"https"==a.protocol?443:"")):"host"===b&&(a.hostname=(a.hostname||
|
||||
t.location.hostname).replace(A,"").toLowerCase());return D(a,b,void 0,void 0,void 0)},D=function(a,b,c,d,e){var f=C(a.protocol);b&&(b=String(b).toLowerCase());switch(b){case "url_no_fragment":d="";a&&a.href&&(d=a.href.indexOf("#"),d=0>d?a.href:a.href.substr(0,d));a=d;break;case "protocol":a=f;break;case "host":a=a.hostname.replace(A,"").toLowerCase();c&&(d=/^www\d*\./.exec(a))&&d[0]&&(a=a.substr(d[0].length));break;case "port":a=String(Number(a.port)||("http"==f?80:"https"==f?443:""));break;case "path":a.pathname||
|
||||
a.hostname||z();a="/"==a.pathname.substr(0,1)?a.pathname:"/"+a.pathname;a=a.split("/");0<=(d||[]).indexOf(a[a.length-1])&&(a[a.length-1]="");a=a.join("/");break;case "query":a=a.search.replace("?","");e&&(a=B(a,e,void 0));break;case "extension":a=a.pathname.split(".");a=1<a.length?a[a.length-1]:"";a=a.split("/")[0];break;case "fragment":a=a.hash.replace("#","");break;default:a=a&&a.href}return a},C=function(a){return a?a.replace(":","").toLowerCase():""},F=function(a){var b=v.createElement("a");a&&
|
||||
(b.href=a);var c=b.pathname;"/"!==c[0]&&(a||z(),c="/"+c);a=b.hostname.replace(A,"");return{href:b.href,protocol:b.protocol,host:b.host,hostname:a,pathname:c,search:b.search,hash:b.hash,port:b.port}};function G(){for(var a=H,b={},c=0;c<a.length;++c)b[a[c]]=c;return b}function I(){var a="ABCDEFGHIJKLMNOPQRSTUVWXYZ";a+=a.toLowerCase()+"0123456789-_";return a+"."}var H,J;function K(a){H=H||I();J=J||G();for(var b=[],c=0;c<a.length;c+=3){var d=c+1<a.length,e=c+2<a.length,f=a.charCodeAt(c),g=d?a.charCodeAt(c+1):0,h=e?a.charCodeAt(c+2):0,k=f>>2;f=(f&3)<<4|g>>4;g=(g&15)<<2|h>>6;h&=63;e||(h=64,d||(g=64));b.push(H[k],H[f],H[g],H[h])}return b.join("")}
|
||||
function ba(a){function b(k){for(;d<a.length;){var n=a.charAt(d++),p=J[n];if(null!=p)return p;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n);}return k}H=H||I();J=J||G();for(var c="",d=0;;){var e=b(-1),f=b(0),g=b(64),h=b(64);if(64===h&&-1===e)return c;c+=String.fromCharCode(e<<2|f>>4);64!=g&&(c+=String.fromCharCode(f<<4&240|g>>2),64!=h&&(c+=String.fromCharCode(g<<6&192|h)))}};var L;var M=void 0,O=function(){var a=ca,b=da,c=N(),d=function(g){a(g.target||g.srcElement||{})},e=function(g){b(g.target||g.srcElement||{})};if(!c.init){x("mousedown",d);x("keyup",d);x("submit",e);var f=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){b(this);f.call(this)};c.init=!0}},P=function(a,b,c,d,e){a={callback:a,domains:b,fragment:2===c,placement:c,forms:d,sameHost:e};N().decorators.push(a)},Q=function(a,b,c){for(var d=N().decorators,e={},f=0;f<d.length;++f){var g=d[f],
|
||||
h;if(h=!c||g.forms)a:{h=g.domains;var k=a,n=!!g.sameHost;if(h&&(n||k!==v.location.hostname))for(var p=0;p<h.length;p++)if(h[p]instanceof RegExp){if(h[p].test(k)){h=!0;break a}}else if(0<=k.indexOf(h[p])||n&&0<=h[p].indexOf(k)){h=!0;break a}h=!1}h&&(h=g.placement,void 0==h&&(h=g.fragment?2:1),h===b&&m(e,g.callback()))}return e};function N(){var a={};var b=t.google_tag_data;t.google_tag_data=void 0===b?a:b;a=t.google_tag_data;b=a.gl;b&&b.decorators||(b={decorators:[]},a.gl=b);return b};var ea=/(.*?)\*(.*?)\*(.*)/,fa=/([^?#]+)(\?[^#]*)?(#.*)?/;function R(a){return new RegExp("(.*?)(^|&)"+a+"=([^&]*)&?(.*)")}var T=function(a,b){var c=[],d;for(d in a)if(a.hasOwnProperty(d)){var e=a[d];void 0!==e&&e===e&&null!==e&&"[object Object]"!==e.toString()&&(c.push(d),c.push(K(String(e))))}a=c.join("*");void 0!==b&&(c="xp_"+b,b=ha[b](a),a=a+"*"+[c,K(String(b))].join("*"));return["1",S(a),a].join("*")};
|
||||
function S(a,b){a=[t.navigator.userAgent,(new Date).getTimezoneOffset(),w.userLanguage||w.language,Math.floor((new Date(Date.now())).getTime()/60/1E3)-(void 0===b?0:b),a].join("*");if(!(b=L)){b=Array(256);for(var c=0;256>c;c++){for(var d=c,e=0;8>e;e++)d=d&1?d>>>1^3988292384:d>>>1;b[c]=d}}L=b;b=4294967295;for(c=0;c<a.length;c++)b=b>>>8^L[(b^a.charCodeAt(c))&255];return((b^-1)>>>0).toString(36)}var U={},ha=(U[1]=ia,U[2]=ja,U[3]=ka,U);function ia(){return"CHECKSUM_EXP_DISABLED"}
|
||||
function ja(){return"CHECKSUM_EXP_DISABLED"}function la(){w.userAgentData&&w.userAgentData.getHighEntropyValues(["architecture","model","bitness","platformVersion","uaFullVersion"]).then(function(){})}function ka(){return"CHECKSUM_EXP_DISABLED"}function ma(a){return function(b){var c=F(t.location.href),d=c.search.replace("?","");var e=B(d,"_gl",!0);b.query=V(e||"")||{};e=E(c,"fragment");var f=e.match(R("_gl"));b.fragment=V(f&&f[3]||"")||{};a&&na(c,d,e)}}
|
||||
function W(a,b){if(a=R(a).exec(b)){var c=a[2],d=a[4];b=a[1];d&&(b=b+c+d)}return b}function na(a,b,c){function d(f,g){f=W("_gl",f);f.length&&(f=g+f);return f}if(u&&u.replaceState){var e=R("_gl");if(e.test(b)||e.test(c))a=E(a,"path"),b=d(b,"?"),c=d(c,"#"),u.replaceState({},void 0,""+a+b+c)}}
|
||||
var V=function(a){var b=void 0===b?3:b;try{if(a){a:{for(var c=0;3>c;++c){var d=ea.exec(a);if(d){var e=d;break a}a=decodeURIComponent(a)}e=void 0}if(e&&"1"===e[1]){var f=e[2],g=e[3];a:{for(e=0;e<b;++e)if(f===S(g,e)){var h=!0;break a}h=!1}if(h){b={};var k=g?g.split("*"):[];for(g=0;g<k.length;g+=2)b[k[g]]=ba(k[g+1]);return b}}}}catch(n){}};
|
||||
function X(a,b,c,d){function e(k){k=W(a,k);var n=k.charAt(k.length-1);k&&"&"!==n&&(k+="&");return k+h}d=void 0===d?!1:d;var f=fa.exec(c);if(!f)return"";c=f[1];var g=f[2]||"";f=f[3]||"";var h=a+"="+b;d?f="#"+e(f.substring(1)):g="?"+e(g.substring(1));return""+c+g+f}function Y(a,b){var c="FORM"===(a.tagName||"").toUpperCase(),d=Q(b,1,c),e=Q(b,2,c);b=Q(b,3,c);var f=M;q(d)&&(d=T(d,f),c?oa("_gl",d,a):Z("_gl",d,a,!1));!c&&q(e)&&(c=T(e),Z("_gl",c,a,!0));for(var g in b)b.hasOwnProperty(g)&&pa(g,b[g],a)}
|
||||
function pa(a,b,c,d){if(c.tagName){if("a"===c.tagName.toLowerCase())return Z(a,b,c,d);if("form"===c.tagName.toLowerCase())return oa(a,b,c)}if("string"==typeof c)return X(a,b,c,d)}function Z(a,b,c,d){c.href&&(a=X(a,b,c.href,void 0===d?!1:d),r.test(a)&&(c.href=a))}
|
||||
function oa(a,b,c){if(c&&c.action){var d=(c.method||"").toLowerCase();if("get"===d){d=c.childNodes||[];for(var e=!1,f=0;f<d.length;f++){var g=d[f];if(g.name===a){g.setAttribute("value",b);e=!0;break}}e||(d=v.createElement("input"),d.setAttribute("type","hidden"),d.setAttribute("name",a),d.setAttribute("value",b),c.appendChild(d))}else"post"===d&&(a=X(a,b,c.action),r.test(a)&&(c.action=a))}}
|
||||
function ca(a){try{a:{for(var b=100;a&&0<b;){if(a.href&&a.nodeName.match(/^a(?:rea)?$/i)){var c=a;break a}a=a.parentNode;b--}c=null}if(c){var d=c.protocol;"http:"!==d&&"https:"!==d||Y(c,c.hostname)}}catch(e){}}function da(a){try{if(a.action){var b=E(F(a.action),"host");Y(a,b)}}catch(c){}};l("google_tag_data.glBridge.auto",function(a,b,c,d,e){O();void 0!==e&&(M=e);3===e&&la();P(a,b,"fragment"===c?2:1,!!d,!1)});l("google_tag_data.glBridge.passthrough",function(a,b,c,d){O();void 0!==d&&(M=d);P(a,[D(t.location,"host",!0)],b,!!c,!0)});l("google_tag_data.glBridge.decorate",function(a,b,c){a=T(a);return pa("_gl",a,b,!!c)});l("google_tag_data.glBridge.generate",T);
|
||||
l("google_tag_data.glBridge.get",function(a,b){var c=ma(!!b);b=N();b.data||(b.data={query:{},fragment:{}},c(b.data));c={};if(b=b.data)m(c,b.query),a&&m(c,b.fragment);return c});})(window);
|
||||
(function(){function La(a){var b=1,c;if(a)for(b=0,c=a.length-1;0<=c;c--){var d=a.charCodeAt(c);b=(b<<6&268435455)+d+(d<<14);d=b&266338304;b=0!=d?b^d>>21:b}return b};/*
|
||||
|
||||
Copyright The Closure Library Authors.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
var $c=function(a){this.C=a||[]};$c.prototype.set=function(a){this.C[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b<this.C.length;b++)this.C[b]&&(a[Math.floor(b/6)]^=1<<b%6);for(b=0;b<a.length;b++)a[b]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(a[b]||0);return a.join("")+"~"};var ha=window.GoogleAnalyticsObject,wa;if(wa=void 0!=ha)wa=-1<(ha.constructor+"").indexOf("String");var ya;if(ya=wa){var fc=window.GoogleAnalyticsObject;ya=fc?fc.replace(/^[\s\xa0]+|[\s\xa0]+$/g,""):""}var gb=ya||"ga",jd=/^(?:utma\.)?\d+\.\d+$/,kd=/^amp-[\w.-]{22,64}$/,Ba=!1;var vd=new $c;function J(a){vd.set(a)}var Td=function(a){a=Dd(a);a=new $c(a);for(var b=vd.C.slice(),c=0;c<a.C.length;c++)b[c]=b[c]||a.C[c];return(new $c(b)).encode()},Dd=function(a){a=a.get(Gd);ka(a)||(a=[]);return a};var ea=function(a){return"function"==typeof a},ka=function(a){return"[object Array]"==Object.prototype.toString.call(Object(a))},qa=function(a){return void 0!=a&&-1<(a.constructor+"").indexOf("String")},D=function(a,b){return 0==a.indexOf(b)},sa=function(a){return a?a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,""):""},ra=function(){for(var a=O.navigator.userAgent+(M.cookie?M.cookie:"")+(M.referrer?M.referrer:""),b=a.length,c=O.history.length;0<c;)a+=c--^b++;return[hd()^La(a)&2147483647,Math.round((new Date).getTime()/
|
||||
1E3)].join(".")},ta=function(a){var b=M.createElement("img");b.width=1;b.height=1;b.src=a;return b},ua=function(){},K=function(a){if(encodeURIComponent instanceof Function)return encodeURIComponent(a);J(28);return a},L=function(a,b,c,d){try{a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent("on"+b,c)}catch(e){J(27)}},f=/^[\w\-:/.?=&%!\[\]]+$/,Nd=/^[\w+/_-]+[=]{0,2}$/,ff=null,Id=function(a,b,c,d,e){if(!ff){ff={createScriptURL:function(ca){return ca},createHTML:function(ca){return ca}};
|
||||
try{ff=window.trustedTypes.createPolicy("google-analytics",ff)}catch(ca){}}if(a){var g=M.querySelector&&M.querySelector("script[nonce]")||null;g=g?g.nonce||g.getAttribute&&g.getAttribute("nonce")||"":"";c?(e=d="",b&&f.test(b)&&(d=' id="'+b+'"'),g&&Nd.test(g)&&(e=' nonce="'+g+'"'),f.test(a)&&M.write(ff.createHTML("<script"+d+e+' src="'+a+'">\x3c/script>'))):(c=M.createElement("script"),c.type="text/javascript",c.async=!0,c.src=ff.createScriptURL(a),d&&(c.onload=d),e&&(c.onerror=e),b&&(c.id=b),g&&c.setAttribute("nonce",
|
||||
g),a=M.getElementsByTagName("script")[0],a.parentNode.insertBefore(c,a))}},be=function(a,b){return E(M.location[b?"href":"search"],a)},E=function(a,b){return(a=a.match("(?:&|#|\\?)"+K(b).replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")+"=([^&#]*)"))&&2==a.length?a[1]:""},xa=function(){var a=""+M.location.hostname;return 0==a.indexOf("www.")?a.substring(4):a},de=function(a,b){var c=a.indexOf(b);if(5==c||6==c)if(a=a.charAt(c+b.length),"/"==a||"?"==a||""==a||":"==a)return!0;return!1},za=function(a,b){if(1==
|
||||
b.length&&null!=b[0]&&"object"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e<d;e++)if("object"===typeof b[e]){for(var g in b[e])b[e].hasOwnProperty(g)&&(c[g]=b[e][g]);break}else e<a.length&&(c[a[e]]=b[e]);return c},Ee=function(a,b){for(var c=0;c<a.length;c++)if(b==a[c])return!0;return!1};var ee=function(){this.oa=[];this.ea={};this.m={}};ee.prototype.set=function(a,b,c){this.oa.push(a);c?this.m[":"+a]=b:this.ea[":"+a]=b};ee.prototype.get=function(a){return this.m.hasOwnProperty(":"+a)?this.m[":"+a]:this.ea[":"+a]};ee.prototype.map=function(a){for(var b=0;b<this.oa.length;b++){var c=this.oa[b],d=this.get(c);d&&a(c,d)}};var O=window,M=document,jf=document.currentScript?document.currentScript.src:"",va=function(a,b){return setTimeout(a,b)};var Qa=window,Za=document,G=function(a){var b=Qa._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===Qa["ga-disable-"+a])return!0;try{var c=Qa.external;if(c&&c._gaUserPrefs&&"oo"==c._gaUserPrefs)return!0}catch(g){}a=[];b=String(Za.cookie).split(";");for(c=0;c<b.length;c++){var d=b[c].split("="),e=d[0].replace(/^\s*|\s*$/g,"");e&&"AMP_TOKEN"==e&&((d=d.slice(1).join("=").replace(/^\s*|\s*$/g,""))&&(d=decodeURIComponent(d)),a.push(d))}for(b=0;b<a.length;b++)if("$OPT_OUT"==a[b])return!0;return Za.getElementById("__gaOptOutExtension")?
|
||||
!0:!1};var Ca=function(a){var b=[],c=M.cookie.split(";");a=new RegExp("^\\s*"+a+"=\\s*(.*?)\\s*$");for(var d=0;d<c.length;d++){var e=c[d].match(a);e&&b.push(e[1])}return b},zc=function(a,b,c,d,e,g,ca){e=G(e)?!1:eb.test(M.location.hostname)||"/"==c&&vc.test(d)?!1:!0;if(!e)return!1;b&&1200<b.length&&(b=b.substring(0,1200));c=a+"="+b+"; path="+c+"; ";g&&(c+="expires="+(new Date((new Date).getTime()+g)).toGMTString()+"; ");d&&"none"!==d&&(c+="domain="+d+";");ca&&(c+=ca+";");d=M.cookie;M.cookie=c;if(!(d=d!=M.cookie))a:{a=
|
||||
Ca(a);for(d=0;d<a.length;d++)if(b==a[d]){d=!0;break a}d=!1}return d},Cc=function(a){return encodeURIComponent?encodeURIComponent(a).replace(/\(/g,"%28").replace(/\)/g,"%29"):a},vc=/^(www\.)?google(\.com?)?(\.[a-z]{2})?$/,eb=/(^|\.)doubleclick\.net$/i;var Oe=function(a){var b=[],c=M.cookie.split(";");a=new RegExp("^\\s*"+(a||"_gac")+"_(UA-\\d+-\\d+)=\\s*(.+?)\\s*$");for(var d=0;d<c.length;d++){var e=c[d].match(a);e&&b.push({ja:e[1],value:e[2],timestamp:Number(e[2].split(".")[1])||0})}b.sort(function(g,ca){return ca.timestamp-g.timestamp});return b};
|
||||
function df(a,b,c){b=Oe(b);var d={};if(!b||!b.length)return d;for(var e=0;e<b.length;e++){var g=b[e].value.split(".");if("1"!==g[0]||c&&3>g.length||!c&&3!==g.length)a&&(a.na=!0);else if(Number(g[1])){d[b[e].ja]?a&&(a.pa=!0):d[b[e].ja]=[];var ca={version:g[0],timestamp:1E3*Number(g[1]),qa:g[2]};c&&3<g.length&&(ca.labels=g.slice(3));d[b[e].ja].push(ca)}}return d};var Fa,Ga,fb,Ab,ja=/^https?:\/\/[^/]*cdn\.ampproject\.org\//,Ue=/^(?:www\.|m\.|amp\.)+/,Ub=[],da=function(a){if(ye(a[Kd])){if(void 0===Ab){var b;if(b=(b=De.get())&&b._ga||void 0)Ab=b,J(81)}if(void 0!==Ab)return a[Q]||(a[Q]=Ab),!1}if(a[Kd]){J(67);if(a[ac]&&"cookie"!=a[ac])return!1;if(void 0!==Ab)a[Q]||(a[Q]=Ab);else{a:{b=String(a[W]||xa());var c=String(a[Yb]||"/"),d=Ca(String(a[U]||"_ga"));b=na(d,b,c);if(!b||jd.test(b))b=!0;else if(b=Ca("AMP_TOKEN"),0==b.length)b=!0;else{if(1==b.length&&(b=decodeURIComponent(b[0]),
|
||||
"$RETRIEVING"==b||"$OPT_OUT"==b||"$ERROR"==b||"$NOT_FOUND"==b)){b=!0;break a}b=!1}}if(b&&tc(ic,String(a[Na])))return!0}}return!1},ic=function(){Z.D([ua])},tc=function(a,b){var c=Ca("AMP_TOKEN");if(1<c.length)return J(55),!1;c=decodeURIComponent(c[0]||"");if("$OPT_OUT"==c||"$ERROR"==c||G(b))return J(62),!1;if(!ja.test(M.referrer)&&"$NOT_FOUND"==c)return J(68),!1;if(void 0!==Ab)return J(56),va(function(){a(Ab)},0),!0;if(Fa)return Ub.push(a),!0;if("$RETRIEVING"==c)return J(57),va(function(){tc(a,b)},
|
||||
1E4),!0;Fa=!0;c&&"$"!=c[0]||(xc("$RETRIEVING",3E4),setTimeout(Mc,3E4),c="");return Pc(c,b)?(Ub.push(a),!0):!1},Pc=function(a,b,c){if(!window.JSON)return J(58),!1;var d=O.XMLHttpRequest;if(!d)return J(59),!1;var e=new d;if(!("withCredentials"in e))return J(60),!1;e.open("POST",(c||"https://ampcid.google.com/v1/publisher:getClientId")+"?key=AIzaSyA65lEHUEizIsNtlbNo-l2K18dT680nsaM",!0);e.withCredentials=!0;e.setRequestHeader("Content-Type","text/plain");e.onload=function(){Fa=!1;if(4==e.readyState){try{200!=
|
||||
e.status&&(J(61),Qc("","$ERROR",3E4));var g=JSON.parse(e.responseText);g.optOut?(J(63),Qc("","$OPT_OUT",31536E6)):g.clientId?Qc(g.clientId,g.securityToken,31536E6):!c&&g.alternateUrl?(Ga&&clearTimeout(Ga),Fa=!0,Pc(a,b,g.alternateUrl)):(J(64),Qc("","$NOT_FOUND",36E5))}catch(ca){J(65),Qc("","$ERROR",3E4)}e=null}};d={originScope:"AMP_ECID_GOOGLE"};a&&(d.securityToken=a);e.send(JSON.stringify(d));Ga=va(function(){J(66);Qc("","$ERROR",3E4)},1E4);return!0},Mc=function(){Fa=!1},xc=function(a,b){if(void 0===
|
||||
fb){fb="";for(var c=id(),d=0;d<c.length;d++){var e=c[d];if(zc("AMP_TOKEN",encodeURIComponent(a),"/",e,"",b)){fb=e;return}}}zc("AMP_TOKEN",encodeURIComponent(a),"/",fb,"",b)},Qc=function(a,b,c){Ga&&clearTimeout(Ga);b&&xc(b,c);Ab=a;b=Ub;Ub=[];for(c=0;c<b.length;c++)b[c](a)},ye=function(a){a:{if(ja.test(M.referrer)){var b=M.location.hostname.replace(Ue,"");b:{var c=M.referrer;c=c.replace(/^https?:\/\//,"");var d=c.replace(/^[^/]+/,"").split("/"),e=d[2];d=(d="s"==e?d[3]:e)?decodeURIComponent(d):d;if(!d){if(0==
|
||||
c.indexOf("xn--")){c="";break b}(c=c.match(/(.*)\.cdn\.ampproject\.org\/?$/))&&2==c.length&&(d=c[1].replace(/-/g,".").replace(/\.\./g,"-"))}c=d?d.replace(Ue,""):""}(d=b===c)||(c="."+c,d=b.substring(b.length-c.length,b.length)===c);if(d){b=!0;break a}else J(78)}b=!1}return b&&!1!==a};var bd=function(a){return(a?"https:":Ba||"https:"==M.location.protocol?"https:":"http:")+"//www.google-analytics.com"},Ge=function(a){switch(a){default:case 1:return"https://www.google-analytics.com/gtm/js?id=";case 2:return"https://www.googletagmanager.com/gtag/js?id="}},Da=function(a){this.name="len";this.message=a+"-8192"},ba=function(a,b,c){c=c||ua;if(2036>=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,
|
||||
c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c,d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d&&"text/plain"===g.getResponseHeader("Content-Type"))try{Ea(d,g.responseText,c)}catch(ca){ge("xhr",
|
||||
"rsp"),c()}else c();g=null}};g.send(b);return!0},Ea=function(a,b,c){if(1>b.length)ge("xhr","ver","0"),c();else if(3<a.count++)ge("xhr","tmr",""+a.count),c();else{var d=b.charAt(0);if("1"===d)oc(a,b.substring(1),c);else if(a.V&&"2"===d){var e=b.substring(1).split(","),g=0;b=function(){++g===e.length&&c()};for(d=0;d<e.length;d++)oc(a,e[d],b)}else ge("xhr","ver",String(b.length)),c()}},oc=function(a,b,c){if(0===b.length)c();else{var d=b.charAt(0);switch(d){case "d":pe("https://stats.g.doubleclick.net/j/collect",
|
||||
a.U,a,c);break;case "g":wc("https://www.google.com/ads/ga-audiences",a.google,c);(b=b.substring(1))&&(/^[a-z.]{1,6}$/.test(b)?wc("https://www.google.%/ads/ga-audiences".replace("%",b),a.google,ua):ge("tld","bcc",b));break;case "G":if(a.V){a.V("G-"+b.substring(1));c();break}case "x":if(a.V){a.V();c();break}default:ge("xhr","brc",d),c()}}},x=function(a,b,c){return O.navigator.sendBeacon?O.navigator.sendBeacon(a,b)?(c(),!0):!1:!1},ge=function(a,b,c){1<=100*Math.random()||G("?")||(a=["t=error","_e="+
|
||||
a,"_v=j96","sr=1"],b&&a.push("_f="+b),c&&a.push("_m="+K(c.substring(0,100))),a.push("aip=1"),a.push("z="+hd()),wc(bd(!0)+"/u/d",a.join("&"),ua))};var qc=function(){return O.gaData=O.gaData||{}},h=function(a){var b=qc();return b[a]=b[a]||{}};var Ha=function(){this.M=[]};Ha.prototype.add=function(a){this.M.push(a)};Ha.prototype.D=function(a){try{for(var b=0;b<this.M.length;b++){var c=a.get(this.M[b]);c&&ea(c)&&c.call(O,a)}}catch(d){}b=a.get(Ia);b!=ua&&ea(b)&&(a.set(Ia,ua,!0),setTimeout(b,10))};function Ja(a){if(100!=a.get(Ka)&&La(P(a,Q))%1E4>=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";}
|
||||
function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});!1===a.get(xe)&&b.push("npa=1");b.push("z="+Bd());a.set(Ra,b.join("&"),!0)}
|
||||
function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d||bd(!1)+"")+"/collect";switch(P(a,ad)){case "d":e=c||(d||bd(!1)+"")+"/j/collect";b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e.first_hit||(e.first_hit=(new Date).getTime());e=P(a,Na);delete h(e).pending_experiments;a.set(Ia,
|
||||
ua,!0)}function Hc(a){qc().expId&&a.set(Nc,qc().expId);qc().expVar&&a.set(Oc,qc().expVar);var b=P(a,Na);if(b=h(b).pending_experiments){var c=[];for(d in b)b.hasOwnProperty(d)&&b[d]&&c.push(encodeURIComponent(d)+"."+encodeURIComponent(b[d]));var d=c.join("!")}else d=void 0;d&&((b=a.get(m))&&(d=b+"!"+d),a.set(m,d,!0))}function cd(){if(O.navigator&&"preview"==O.navigator.loadPurpose)throw"abort";}
|
||||
function yd(a){var b=O.gaDevIds||[];if(ka(b)){var c=a.get("&did");qa(c)&&0<c.length&&(b=b.concat(c.split(",")));c=[];for(var d=0;d<b.length;d++)Ee(c,b[d])||c.push(b[d]);0!=c.length&&a.set("&did",c.join(","),!0)}}function vb(a){if(!a.get(Na))throw"abort";}
|
||||
function Pe(a){try{if(!a.get(Qe)&&(a.set(Qe,!0),!a.get(">m"))){var b=void 0;lf(be("gtm_debug"))&&(b=2);!b&&D(M.referrer,"https://tagassistant.google.com/")&&(b=3);!b&&Ee(M.cookie.split("; "),"__TAG_ASSISTANT=x")&&(b=4);if(!b){var c=M.documentElement.getAttribute("data-tag-assistant-present");lf(c)&&(b=5)}if(b){O["google.tagmanager.debugui2.queue"]||(O["google.tagmanager.debugui2.queue"]=[],Id("https://www.google-analytics.com/debug/bootstrap?id="+a.get(Na)+"&src=LEGACY&cond="+b));var d=M.currentScript;
|
||||
O["google.tagmanager.debugui2.queue"].push({messageType:"LEGACY_CONTAINER_STARTING",data:{id:a.get(Na),scriptSource:d&&d.src||""}})}}}catch(e){}}function lf(a){if(null==a||0===a.length)return!1;a=Number(a);var b=Date.now();return a<b+3E5&&a>b-9E5};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if("transaction"!=c&&"item"!=c){c=R(a,Wa);var d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0<e&&(c=Math.min(c+e,20),a.set(Xa,d));if(0>=c)throw"abort";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee};Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?"":""+a},R=function(a,b){a=a.get(b);return void 0==a||""===a?0:Number(a)};Ya.prototype.Z=function(a){return(a=this.get(a))&&ea(a)?a:ua};
|
||||
Ya.prototype.set=function(a,b,c){if(a)if("object"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)};var ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)};var ue=new ee,ve=[],bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=ue.get(a);if(!b)for(var c=0;c<ve.length;c++){var d=ve[c],e=d[0].exec(a);if(e){b=d[1](e);ue.set(b.name,b);break}}return b},yc=function(a){var b;ue.map(function(c,d){d.F==a&&(b=d)});return b&&b.name},S=function(a,b,c,d,e){a=new bb(a,b,c,d,e);ue.set(a.name,a);return a.name},cb=function(a,b){ve.push([new RegExp("^"+a+"$"),b])},T=function(a,b,c){return S(a,b,c,void 0,db)},db=function(){};var hb=T("apiVersion","v"),ib=T("clientVersion","_v");S("anonymizeIp","aip");var jb=S("adSenseId","a"),Va=S("hitType","t"),Ia=S("hitCallback"),Ra=S("hitPayload");S("nonInteraction","ni");S("currencyCode","cu");S("dataSource","ds");var Vd=S("useBeacon",void 0,!1),fa=S("transport");S("sessionControl","sc","");S("sessionGroup","sg");S("queueTime","qt");var Ac=S("_s","_s");S("screenName","cd");var kb=S("location","dl",""),lb=S("referrer","dr"),mb=S("page","dp","");S("hostname","dh");
|
||||
var nb=S("language","ul"),ob=S("encoding","de");S("title","dt",function(){return M.title||void 0});cb("contentGroup([0-9]+)",function(a){return new bb(a[0],"cg"+a[1])});var pb=S("screenColors","sd"),qb=S("screenResolution","sr"),rb=S("viewportSize","vp"),sb=S("javaEnabled","je"),tb=S("flashVersion","fl");S("campaignId","ci");S("campaignName","cn");S("campaignSource","cs");S("campaignMedium","cm");S("campaignKeyword","ck");S("campaignContent","cc");
|
||||
var ub=S("eventCategory","ec"),xb=S("eventAction","ea"),yb=S("eventLabel","el"),zb=S("eventValue","ev"),Bb=S("socialNetwork","sn"),Cb=S("socialAction","sa"),Db=S("socialTarget","st"),Eb=S("l1","plt"),Fb=S("l2","pdt"),Gb=S("l3","dns"),Hb=S("l4","rrt"),Ib=S("l5","srt"),Jb=S("l6","tcp"),Kb=S("l7","dit"),Lb=S("l8","clt"),Ve=S("l9","_gst"),We=S("l10","_gbt"),Xe=S("l11","_cst"),Ye=S("l12","_cbt"),Mb=S("timingCategory","utc"),Nb=S("timingVar","utv"),Ob=S("timingLabel","utl"),Pb=S("timingValue","utt");
|
||||
S("appName","an");S("appVersion","av","");S("appId","aid","");S("appInstallerId","aiid","");S("exDescription","exd");S("exFatal","exf");var Nc=S("expId","xid"),Oc=S("expVar","xvar"),m=S("exp","exp"),Rc=S("_utma","_utma"),Sc=S("_utmz","_utmz"),Tc=S("_utmht","_utmht"),Ua=S("_hc",void 0,0),Xa=S("_ti",void 0,0),Wa=S("_to",void 0,20);cb("dimension([0-9]+)",function(a){return new bb(a[0],"cd"+a[1])});cb("metric([0-9]+)",function(a){return new bb(a[0],"cm"+a[1])});S("linkerParam",void 0,void 0,Bc,db);
|
||||
var Ze=T("_cd2l",void 0,!1),ld=S("usage","_u"),Gd=S("_um");S("forceSSL",void 0,void 0,function(){return Ba},function(a,b,c){J(34);Ba=!!c});var ed=S("_j1","jid"),ia=S("_j2","gjid");cb("\\&(.*)",function(a){var b=new bb(a[0],a[1]),c=yc(a[0].substring(1));c&&(b.Z=function(d){return d.get(c)},b.o=function(d,e,g,ca){d.set(c,g,ca)},b.F=void 0);return b});
|
||||
var Qb=T("_oot"),dd=S("previewTask"),Rb=S("checkProtocolTask"),md=S("validationTask"),Sb=S("checkStorageTask"),Uc=S("historyImportTask"),Tb=S("samplerTask"),Vb=S("_rlt"),Wb=S("buildHitTask"),Xb=S("sendHitTask"),Vc=S("ceTask"),zd=S("devIdTask"),Cd=S("timingTask"),Ld=S("displayFeaturesTask"),oa=S("customTask"),ze=S("fpsCrossDomainTask"),Re=T("_cta"),V=T("name"),Q=T("clientId","cid"),n=T("clientIdTime"),xd=T("storedClientId"),Ad=S("userId","uid"),Na=T("trackingId","tid"),U=T("cookieName",void 0,"_ga"),
|
||||
W=T("cookieDomain"),Yb=T("cookiePath",void 0,"/"),Zb=T("cookieExpires",void 0,63072E3),Hd=T("cookieUpdate",void 0,!0),Be=T("cookieFlags",void 0,""),$b=T("legacyCookieDomain"),Wc=T("legacyHistoryImport",void 0,!0),ac=T("storage",void 0,"cookie"),bc=T("allowLinker",void 0,!1),cc=T("allowAnchor",void 0,!0),Ka=T("sampleRate","sf",100),dc=T("siteSpeedSampleRate",void 0,1),ec=T("alwaysSendReferrer",void 0,!1),I=T("_gid","_gid"),la=T("_gcn"),Kd=T("useAmpClientId"),ce=T("_gclid"),fe=T("_gt"),he=T("_ge",void 0,
|
||||
7776E6),ie=T("_gclsrc"),je=T("storeGac",void 0,!0),oe=S("_x_19"),Ae=S("_fplc","_fplc"),F=T("_cs"),Je=T("_useUp",void 0,!1),Le=S("up","up"),Qe=S("_tac",void 0,!1),Se=T("_gbraid"),Te=T("_gbt"),bf=T("_gbe",void 0,7776E6),gd=S("transportUrl"),Md=S("_r","_r"),Od=S("_slc","_slc"),qe=S("_dp"),ad=S("_jt",void 0,"n"),Ud=S("allowAdFeatures",void 0,!0),xe=S("allowAdPersonalizationSignals",void 0,!0);
|
||||
function X(a,b,c,d){b[a]=function(){try{return d&&J(d),c.apply(this,arguments)}catch(e){throw ge("exc",a,e&&e.name),e;}}};var Ed=function(a){if("cookie"==a.get(ac))return a=Ca("FPLC"),0<a.length?a[0]:void 0},Fe=function(a){var b;if(b=P(a,oe)&&a.get(Ze))b=De.get(a.get(cc)),b=!(b&&b._fplc);b&&!Ed(a)&&a.set(Ae,"0")};var aa=function(a){var b=Math.min(R(a,dc),100);return La(P(a,Q))%100>=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0<c?(Y(b,Gb),Y(b,Jb),Y(b,Ib),Y(b,Fb),Y(b,Hb),Y(b,Kb),Y(b,Lb),Y(b,Ve),Y(b,We),Y(b,Xe),Y(b,Ye),va(function(){a(b)},10)):L(O,"load",function(){gc(a)},!1))}},Ec=function(a){var b=O.performance||O.webkitPerformance;b=b&&b.timing;if(!b)return!1;var c=b.navigationStart;if(0==c)return!1;a[Eb]=b.loadEventStart-c;a[Gb]=b.domainLookupEnd-b.domainLookupStart;
|
||||
a[Jb]=b.connectEnd-b.connectStart;a[Ib]=b.responseStart-b.requestStart;a[Fb]=b.responseEnd-b.responseStart;a[Hb]=b.fetchStart-c;a[Kb]=b.domInteractive-c;a[Lb]=b.domContentLoadedEventStart-c;a[Ve]=N.L-c;a[We]=N.ya-c;O.google_tag_manager&&O.google_tag_manager._li&&(b=O.google_tag_manager._li,a[Xe]=b.cst,a[Ye]=b.cbt);return!0},Fc=function(a){if(O.top!=O)return!1;var b=O.external,c=b&&b.onloadT;b&&!b.isValidLoadTime&&(c=void 0);2147483648<c&&(c=void 0);0<c&&b.setPageReadyTime();if(void 0==c)return!1;
|
||||
a[Eb]=c;return!0},Y=function(a,b){var c=a[b];if(isNaN(c)||Infinity==c||0>c)a[b]=void 0},Fd=function(a){return function(b){if("pageview"==b.get(Va)&&!a.I){a.I=!0;var c=aa(b),d=0<E(P(b,kb),"gclid").length,e=0<E(P(b,kb),"wbraid").length;(c||d||e)&&gc(function(g){c&&a.send("timing",g);(d||e)&&a.send("adtiming",g)})}}};var hc=!1,mc=function(a){if("cookie"==P(a,ac)){if(a.get(Hd)||P(a,xd)!=P(a,Q)){var b=1E3*R(a,Zb);ma(a,Q,U,b);a.data.set(xd,P(a,Q))}(a.get(Hd)||uc(a)!=P(a,I))&&ma(a,I,la,864E5);if(a.get(je)){if(b=P(a,ce)){var c=Math.min(R(a,he),1E3*R(a,Zb));c=0===c?0:Math.min(c,1E3*R(a,fe)+c-(new Date).getTime());a.data.set(he,c);var d={},e=P(a,fe),g=P(a,ie),ca=kc(P(a,Yb)),l=lc(P(a,W)),k=P(a,Na),w=P(a,Be);g&&"aw.ds"!=g?d&&(d.ua=!0):(b=["1",e,Cc(b)].join("."),0<=c&&(d&&(d.ta=!0),zc("_gac_"+Cc(k),b,ca,l,k,c,w)));le(d)}}else J(75);
|
||||
a.get(je)&&(b=P(a,Se))&&(c=Math.min(R(a,bf),1E3*R(a,Zb)),c=0===c?0:Math.min(c,1E3*R(a,Te)+c-(new Date).getTime()),a.data.set(bf,c),d={},w=P(a,Te),ca=kc(P(a,Yb)),l=lc(P(a,W)),k=P(a,Na),a=P(a,Be),b=["1",w,Cc(b)].join("."),0<=c&&(d&&(d.ta=!0),zc("_gac_gb_"+Cc(k),b,ca,l,k,c,a)),ef(d))}},ma=function(a,b,c,d){var e=nd(a,b);if(e){c=P(a,c);var g=kc(P(a,Yb)),ca=lc(P(a,W)),l=P(a,Be),k=P(a,Na);if("auto"!=ca)zc(c,e,g,ca,k,d,l)&&(hc=!0);else{J(32);for(var w=id(),Ce=0;Ce<w.length;Ce++)if(ca=w[Ce],a.data.set(W,
|
||||
ca),e=nd(a,b),zc(c,e,g,ca,k,d,l)){hc=!0;return}a.data.set(W,"auto")}}},uc=function(a){var b=Ca(P(a,la));return Xd(a,b)},nc=function(a){if("cookie"==P(a,ac)&&!hc&&(mc(a),!hc))throw"abort";},Yc=function(a){if(a.get(Wc)){var b=P(a,W),c=P(a,$b)||xa(),d=Xc("__utma",c,b);d&&(J(19),a.set(Tc,(new Date).getTime(),!0),a.set(Rc,d.R),(b=Xc("__utmz",c,b))&&d.hash==b.hash&&a.set(Sc,b.R))}},nd=function(a,b){b=Cc(P(a,b));var c=lc(P(a,W)).split(".").length;a=jc(P(a,Yb));1<a&&(c+="-"+a);return b?["GA1",c,b].join("."):
|
||||
""},Xd=function(a,b){return na(b,P(a,W),P(a,Yb))},na=function(a,b,c){if(!a||1>a.length)J(12);else{for(var d=[],e=0;e<a.length;e++){var g=a[e];var ca=g.split(".");var l=ca.shift();("GA1"==l||"1"==l)&&1<ca.length?(g=ca.shift().split("-"),1==g.length&&(g[1]="1"),g[0]*=1,g[1]*=1,ca={H:g,s:ca.join(".")}):ca=kd.test(g)?{H:[0,0],s:g}:void 0;ca&&d.push(ca)}if(1==d.length)return J(13),d[0].s;if(0==d.length)J(12);else{J(14);d=Gc(d,lc(b).split(".").length,0);if(1==d.length)return d[0].s;d=Gc(d,jc(c),1);1<d.length&&
|
||||
J(41);return d[0]&&d[0].s}}},Gc=function(a,b,c){for(var d=[],e=[],g,ca=0;ca<a.length;ca++){var l=a[ca];l.H[c]==b?d.push(l):void 0==g||l.H[c]<g?(e=[l],g=l.H[c]):l.H[c]==g&&e.push(l)}return 0<d.length?d:e},lc=function(a){return 0==a.indexOf(".")?a.substr(1):a},id=function(){var a=[],b=xa().split(".");if(4==b.length){var c=b[b.length-1];if(parseInt(c,10)==c)return["none"]}for(c=b.length-2;0<=c;c--)a.push(b.slice(c).join("."));b=M.location.hostname;eb.test(b)||vc.test(b)||a.push("none");return a},kc=
|
||||
function(a){if(!a)return"/";1<a.length&&a.lastIndexOf("/")==a.length-1&&(a=a.substr(0,a.length-1));0!=a.indexOf("/")&&(a="/"+a);return a},jc=function(a){a=kc(a);return"/"==a?1:a.split("/").length},le=function(a){a.ta&&J(77);a.na&&J(74);a.pa&&J(73);a.ua&&J(69)},ef=function(a){a.ta&&J(85);a.na&&J(86);a.pa&&J(87)};function Xc(a,b,c){"none"==b&&(b="");var d=[],e=Ca(a);a="__utma"==a?6:2;for(var g=0;g<e.length;g++){var ca=(""+e[g]).split(".");ca.length>=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){if(null==a)var c=a=1;else c=La(a),a=La(D(a,".")?a.substring(1):"."+a);for(var d=0;d<b.length;d++)if(b[d].hash==c||b[d].hash==a)return b[d]};var Jc=new RegExp(/^https?:\/\/([^\/:]+)/),De=O.google_tag_data.glBridge,Kc=RegExp("(.*)([?&#])(?:_ga=[^&#]*)(?:&?)(.*)"),od=RegExp("(.*)([?&#])(?:_gac=[^&#]*)(?:&?)(.*)");function Bc(a){if(a.get(Ze))return J(35),De.generate($e(a));var b=P(a,Q),c=P(a,I)||"";b="_ga=2."+K(pa(c+b,0)+"."+c+"-"+b);(a=af(a))?(J(44),a="&_gac=1."+K([pa(a.qa,0),a.timestamp,a.qa].join("."))):a="";return b+a}
|
||||
function Ic(a,b){var c=new Date,d=O.navigator,e=d.plugins||[];a=[a,d.userAgent,c.getTimezoneOffset(),c.getYear(),c.getDate(),c.getHours(),c.getMinutes()+b];for(b=0;b<e.length;++b)a.push(e[b].description);return La(a.join("."))}function pa(a,b){var c=new Date,d=O.navigator,e=c.getHours()+Math.floor((c.getMinutes()+b)/60);return La([a,d.userAgent,d.language||"",c.getTimezoneOffset(),c.getYear(),c.getDate()+Math.floor(e/24),(24+e)%24,(60+c.getMinutes()+b)%60].join("."))}
|
||||
var Dc=function(a){J(48);this.target=a;this.T=!1};Dc.prototype.ca=function(a,b){if(a){if(this.target.get(Ze))return De.decorate($e(this.target),a,b);if(a.tagName){if("a"==a.tagName.toLowerCase()){a.href&&(a.href=qd(this,a.href,b));return}if("form"==a.tagName.toLowerCase())return rd(this,a)}if("string"==typeof a)return qd(this,a,b)}};
|
||||
var qd=function(a,b,c){var d=Kc.exec(b);d&&3<=d.length&&(b=d[1]+(d[3]?d[2]+d[3]:""));(d=od.exec(b))&&3<=d.length&&(b=d[1]+(d[3]?d[2]+d[3]:""));a=a.target.get("linkerParam");d=b.indexOf("?");var e=b.indexOf("#");b=c?b+((-1==e?"#":"&")+a):-1==e?b+((-1===d?"?":"&")+a):b.substring(0,e)+(-1===d||d>e?"?":"&")+a+b.substring(e);b=b.replace(/&+_ga=/,"&_ga=");return b=b.replace(RegExp("&+_gac="),"&_gac=")},rd=function(a,b){if(b&&b.action)if("get"==b.method.toLowerCase()){a=a.target.get("linkerParam").split("&");
|
||||
for(var c=0;c<a.length;c++){var d=a[c].split("="),e=d[1];d=d[0];for(var g=b.childNodes||[],ca=!1,l=0;l<g.length;l++)if(g[l].name==d){g[l].setAttribute("value",e);ca=!0;break}ca||(g=M.createElement("input"),g.setAttribute("type","hidden"),g.setAttribute("name",d),g.setAttribute("value",e),b.appendChild(g))}}else"post"==b.method.toLowerCase()&&(b.action=qd(a,b.action))};
|
||||
Dc.prototype.S=function(a,b,c){function d(g){try{g=g||O.event;a:{var ca=g.target||g.srcElement;for(g=100;ca&&0<g;){if(ca.href&&ca.nodeName.match(/^a(?:rea)?$/i)){var l=ca;break a}ca=ca.parentNode;g--}l={}}("http:"==l.protocol||"https:"==l.protocol)&&sd(a,l.hostname||"")&&l.href&&(l.href=qd(e,l.href,b))}catch(k){J(26)}}var e=this;this.target.get(Ze)?De.auto(function(){return $e(e.target)},a,b?"fragment":"",c):(this.T||(this.T=!0,L(M,"mousedown",d,!1),L(M,"keyup",d,!1)),c&&L(M,"submit",function(g){g=
|
||||
g||O.event;if((g=g.target||g.srcElement)&&g.action){var ca=g.action.match(Jc);ca&&sd(a,ca[1])&&rd(e,g)}}))};Dc.prototype.$=function(a){if(a){var b=this,c=b.target.get(F);void 0!==c&&De.passthrough(function(){if(c("analytics_storage"))return{};var d={};return d._ga=b.target.get(Q),d._up="1",d},1,!0)}};function sd(a,b){if(b==M.location.hostname)return!1;for(var c=0;c<a.length;c++)if(a[c]instanceof RegExp){if(a[c].test(b))return!0}else if(0<=b.indexOf(a[c]))return!0;return!1}
|
||||
function ke(a,b){return b!=Ic(a,0)&&b!=Ic(a,-1)&&b!=Ic(a,-2)&&b!=pa(a,0)&&b!=pa(a,-1)&&b!=pa(a,-2)}function $e(a){var b=af(a),c={};c._ga=a.get(Q);c._gid=a.get(I)||void 0;c._gac=b?[b.qa,b.timestamp].join("."):void 0;b=a.get(Ae);a=Ed(a);return c._fplc=b&&"0"!==b?b:a,c}function af(a){function b(e){return void 0==e||""===e?0:Number(e)}var c=a.get(ce);if(c&&a.get(je)){var d=b(a.get(fe));if(1E3*d+b(a.get(he))<=(new Date).getTime())J(76);else return{timestamp:d,qa:c}}};var p=/^(GTM|OPT)-[A-Z0-9]+$/,Ie=/^G-[A-Z0-9]+$/,q=/;_gaexp=[^;]*/g,r=/;((__utma=)|([^;=]+=GAX?\d+\.))[^;]*/g,Aa=/^https?:\/\/[\w\-.]+\.google.com(:\d+)?\/optimize\/opt-launch\.html\?.*$/,t=function(a){function b(d,e){e&&(c+="&"+d+"="+K(e))}var c=Ge(a.type)+K(a.id);"dataLayer"!=a.B&&b("l",a.B);b("cx",a.context);b("t",a.target);b("cid",a.clientId);b("cidt",a.ka);b("gac",a.la);b("aip",a.ia);a.sync&&b("m","sync");b("cycle",a.G);a.qa&&b("gclid",a.qa);Aa.test(M.referrer)&&b("cb",String(hd()));return c},
|
||||
He=function(a,b){var c=(new Date).getTime();O[a.B]=O[a.B]||[];c={"gtm.start":c};a.sync||(c.event="gtm.js");O[a.B].push(c);2===a.type&&function(d,e,g){O[a.B].push(arguments)}("config",a.id,b)},Ke=function(a,b,c,d){c=c||{};var e=1;Ie.test(b)&&(e=2);var g={id:b,type:e,B:c.dataLayer||"dataLayer",G:!1},ca=void 0;a.get(">m")==b&&(g.G=!0);1===e?(g.ia=!!a.get("anonymizeIp"),g.sync=d,b=String(a.get("name")),"t0"!=b&&(g.target=b),G(String(a.get("trackingId")))||(g.clientId=String(a.get(Q)),g.ka=Number(a.get(n)),
|
||||
c=c.palindrome?r:q,c=(c=M.cookie.replace(/^|(; +)/g,";").match(c))?c.sort().join("").substring(1):void 0,g.la=c,g.qa=E(P(a,kb),"gclid"))):2===e&&(g.context="c",ca={allow_google_signals:a.get(Ud),allow_ad_personalization_signals:a.get(xe)});He(g,ca);return t(g)};var H={},Jd=function(a,b){b||(b=(b=P(a,V))&&"t0"!=b?Wd.test(b)?"_gat_"+Cc(P(a,Na)):"_gat_"+Cc(b):"_gat");this.Y=b},Rd=function(a,b){var c=b.get(Wb);b.set(Wb,function(e){Pd(a,e,ed);Pd(a,e,ia);var g=c(e);Qd(a,e);return g});var d=b.get(Xb);b.set(Xb,function(e){var g=d(e);if(se(e)){J(80);var ca={U:re(e,1),google:re(e,2),count:0};pe("https://stats.g.doubleclick.net/j/collect",ca.U,ca);e.set(ed,"",!0)}return g})},Pd=function(a,b,c){!1===b.get(Ud)||b.get(c)||("1"==Ca(a.Y)[0]?b.set(c,"",!0):b.set(c,""+hd(),
|
||||
!0))},Qd=function(a,b){se(b)&&zc(a.Y,"1",P(b,Yb),P(b,W),P(b,Na),6E4,P(b,Be))},se=function(a){return!!a.get(ed)&&!1!==a.get(Ud)},Ne=function(a){return!H[P(a,Na)]&&void 0===a.get(">m")&&void 0===a.get(fa)&&void 0===a.get(gd)&&void 0===a.get(oe)},re=function(a,b){var c=new ee,d=function(g){$a(g).F&&c.set($a(g).F,a.get(g))};d(hb);d(ib);d(Na);d(Q);d(ed);1==b&&(d(Ad),d(ia),d(I));!1===a.get(xe)&&c.set("npa","1");c.set($a(ld).F,Td(a));var e="";c.map(function(g,ca){e+=K(g)+"=";e+=K(""+ca)+"&"});e+="z="+
|
||||
hd();1==b?e="t=dc&aip=1&_r=3&"+e:2==b&&(e="t=sr&aip=1&_r=4&slf_rd=1&"+e);return e},Me=function(a){if(Ne(a))return H[P(a,Na)]=!0,function(b){if(b&&!H[b]){var c=Ke(a,b);Id(c);H[b]=!0}}},Wd=/^gtm\d+$/;var fd=function(a,b){a=a.model;if(!a.get("dcLoaded")){var c=new $c(Dd(a));c.set(29);a.set(Gd,c.C);b=b||{};var d;b[U]&&(d=Cc(b[U]));b=new Jd(a,d);Rd(b,a);a.set("dcLoaded",!0)}};var Sd=function(a){if(!a.get("dcLoaded")&&"cookie"==a.get(ac)){var b=new Jd(a);Pd(b,a,ed);Pd(b,a,ia);Qd(b,a);b=se(a);var c=Ne(a);b&&a.set(Md,1,!0);c&&a.set(Od,1,!0);if(b||c)a.set(ad,"d",!0),J(79),a.set(qe,{U:re(a,1),google:re(a,2),V:Me(a),count:0},!0)}};var Lc=function(){var a=O.gaGlobal=O.gaGlobal||{};return a.hid=a.hid||hd()};var wb=/^(UA|YT|MO|GP)-(\d+)-(\d+)$/,pc=function(a){function b(e,g){d.model.data.set(e,g)}function c(e,g){b(e,g);d.filters.add(e)}var d=this;this.model=new Ya;this.filters=new Ha;b(V,a[V]);b(Na,sa(a[Na]));b(U,a[U]);b(W,a[W]||xa());b(Yb,a[Yb]);b(Zb,a[Zb]);b(Hd,a[Hd]);b(Be,a[Be]);b($b,a[$b]);b(Wc,a[Wc]);b(bc,a[bc]);b(cc,a[cc]);b(Ka,a[Ka]);b(dc,a[dc]);b(ec,a[ec]);b(ac,a[ac]);b(Ad,a[Ad]);b(n,a[n]);b(Kd,a[Kd]);b(je,a[je]);b(Ze,a[Ze]);b(oe,a[oe]);b(Je,a[Je]);b(F,a[F]);b(hb,1);b(ib,"j96");c(Re,Pe);c(Qb,
|
||||
Ma);c(oa,ua);c(dd,cd);c(Rb,Oa);c(md,vb);c(Sb,nc);c(Uc,Yc);c(Tb,Ja);c(Vb,Ta);c(Vc,Hc);c(zd,yd);c(Ld,Sd);c(ze,Fe);c(Wb,Pa);c(Xb,Sa);c(Cd,Fd(this));pd(this.model);td(this.model,a[Q]);this.model.set(jb,Lc())};pc.prototype.get=function(a){return this.model.get(a)};pc.prototype.set=function(a,b){this.model.set(a,b)};
|
||||
pc.prototype.send=function(a){if(!(1>arguments.length)){if("string"===typeof arguments[0]){var b=arguments[0];var c=[].slice.call(arguments,1)}else b=arguments[0]&&arguments[0][Va],c=arguments;b&&(c=za(me[b]||[],c),c[Va]=b,this.model.set(c,void 0,!0),this.filters.D(this.model),this.model.data.m={})}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))};
|
||||
var td=function(a,b){var c=P(a,U);a.data.set(la,"_ga"==c?"_gid":c+"_gid");if("cookie"==P(a,ac)){hc=!1;c=Ca(P(a,U));c=Xd(a,c);if(!c){c=P(a,W);var d=P(a,$b)||xa();c=Xc("__utma",d,c);void 0!=c?(J(10),c=c.O[1]+"."+c.O[2]):c=void 0}c&&(hc=!0);if(d=c&&!a.get(Hd))if(d=c.split("."),2!=d.length)d=!1;else if(d=Number(d[1])){var e=R(a,Zb);d=d+e<(new Date).getTime()/1E3}else d=!1;d&&(c=void 0);c&&(a.data.set(xd,c),a.data.set(Q,c),(c=uc(a))&&a.data.set(I,c));a.get(je)&&(c=a.get(ce),d=a.get(ie),!c||d&&"aw.ds"!=
|
||||
d)&&(c={},d=(M?df(c):{})[P(a,Na)],le(c),d&&0!=d.length&&(c=d[0],a.data.set(fe,c.timestamp/1E3),a.data.set(ce,c.qa)));a.get(je)&&(c=a.get(Se),d={},e=(M?df(d,"_gac_gb",!0):{})[P(a,Na)],ef(d),e&&0!=e.length&&(d=e[0],e=d.qa,c&&c!==e||(d.labels&&d.labels.length&&(e+="."+d.labels.join(".")),a.data.set(Te,d.timestamp/1E3),a.data.set(Se,e))))}if(a.get(Hd)){c=be("_ga",!!a.get(cc));var g=be("_gl",!!a.get(cc));d=De.get(a.get(cc));e=d._ga;g&&0<g.indexOf("_ga*")&&!e&&J(30);if(b||!a.get(Je))g=!1;else if(g=a.get(F),
|
||||
void 0===g||g("analytics_storage"))g=!1;else{J(84);a.data.set(Le,1);if(g=d._up)if(g=Jc.exec(M.referrer)){g=g[1];var ca=M.location.hostname;g=ca===g||0<=ca.indexOf("."+g)||0<=g.indexOf("."+ca)?!0:!1}else g=!1;g=g?!0:!1}ca=d.gclid;var l=d._gac;if(c||e||ca||l)if(c&&e&&J(36),a.get(bc)||ye(a.get(Kd))||g){if(e&&(J(38),a.data.set(Q,e),d._gid&&(J(51),a.data.set(I,d._gid))),ca?(J(82),a.data.set(ce,ca),d.gclsrc&&a.data.set(ie,d.gclsrc)):l&&(e=l.split("."))&&2===e.length&&(J(37),a.data.set(ce,e[0]),a.data.set(fe,
|
||||
e[1])),(d=d._fplc)&&P(a,oe)&&(J(83),a.data.set(Ae,d)),c)b:if(d=c.indexOf("."),-1==d)J(22);else{e=c.substring(0,d);g=c.substring(d+1);d=g.indexOf(".");c=g.substring(0,d);g=g.substring(d+1);if("1"==e){if(d=g,ke(d,c)){J(23);break b}}else if("2"==e){d=g.indexOf("-");e="";0<d?(e=g.substring(0,d),d=g.substring(d+1)):d=g.substring(1);if(ke(e+d,c)){J(53);break b}e&&(J(2),a.data.set(I,e))}else{J(22);break b}J(11);a.data.set(Q,d);if(c=be("_gac",!!a.get(cc)))c=c.split("."),"1"!=c[0]||4!=c.length?J(72):ke(c[3],
|
||||
c[1])?J(71):(a.data.set(ce,c[3]),a.data.set(fe,c[2]),J(70))}}else J(21)}b&&(J(9),a.data.set(Q,K(b)));a.get(Q)||(b=(b=O.gaGlobal)&&b.from_cookie&&"cookie"!==P(a,ac)?void 0:(b=b&&b.vid)&&-1!==b.search(jd)?b:void 0,b?(J(17),a.data.set(Q,b)):(J(8),a.data.set(Q,ra())));a.get(I)||(J(3),a.data.set(I,ra()));mc(a);b=O.gaGlobal=O.gaGlobal||{};c=P(a,Q);a=c===P(a,xd);if(void 0==b.vid||a&&!b.from_cookie)b.vid=c,b.from_cookie=a},pd=function(a){var b=O.navigator,c=O.screen,d=M.location,e=a.set;a:{var g=!!a.get(ec),
|
||||
ca=!!a.get(Kd);var l=M.referrer;if(/^(https?|android-app):\/\//i.test(l)){if(g)break a;g="//"+M.location.hostname;if(!de(l,g)){if(ca&&(ca=g.replace(/\./g,"-")+".cdn.ampproject.org",de(l,ca))){l=void 0;break a}break a}}l=void 0}e.call(a,lb,l);d&&(e=d.pathname||"","/"!=e.charAt(0)&&(J(31),e="/"+e),a.set(kb,d.protocol+"//"+d.hostname+e+d.search));c&&a.set(qb,c.width+"x"+c.height);c&&a.set(pb,c.colorDepth+"-bit");c=M.documentElement;l=(e=M.body)&&e.clientWidth&&e.clientHeight;ca=[];c&&c.clientWidth&&
|
||||
c.clientHeight&&("CSS1Compat"===M.compatMode||!l)?ca=[c.clientWidth,c.clientHeight]:l&&(ca=[e.clientWidth,e.clientHeight]);c=0>=ca[0]||0>=ca[1]?"":ca.join("x");a.set(rb,c);c=a.set;var k;if((e=(e=O.navigator)?e.plugins:null)&&e.length)for(l=0;l<e.length&&!k;l++)ca=e[l],-1<ca.name.indexOf("Shockwave Flash")&&(k=ca.description);if(!k)try{var w=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");k=w.GetVariable("$version")}catch(Ce){}if(!k)try{w=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"),k=
|
||||
"WIN 6,0,21,0",w.AllowScriptAccess="always",k=w.GetVariable("$version")}catch(Ce){}if(!k)try{w=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"),k=w.GetVariable("$version")}catch(Ce){}k&&(w=k.match(/[\d]+/g))&&3<=w.length&&(k=w[0]+"."+w[1]+" r"+w[2]);c.call(a,tb,k||void 0);a.set(ob,M.characterSet||M.charset);a.set(sb,b&&"function"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb,(b&&(b.language||b.browserLanguage)||"").toLowerCase());a.data.set(ce,be("gclid",!0));a.data.set(ie,be("gclsrc",!0));
|
||||
a.data.set(fe,Math.round((new Date).getTime()/1E3));a.get(ce)||(a.data.set(Se,be("wbraid",!0)),a.data.set(Te,Math.round((new Date).getTime()/1E3)));if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(k=0;k<b.length;++k)(D(b[k],"utm_id")||D(b[k],"utm_campaign")||D(b[k],"utm_source")||D(b[k],"utm_medium")||D(b[k],"utm_term")||D(b[k],"utm_content")||D(b[k],"gclid")||D(b[k],"dclid")||D(b[k],"gclsrc")||D(b[k],"wbraid"))&&d.push(b[k]);0<d.length&&(b="#"+d.join("&"),a.set(kb,a.get(kb)+b))}},
|
||||
me={pageview:[mb],event:[ub,xb,yb,zb],social:[Bb,Cb,Db],timing:[Mb,Nb,Pb,Ob]};var rc=function(a){if("prerender"==M.visibilityState)return!1;a();return!0},z=function(a){if(!rc(a)){J(16);var b=!1,c=function(){if(!b&&rc(a)){b=!0;var d=c,e=M;e.removeEventListener?e.removeEventListener("visibilitychange",d,!1):e.detachEvent&&e.detachEvent("onvisibilitychange",d)}};L(M,"visibilitychange",c)}};var te=/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=te.exec(a[0]);null!=b&&4==b.length&&(this.da=b[1]||"t0",this.K=b[2]||"",this.methodName=b[3],this.aa=[].slice.call(a,1),this.K||(this.A="create"==this.methodName,this.i="require"==this.methodName,this.g="provide"==this.methodName,this.ba="remove"==this.methodName),this.i&&(3<=this.aa.length?(this.X=this.aa[1],this.W=this.aa[2]):this.aa[1]&&(qa(this.aa[1])?this.X=this.aa[1]:this.W=this.aa[1])));b=a[1];a=a[2];
|
||||
if(!this.methodName)throw"abort";if(this.i&&(!qa(b)||""==b))throw"abort";if(this.g&&(!qa(b)||""==b||!ea(a)))throw"abort";if(ud(this.da)||ud(this.K))throw"abort";if(this.g&&"t0"!=this.da)throw"abort";}};function ud(a){return 0<=a.indexOf(".")||0<=a.indexOf(":")};var Yd,Zd,$d,A;Yd=new ee;$d=new ee;A=new ee;Zd={ec:45,ecommerce:46,linkid:47};
|
||||
var u=function(a,b,c){b==N||b.get(V);var d=Yd.get(a);if(!ea(d))return!1;b.plugins_=b.plugins_||new ee;if(b.plugins_.get(a))return!0;b.plugins_.set(a,new d(b,c||{}));return!0},y=function(a,b,c,d,e){if(!ea(Yd.get(b))&&!$d.get(b)){Zd.hasOwnProperty(b)&&J(Zd[b]);var g=void 0;if(p.test(b)){J(52);a=N.j(a);if(!a)return!0;c=Ke(a.model,b,d,e);g=function(){Z.D(["provide",b,function(){}]);var l=O[d&&d.dataLayer||"dataLayer"];l&&l.hide&&ea(l.hide.end)&&l.hide[b]&&(l.hide.end(),l.hide.end=void 0)}}!c&&Zd.hasOwnProperty(b)?
|
||||
(J(39),c=b+".js"):J(43);if(c){var ca;d&&(ca=d[oe]);qa(ca)||(ca=void 0);a=ae(cf(c,ca));!ca||ne(a.protocol)&&B(a)||(a=ae(cf(c)));ne(a.protocol)&&B(a)&&(Id(a.url,void 0,e,void 0,g),$d.set(b,!0))}}},v=function(a,b){var c=A.get(a)||[];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;c<b.length;c++)b[c]();A.set(a,[])},B=function(a){var b=ae(M.location.href);if(D(a.url,Ge(1))||D(a.url,Ge(2)))return!0;if(a.query||0<=a.url.indexOf("?")||0<=a.path.indexOf("://"))return!1;if(a.host==
|
||||
b.host&&a.port==b.port||jf&&(b=M.createElement("a"),b.href=jf,b=kf(b),a.host===b[0]&&a.port===b[1]))return!0;b="http:"==a.protocol?80:443;return"www.google-analytics.com"==a.host&&(a.port||b)==b&&D(a.path,"/plugins/")?!0:!1},ne=function(a){var b=M.location.protocol;return"https:"==a||a==b?!0:"http:"!=a?!1:"http:"==b},kf=function(a){var b=a.hostname||"",c=0<=b.indexOf("]");b=b.split(c?"]":":")[0].toLowerCase();c&&(b+="]");c=(a.protocol||"").toLowerCase();c=1*a.port||("http:"==c?80:"https:"==c?443:
|
||||
"");a=a.pathname||"";D(a,"/")||(a="/"+a);return[b,""+c,a]},ae=function(a){var b=M.createElement("a");b.href=M.location.href;var c=(b.protocol||"").toLowerCase(),d=kf(b),e=b.search||"",g=c+"//"+d[0]+(d[1]?":"+d[1]:"");D(a,"//")?a=c+a:D(a,"/")?a=g+a:!a||D(a,"?")?a=g+d[2]+(a||e):0>a.split("/")[0].indexOf(":")&&(a=g+d[2].substring(0,d[2].lastIndexOf("/"))+"/"+a);b.href=a;c=kf(b);return{protocol:(b.protocol||"").toLowerCase(),host:c[0],port:c[1],path:c[2],query:b.search||"",url:a||""}},cf=function(a,b){return a&&
|
||||
0<=a.indexOf("/")?a:(b||bd(!1))+"/plugins/ua/"+a};var Z={ga:function(){Z.fa=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.fa.concat(b);for(Z.fa=[];0<b.length&&!Z.v(b[0])&&!(b.shift(),0<Z.fa.length););Z.fa=Z.fa.concat(b)};Z.ra=function(a){N.q&&(300===N.q.length&&(N.q.shift(),N.qd++),N.q.push(a))};Z.J=function(a){for(var b=[],c=0;c<arguments.length;c++)try{var d=new sc(arguments[c]);d.g?C(d.aa[0],d.aa[1]):(d.i&&(d.ha=y(d.da,d.aa[0],d.X,d.W)),b.push(d));Z.ra(arguments[c])}catch(e){}return b};
|
||||
Z.v=function(a){try{if(a.u)a.u.call(O,N.j("t0"));else{var b=a.da==gb?N:N.j(a.da);if(a.A){if("t0"==a.da&&(b=N.create.apply(N,a.aa),null===b))return!0}else if(a.ba)N.remove(a.da);else if(b)if(a.i){if(a.ha&&(a.ha=y(a.da,a.aa[0],a.X,a.W)),!u(a.aa[0],b,a.W))return!0}else if(a.K){var c=a.methodName,d=a.aa,e=b.plugins_.get(a.K);e[c].apply(e,d)}else b[a.methodName].apply(b,a.aa)}}catch(g){}};var N=function(a){J(1);Z.D.apply(Z,[arguments])};N.h={};N.P=[];N.L=0;N.ya=0;N.answer=42;var we=[Na,W,V];N.create=function(a){var b=za(we,[].slice.call(arguments));b[V]||(b[V]="t0");var c=""+b[V];if(N.h[c])return N.h[c];if(da(b))return null;b=new pc(b);N.h[c]=b;N.P.push(b);c=qc().tracker_created;if(ea(c))try{c(b)}catch(d){}return b};N.remove=function(a){for(var b=0;b<N.P.length;b++)if(N.P[b].get(V)==a){N.P.splice(b,1);N.h[a]=null;break}};N.j=function(a){return N.h[a]};N.getAll=function(){return N.P.slice(0)};
|
||||
N.N=function(){"ga"!=gb&&J(49);var a=O[gb];if(!a||42!=a.answer){N.L=a&&a.l;N.ya=1*new Date;N.loaded=!0;var b=a&&a.q,c=ka(b);a=[];c?a=b.slice(0):J(50);N.q=c?b:[];N.q.splice(0);N.qd=0;b=O[gb]=N;X("create",b,b.create);X("remove",b,b.remove);X("getByName",b,b.j,5);X("getAll",b,b.getAll,6);b=pc.prototype;X("get",b,b.get,7);X("set",b,b.set,4);X("send",b,b.send);X("requireSync",b,b.ma);b=Ya.prototype;X("get",b,b.get);X("set",b,b.set);if("https:"!=M.location.protocol&&!Ba){a:{b=M.getElementsByTagName("script");
|
||||
for(c=0;c<b.length&&100>c;c++){var d=b[c].src;if(d&&0==d.indexOf(bd(!0)+"/analytics")){b=!0;break a}}b=!1}b&&(Ba=!0)}(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C("linker",Dc);X("decorate",b,b.ca,20);X("autoLink",b,b.S,25);X("passthrough",b,b.$,25);C("displayfeatures",fd);C("adfeatures",fd);Z.D.apply(N,a)}};var gf=N.N,hf=O[gb];hf&&hf.r?gf():z(gf);z(function(){Z.D(["provide","render",ua])});})(window);
|
||||
1
static/assets/apple-touch-icon.png
Normal file
|
|
@ -0,0 +1 @@
|
|||
404 page not found
|
||||
36
static/assets/livereload.js
Normal file
1
static/rest_framework/css/bootstrap-theme.min.css.map
Normal file
|
|
@ -231,3 +231,7 @@ body a:hover {
|
|||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
margin: 5px 0 10px 0;
|
||||
}
|
||||
|
|
|
|||
4
static/rest_framework/css/bootstrap.min.css
vendored
1
static/rest_framework/css/bootstrap.min.css.map
Normal file
|
|
@ -131,13 +131,7 @@ $(function () {
|
|||
if (value !== undefined) {
|
||||
params[paramKey] = value
|
||||
}
|
||||
} else if (dataType === 'array' && paramValue) {
|
||||
try {
|
||||
params[paramKey] = JSON.parse(paramValue)
|
||||
} catch (err) {
|
||||
// Ignore malformed JSON
|
||||
}
|
||||
} else if (dataType === 'object' && paramValue) {
|
||||
} else if ((dataType === 'array' && paramValue) || (dataType === 'object' && paramValue)) {
|
||||
try {
|
||||
params[paramKey] = JSON.parse(paramValue)
|
||||
} catch (err) {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,12 @@ function replaceDocument(docString) {
|
|||
|
||||
doc.write(docString);
|
||||
doc.close();
|
||||
|
||||
if (window.djdt) {
|
||||
// If Django Debug Toolbar is available, reinitialize it so that
|
||||
// it can show updated panels from new `docString`.
|
||||
window.addEventListener("load", djdt.init);
|
||||
}
|
||||
}
|
||||
|
||||
function doAjaxSubmit(e) {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ function sameOrigin(url) {
|
|||
!(/^(\/\/|http:|https:).*/.test(url));
|
||||
}
|
||||
|
||||
window.drf = JSON.parse(document.getElementById('drf_csrf').textContent);
|
||||
var csrftoken = window.drf.csrfToken;
|
||||
|
||||
$.ajaxSetup({
|
||||
|
|
|
|||
2
static/rest_framework/js/jquery-3.7.1.min.js
vendored
Normal file
3
static/rest_framework/js/load-ajax-form.js
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
$(document).ready(function() {
|
||||
$('form').ajaxForm();
|
||||
});
|
||||
190
templates/new_base.html
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html dir="auto" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<meta name="generator" content="Hugo 0.102.3">
|
||||
<script async="" src="ExampleSite_files/analytics_002.js"></script>
|
||||
<script async="" src="ExampleSite_files/analytics.js"></script>
|
||||
<script src="ExampleSite_files/livereload.js" data-no-instant="" defer="defer"></script>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
<title>ExampleSite</title>
|
||||
<meta name="keywords" content="Blog,Portfolio,PaperMod">
|
||||
<meta name="description" content="ExampleSite description">
|
||||
<meta name="author" content="Me">
|
||||
{# <link rel="canonical" href="http://localhost:1313/">#}
|
||||
<link rel="stylesheet" href="{% static "assets/stylesheet.bc1149f4a72aa4858d3a9f71462f75e5884ffe8073ea9d6d5.css" %}"
|
||||
crossorigin="anonymous">
|
||||
<link rel="icon" href="http://localhost:1313/%3Clink%20/%20abs%20url%3E">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="http://localhost:1313/%3Clink%20/%20abs%20url%3E">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="http://localhost:1313/%3Clink%20/%20abs%20url%3E">
|
||||
<link rel="apple-touch-icon" href="http://localhost:1313/%3Clink%20/%20abs%20url%3E">
|
||||
<link rel="mask-icon" href="http://localhost:1313/%3Clink%20/%20abs%20url%3E">
|
||||
<meta name="theme-color" content="#2e2e33">
|
||||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||||
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/index.xml">
|
||||
<noscript>
|
||||
<style>#theme-toggle, .top-link {
|
||||
display: none
|
||||
}</style>
|
||||
<style>@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--theme: rgb(29, 30, 32);
|
||||
--entry: rgb(46, 46, 51);
|
||||
--primary: rgb(218, 218, 219);
|
||||
--secondary: rgb(155, 156, 157);
|
||||
--tertiary: rgb(65, 66, 68);
|
||||
--content: rgb(196, 196, 197);
|
||||
--hljs-bg: rgb(46, 46, 51);
|
||||
--code-bg: rgb(55, 56, 62);
|
||||
--border: rgb(51, 51, 51)
|
||||
}
|
||||
|
||||
.list {
|
||||
background: var(--theme)
|
||||
}
|
||||
|
||||
.list:not(.dark)::-webkit-scrollbar-track {
|
||||
background: 0 0
|
||||
}
|
||||
|
||||
.list:not(.dark)::-webkit-scrollbar-thumb {
|
||||
border-color: var(--theme)
|
||||
}
|
||||
}</style>
|
||||
</noscript>
|
||||
<script type="application/javascript">var doNotTrack = !1;
|
||||
doNotTrack || (function (e, t, n, s, o, i, a) {
|
||||
e.GoogleAnalyticsObject = o, e[o] = e[o] || function () {
|
||||
(e[o].q = e[o].q || []).push(arguments)
|
||||
}, e[o].l = 1 * new Date, i = t.createElement(n), a = t.getElementsByTagName(n)[0], i.async = 1, i.src = s, a.parentNode.insertBefore(i, a)
|
||||
}(window, document, "script", "https://www.google-analytics.com/analytics.js", "ga"), ga("create", "UA-123-45", "auto"), ga("send", "pageview"))</script>
|
||||
<meta property="og:title" content="ExampleSite">
|
||||
<meta property="og:description" content="ExampleSite description">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="//localhost:1313/">
|
||||
<meta property="og:image"
|
||||
content="//localhost:1313/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E">
|
||||
<meta property="og:site_name" content="ExampleSite">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:image"
|
||||
content="//localhost:1313/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E">
|
||||
<meta name="twitter:title" content="ExampleSite">
|
||||
<meta name="twitter:description" content="ExampleSite description">
|
||||
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"ExampleSite","url":"//localhost:1313/","description":"ExampleSite description","thumbnailUrl":"//localhost:1313/%3Clink%20/%20abs%20url%3E","sameAs":[]}</script>
|
||||
</head>
|
||||
<body class="list dark" id="top">
|
||||
<script>localStorage.getItem("pref-theme") === "dark" ? document.body.classList.add("dark") : localStorage.getItem("pref-theme") === "light" ? document.body.classList.remove("dark") : window.matchMedia("(prefers-color-scheme: dark)").matches && document.body.classList.add("dark")</script>
|
||||
<header class="header">
|
||||
<nav class="nav">
|
||||
<div class="logo"><a href="http://localhost:1313/" accesskey="h" title="Home (Alt + H)"><img
|
||||
src="ExampleSite_files/apple-touch-icon.png" alt="" aria-label="logo" height="35">Home</a>
|
||||
<div class="logo-switches">
|
||||
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
|
||||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path>
|
||||
</svg>
|
||||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="menu">
|
||||
<li><a href="http://localhost:1313/categories/" title="categories"><span>categories</span></a></li>
|
||||
<li><a href="http://localhost:1313/tags/" title="tags"><span>tags</span></a></li>
|
||||
<li><a href="https://example.org/" title="example.org"><span>example.org</span> <svg fill="none"
|
||||
shape-rendering="geometricPrecision"
|
||||
stroke="currentcolor"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2.5"
|
||||
viewBox="0 0 24 24"
|
||||
height="12"
|
||||
width="12">
|
||||
<path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"></path>
|
||||
<path d="M15 3h6v6"></path>
|
||||
<path d="M10 14 21 3"></path>
|
||||
</svg>
|
||||
</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="main">
|
||||
<article class="first-entry home-info">
|
||||
<header class="entry-header"><h1>Hi there</h1></header>
|
||||
<div class="entry-content">Welcome to my blog</div>
|
||||
<footer class="entry-footer">
|
||||
<div class="social-icons"></div>
|
||||
</footer>
|
||||
</article>
|
||||
<article class="post-entry">
|
||||
<header class="entry-header"><h2>My 1st post</h2></header>
|
||||
<div class="entry-content"><p></p></div>
|
||||
<footer class="entry-footer"><span title="2020-09-15 11:30:03 +0000 +0000">September 15, 2020</span> · 0
|
||||
min · 0 words · Me
|
||||
</footer>
|
||||
<a class="entry-link" aria-label="post link to My 1st post"
|
||||
href="http://localhost:1313/posts/my-first-post/"></a></article>
|
||||
<article class="post-entry">
|
||||
<header class="entry-header"><h2>My 1st post</h2></header>
|
||||
<div class="entry-content"><p></p></div>
|
||||
<footer class="entry-footer"><span title="2020-09-15 11:30:03 +0000 +0000">September 15, 2020</span> · 0
|
||||
min · 0 words · Me
|
||||
</footer>
|
||||
<a class="entry-link" aria-label="post link to My 1st post"
|
||||
href="http://localhost:1313/posts/my-second-post/"></a></article>
|
||||
<article class="post-entry">
|
||||
<header class="entry-header"><h2>My 1st post</h2></header>
|
||||
<div class="entry-content"><p></p></div>
|
||||
<footer class="entry-footer"><span title="2020-09-15 11:30:03 +0000 +0000">September 15, 2020</span> · 0
|
||||
min · 0 words · Me
|
||||
</footer>
|
||||
<a class="entry-link" aria-label="post link to My 1st post"
|
||||
href="http://localhost:1313/posts/my-third-post/"></a></article>
|
||||
</main>
|
||||
<footer class="footer"><span>© 2022 <a href="http://localhost:1313/">ExampleSite</a></span>
|
||||
<span>Powered by
|
||||
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
|
||||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a></span>
|
||||
</footer>
|
||||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g"
|
||||
style="visibility: hidden; opacity: 0;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor">
|
||||
<path d="M12 6H0l6-6z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
<script>let menu = document.getElementById("menu");
|
||||
menu && (menu.scrollLeft = localStorage.getItem("menu-scroll-position"), menu.onscroll = function () {
|
||||
localStorage.setItem("menu-scroll-position", menu.scrollLeft)
|
||||
}), document.querySelectorAll('a[href^="#"]').forEach(e => {
|
||||
e.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
var t = this.getAttribute("href").substr(1);
|
||||
window.matchMedia("(prefers-reduced-motion: reduce)").matches ? document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView() : document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior: "smooth"}), t === "top" ? history.replaceState(null, null, " ") : history.pushState(null, null, `#${t}`)
|
||||
})
|
||||
})</script>
|
||||
<script>var mybutton = document.getElementById("top-link");
|
||||
window.onscroll = function () {
|
||||
document.body.scrollTop > 800 || document.documentElement.scrollTop > 800 ? (mybutton.style.visibility = "visible", mybutton.style.opacity = "1") : (mybutton.style.visibility = "hidden", mybutton.style.opacity = "0")
|
||||
}</script>
|
||||
<script>document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||
document.body.className.includes("dark") ? (document.body.classList.remove("dark"), localStorage.setItem("pref-theme", "light")) : (document.body.classList.add("dark"), localStorage.setItem("pref-theme", "dark"))
|
||||
})</script>
|
||||
</body>
|
||||
</html>
|
||||