initial
This commit is contained in:
+151
@@ -0,0 +1,151 @@
|
||||
# Django #
|
||||
*.log
|
||||
*.pot
|
||||
*.pyc
|
||||
__pycache__
|
||||
db.sqlite3*
|
||||
media
|
||||
|
||||
# Backup files #
|
||||
*.bak
|
||||
|
||||
# If you are using PyCharm #
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# AWS User-specific
|
||||
.idea/**/aws.xml
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Python #
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# Distribution / packaging
|
||||
.Python build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
.pytest_cache/
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
.hypothesis/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# celery
|
||||
celerybeat-schedule.*
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
lokal/
|
||||
/lokal
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
|
||||
# Sublime Text #
|
||||
*.tmlanguage.cache
|
||||
*.tmPreferences.cache
|
||||
*.stTheme.cache
|
||||
*.sublime-workspace
|
||||
*.sublime-project
|
||||
|
||||
# sftp configuration file
|
||||
sftp-config.json
|
||||
|
||||
# Package control specific files Package
|
||||
Control.last-run
|
||||
Control.ca-list
|
||||
Control.ca-bundle
|
||||
Control.system-ca-bundle
|
||||
GitHub.sublime-settings
|
||||
|
||||
# Visual Studio Code #
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
.history
|
||||
|
||||
# Static
|
||||
/static
|
||||
|
||||
# Media
|
||||
/media
|
||||
|
||||
# Assets downloads
|
||||
/assets_download
|
||||
|
||||
# Assets watermark
|
||||
/assets_watermark
|
||||
@@ -0,0 +1,42 @@
|
||||
### DATA BISNIS SOLUSI : WEB TEMPLATE
|
||||
#### Project Description
|
||||
Django template yang akan menjadi base template untuk landing page ProIT Group.
|
||||
|
||||
#### Installation
|
||||
# buat virtual python env :
|
||||
python3 -m venv lokalenv.
|
||||
# pindah ke virtual :
|
||||
source lokalenv/bin/activated.
|
||||
# install module :
|
||||
pip install -r requierment --update.
|
||||
|
||||
#### Usage
|
||||
```
|
||||
#python manage.py migrate
|
||||
#python manage.py collectstatic
|
||||
#python manage.py createsuperuser
|
||||
#python manage.py runserver
|
||||
```
|
||||
#### Features
|
||||
landing page
|
||||
admin console
|
||||
```
|
||||
-user : adminlokal
|
||||
-pass : adminlokal
|
||||
```
|
||||
#### Contributing
|
||||
|
||||
#### License
|
||||
Copyright@2024 Data Bisnis Solusi
|
||||
|
||||
#### Badges
|
||||
|
||||
#### Screenshots and GIFs
|
||||
|
||||
#### Documentation
|
||||
|
||||
#### Changelog
|
||||
|
||||
### Conclusion
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
from django.contrib import admin
|
||||
from about.models import *
|
||||
|
||||
# About Page Admin
|
||||
admin.site.register(aboutPage)
|
||||
|
||||
# About page SEO admin
|
||||
admin.site.register(aboutPageSEO)
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AboutConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'about'
|
||||
@@ -0,0 +1,27 @@
|
||||
from django import forms
|
||||
from about.models import *
|
||||
|
||||
# About Page Form
|
||||
class aboutPageForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = aboutPage
|
||||
fields = '__all__'
|
||||
widgets = {
|
||||
'description' : forms.Textarea(attrs={'rows' : 4})
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
for field in self.fields.values():
|
||||
field.widget.attrs['class'] = 'form-control'
|
||||
|
||||
# About Page SEO Form
|
||||
class aboutPageSEOForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = aboutPageSEO
|
||||
fields = '__all__'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
for field in self.fields.values():
|
||||
field.widget.attrs['class'] = 'form-control'
|
||||
@@ -0,0 +1,35 @@
|
||||
# Generated by Django 4.2.4 on 2023-08-31 14:00
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='aboutPageSEO',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('meta_title', models.CharField(blank=True, max_length=500, null=True)),
|
||||
('meta_description', models.CharField(blank=True, max_length=1000, null=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='teamSection',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('image', models.ImageField(upload_to='Teams/')),
|
||||
('name', models.CharField(max_length=200)),
|
||||
('position', models.CharField(max_length=200)),
|
||||
('facebook', models.CharField(blank=True, max_length=500, null=True)),
|
||||
('instagram', models.CharField(blank=True, max_length=500, null=True)),
|
||||
('linkedin', models.CharField(blank=True, max_length=500, null=True)),
|
||||
('whatsapp', models.CharField(blank=True, max_length=500, null=True)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,32 @@
|
||||
# Generated by Django 4.2.4 on 2023-08-31 14:28
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('about', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='aboutPage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('subtitle', models.CharField(max_length=100)),
|
||||
('title', models.CharField(max_length=300)),
|
||||
('description', models.TextField()),
|
||||
('button1_text', models.CharField(max_length=100)),
|
||||
('button1_url', models.CharField(max_length=500)),
|
||||
('button2_text', models.CharField(max_length=100)),
|
||||
('button2_url', models.CharField(max_length=500)),
|
||||
('button3_text', models.CharField(max_length=100)),
|
||||
('button3_url', models.CharField(max_length=500)),
|
||||
('years_of_experience', models.IntegerField()),
|
||||
('image1', models.ImageField(upload_to='AboutPage/')),
|
||||
('image2', models.ImageField(upload_to='AboutPage/')),
|
||||
('image3', models.ImageField(upload_to='AboutPage/')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.4 on 2023-09-16 14:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('about', '0002_aboutpage'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='years_of_experience',
|
||||
field=models.CharField(max_length=200),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.4 on 2023-09-16 14:27
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('about', '0003_alter_aboutpage_years_of_experience'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='years_of_experience',
|
||||
field=models.IntegerField(),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,40 @@
|
||||
# Generated by Django 4.2.4 on 2023-09-16 14:30
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('about', '0004_alter_aboutpage_years_of_experience'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='aboutpage',
|
||||
old_name='button1_text',
|
||||
new_name='feature1',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='aboutpage',
|
||||
old_name='button2_text',
|
||||
new_name='feature2',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='aboutpage',
|
||||
old_name='button3_text',
|
||||
new_name='feature3',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='aboutpage',
|
||||
name='button1_url',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='aboutpage',
|
||||
name='button2_url',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='aboutpage',
|
||||
name='button3_url',
|
||||
),
|
||||
]
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
# Generated by Django 4.2.4 on 2023-10-18 05:31
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('about', '0005_rename_button1_text_aboutpage_feature1_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='description',
|
||||
field=models.TextField(blank=True, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='feature1',
|
||||
field=models.CharField(blank=True, max_length=100, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='feature2',
|
||||
field=models.CharField(blank=True, max_length=100, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='feature3',
|
||||
field=models.CharField(blank=True, max_length=100, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='image1',
|
||||
field=models.ImageField(blank=True, null=True, upload_to='AboutPage/'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='image2',
|
||||
field=models.ImageField(blank=True, null=True, upload_to='AboutPage/'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='image3',
|
||||
field=models.ImageField(blank=True, null=True, upload_to='AboutPage/'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='subtitle',
|
||||
field=models.CharField(blank=True, max_length=100, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='title',
|
||||
field=models.CharField(blank=True, max_length=300, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutpage',
|
||||
name='years_of_experience',
|
||||
field=models.IntegerField(blank=True, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,16 @@
|
||||
# Generated by Django 5.0.3 on 2024-11-19 03:52
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('about', '0006_alter_aboutpage_description_alter_aboutpage_feature1_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='teamSection',
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,30 @@
|
||||
from django.db import models
|
||||
|
||||
# About Page Model
|
||||
class aboutPage(models.Model):
|
||||
subtitle = models.CharField(max_length=100, blank=True, null=True)
|
||||
title = models.CharField(max_length=300, blank=True, null=True)
|
||||
description = models.TextField(blank=True, null=True)
|
||||
|
||||
feature1 = models.CharField(max_length=100, blank=True, null=True)
|
||||
|
||||
feature2 = models.CharField(max_length=100, blank=True, null=True)
|
||||
|
||||
feature3 = models.CharField(max_length=100, blank=True, null=True)
|
||||
|
||||
years_of_experience = models.IntegerField(blank=True, null=True)
|
||||
|
||||
image1 = models.ImageField(upload_to='AboutPage/', blank=True, null=True)
|
||||
image2 = models.ImageField(upload_to='AboutPage/', blank=True, null=True)
|
||||
image3 = models.ImageField(upload_to='AboutPage/', blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
|
||||
class aboutPageSEO(models.Model):
|
||||
meta_title = models.CharField(max_length=500, blank=True, null=True)
|
||||
meta_description = models.CharField(max_length=1000, blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.meta_title
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.urls import path
|
||||
from about.views import *
|
||||
|
||||
urlpatterns = [
|
||||
path('about-us/', aboutPageFront, name='aboutPageFront'),
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
from django.shortcuts import render
|
||||
from about.models import *
|
||||
from home.models import *
|
||||
|
||||
def aboutPageFront(request):
|
||||
seo = aboutPageSEO.objects.first()
|
||||
aboutpage = aboutPage.objects.first()
|
||||
about = aboutSection.objects.first()
|
||||
|
||||
context = {
|
||||
'seo' : seo,
|
||||
'aboutpage' : aboutpage,
|
||||
'about' : about,
|
||||
}
|
||||
|
||||
return render(request, 'front/main/about.html', context)
|
||||
|
||||
def error_404(request, exception):
|
||||
return render(request, 'error/404.html', status=404)
|
||||
@@ -0,0 +1,36 @@
|
||||
from django.contrib import admin
|
||||
from accounts.models import *
|
||||
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
||||
|
||||
class UserAdmin(BaseUserAdmin):
|
||||
list_display = (
|
||||
'username',
|
||||
'email',
|
||||
'is_verified',
|
||||
'role',
|
||||
'created',
|
||||
)
|
||||
list_filter = (
|
||||
'is_superuser',
|
||||
'is_verified',
|
||||
'created',
|
||||
'role'
|
||||
)
|
||||
search_fields = ('username', 'email')
|
||||
|
||||
# Add the is_verified field to the fieldsets
|
||||
fieldsets = (
|
||||
(None, {'fields': ('username', 'password')}),
|
||||
('Personal Info', {'fields': ('first_name', 'last_name', 'email', 'is_verified', 'role')}),
|
||||
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
|
||||
('Important dates', {'fields': ('last_login', 'date_joined')}),
|
||||
)
|
||||
|
||||
# Register your User model with the modified UserAdmin class
|
||||
admin.site.register(User, UserAdmin)
|
||||
|
||||
@admin.register(UserProfile)
|
||||
class UserProfileAdmin(admin.ModelAdmin):
|
||||
list_display = ('user', 'name', 'email', 'phone', 'profile_picture')
|
||||
|
||||
admin.site.register(PasswordResetToken)
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AccountsConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'accounts'
|
||||
@@ -0,0 +1,75 @@
|
||||
from django import forms
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.forms import UserCreationForm
|
||||
from django.contrib.auth.forms import PasswordChangeForm
|
||||
from accounts.models import *
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# User Profile Form #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
class UserProfileForm(forms.ModelForm):
|
||||
role = forms.ChoiceField(choices=get_user_model().Role.choices, required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
if 'instance' in kwargs:
|
||||
user = kwargs['instance'].user
|
||||
self.fields['role'].initial = user.role
|
||||
self.fields['role'].choices = get_user_model().Role.choices
|
||||
|
||||
class Meta:
|
||||
model = UserProfile
|
||||
fields = ('profile_picture', 'name', 'slug', 'role', 'email', 'phone', 'address', 'city', 'state', 'country', 'zipcode', 'facebook', 'instagram', 'linkedin')
|
||||
widgets = {
|
||||
'profile_picture': forms.ClearableFileInput(attrs={'class': 'form-control'}),
|
||||
'name': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'slug': forms.TextInput(attrs={'class': 'form-control', 'readonly': 'readonly'}),
|
||||
'email': forms.EmailInput(attrs={'class': 'form-control'}),
|
||||
'phone': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'role': forms.Select(attrs={'class': 'form-select'}),
|
||||
'address': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'city': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'state': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'country': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'zipcode': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'facebook': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'instagram': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'linkedin': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
}
|
||||
def save(self, commit=True):
|
||||
instance = super().save(commit=False)
|
||||
if commit:
|
||||
user = instance.user
|
||||
user.role = self.cleaned_data['role']
|
||||
user.save()
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# User Creation Form #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
class CustomUserCreationForm(UserCreationForm):
|
||||
name = forms.CharField(max_length=255)
|
||||
email = forms.EmailField(widget=forms.EmailInput(attrs={'class': 'form-control'}))
|
||||
role = forms.ChoiceField(choices=[], widget=forms.Select(attrs={'class': 'form-select'}))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['role'].choices = get_user_model().Role.choices
|
||||
|
||||
class Meta:
|
||||
model = get_user_model()
|
||||
fields = ['name', 'username', 'password1', 'password2', 'email', 'role']
|
||||
widgets = {
|
||||
'name': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'username': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'password1': forms.PasswordInput(attrs={'class': 'form-control'}),
|
||||
'password2': forms.PasswordInput(attrs={'class': 'form-control'}),
|
||||
}
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Password Form #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
class UserPasswordChangeForm(PasswordChangeForm):
|
||||
class Meta:
|
||||
model = User
|
||||
@@ -0,0 +1,26 @@
|
||||
from django.contrib.auth.models import BaseUserManager
|
||||
|
||||
|
||||
class UserManager(BaseUserManager):
|
||||
def create_user(self, email, password=None, **extra_fields):
|
||||
if not email :
|
||||
raise ValueError('Users must have an email address')
|
||||
email = self.normalize_email(email)
|
||||
user = self.model(email=email,**extra_fields)
|
||||
user.set_password(password)
|
||||
user.save(using=self._db)
|
||||
return user
|
||||
|
||||
def create_superuser(self, email, password , **extra_fields):
|
||||
extra_fields.setdefault('is_superuser',True)
|
||||
extra_fields.setdefault('is_staff',True)
|
||||
extra_fields.setdefault('is_active',True)
|
||||
|
||||
if extra_fields.get('is_superuser') is not True:
|
||||
raise ValueError('Superuser must have is_superuser=True.')
|
||||
if extra_fields.get('is_staff') is not True:
|
||||
raise ValueError('Superuser must have is_staff=True.')
|
||||
if extra_fields.get('is_active') is not True:
|
||||
raise ValueError('Superuser must have is_active=True.')
|
||||
return self.create_user(email,password,**extra_fields)
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
# Generated by Django 4.2.4 on 2023-08-31 05:40
|
||||
|
||||
from django.conf import settings
|
||||
import django.contrib.auth.validators
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('auth', '0012_alter_user_first_name_max_length'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='User',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('password', models.CharField(max_length=128, verbose_name='password')),
|
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
|
||||
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
|
||||
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
|
||||
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
|
||||
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
|
||||
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
|
||||
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
|
||||
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
|
||||
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
|
||||
('is_verified', models.BooleanField(default=False, verbose_name='Is Verified')),
|
||||
('role', models.CharField(blank=True, choices=[('Admin', 'Admin'), ('Editor', 'Editor')], max_length=255, null=True, verbose_name='Role')),
|
||||
('created', models.DateField(auto_now_add=True)),
|
||||
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
|
||||
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'user',
|
||||
'verbose_name_plural': 'users',
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserProfile',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('profile_picture', models.ImageField(blank=True, null=True, upload_to='user_pictures/')),
|
||||
('name', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('slug', models.SlugField(blank=True, max_length=255, null=True)),
|
||||
('email', models.EmailField(blank=True, max_length=255, null=True)),
|
||||
('phone', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('address', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('city', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('state', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('country', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('zipcode', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('facebook', models.CharField(blank=True, max_length=500, null=True)),
|
||||
('instagram', models.CharField(blank=True, max_length=500, null=True)),
|
||||
('linkedin', models.CharField(blank=True, max_length=500, null=True)),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,27 @@
|
||||
# Generated by Django 4.2.4 on 2023-09-17 18:12
|
||||
|
||||
import datetime
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('accounts', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='PasswordResetToken',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('token', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('expiration_time', models.DurationField(default=datetime.timedelta(seconds=3600))),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.4 on 2023-09-17 18:49
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('accounts', '0002_passwordresettoken'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='passwordresettoken',
|
||||
name='expiration_time',
|
||||
field=models.DateTimeField(),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,123 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from accounts.manager import UserManager
|
||||
from django.contrib.auth.models import BaseUserManager
|
||||
from django.utils.text import slugify
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils import timezone
|
||||
import uuid
|
||||
|
||||
class User(AbstractUser):
|
||||
class Role(models.TextChoices):
|
||||
Admin = 'Admin',"Admin"
|
||||
Editor = 'Editor',"Editor"
|
||||
is_verified = models.BooleanField(default=False , verbose_name='Is Verified')
|
||||
role = models.CharField(max_length=255, verbose_name='Role' , choices=Role.choices, blank=True, null=True)
|
||||
created = models.DateField(auto_now_add=True)
|
||||
base_role = Role.Admin
|
||||
|
||||
objects = UserManager()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.pk and not self.role:
|
||||
self.role = self.base_role
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return self.username
|
||||
|
||||
# manager
|
||||
class CustomerUserManager(BaseUserManager):
|
||||
def get_queryset(self ,*args, **kwargs) :
|
||||
reasult = super().get_queryset(*args, **kwargs)
|
||||
return reasult.filter(role=User.Role.Editor)
|
||||
|
||||
|
||||
def create_user(self, email, password=None, **extra_fields):
|
||||
if not email :
|
||||
raise ValueError('Users must have an email address')
|
||||
email = self.normalize_email(email)
|
||||
user = self.model(email=email,**extra_fields)
|
||||
user.set_password(password)
|
||||
user.save()
|
||||
return user
|
||||
|
||||
|
||||
# User Profile
|
||||
class UserProfile(models.Model):
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
profile_picture = models.ImageField(upload_to='user_pictures/', blank=True, null=True)
|
||||
name = models.CharField(max_length=255, blank=True, null=True)
|
||||
slug = models.SlugField(max_length=255, blank=True, null=True)
|
||||
email = models.EmailField(max_length=255, blank=True, null=True)
|
||||
phone = models.CharField(max_length=255, blank=True, null=True)
|
||||
address = models.CharField(max_length=255, blank=True, null=True)
|
||||
city = models.CharField(max_length=255, blank=True, null=True)
|
||||
state = models.CharField(max_length=255, blank=True, null=True)
|
||||
country = models.CharField(max_length=255, blank=True, null=True)
|
||||
zipcode = models.CharField(max_length=255, blank=True, null=True)
|
||||
facebook = models.CharField(max_length=500, blank=True, null=True)
|
||||
instagram = models.CharField(max_length=500, blank=True, null=True)
|
||||
linkedin = models.CharField(max_length=500, blank=True, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.pk:
|
||||
original_profile = UserProfile.objects.get(pk=self.pk)
|
||||
if original_profile.user.email != self.email:
|
||||
# Email has changed, update it in the associated User model
|
||||
original_profile.user.email = self.email
|
||||
original_profile.user.save()
|
||||
|
||||
self.slug = slugify(self.user.username)
|
||||
super(UserProfile, self).save(*args, **kwargs)
|
||||
|
||||
def getUserImage(self):
|
||||
image_url = ""
|
||||
if self.profile_picture:
|
||||
image_url = self.profile_picture.url
|
||||
else:
|
||||
image_url = "https://cdn-icons-png.flaticon.com/128/3135/3135715.png"
|
||||
return image_url
|
||||
|
||||
def __str__(self):
|
||||
return self.user.username
|
||||
|
||||
# Password reset token generate
|
||||
class PasswordResetToken(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
token = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
expiration_time = models.DateTimeField()
|
||||
|
||||
def __str__(self):
|
||||
return str(self.token)
|
||||
|
||||
def is_expired(self):
|
||||
now = timezone.now()
|
||||
return now > self.expiration_time
|
||||
# Signals
|
||||
@receiver(post_save, sender=User)
|
||||
def create_user_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
UserProfile.objects.create(
|
||||
user=instance,
|
||||
email=instance.email,
|
||||
name=instance.username,
|
||||
slug=slugify(instance.username),
|
||||
)
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def save_user_profile(sender, instance, **kwargs):
|
||||
instance.userprofile.save()
|
||||
|
||||
# signals for User
|
||||
@receiver(post_save, sender=User)
|
||||
def create_customer_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
UserProfile.objects.get_or_create(user=instance)
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def save_customer_profile(sender, instance, **kwargs):
|
||||
if hasattr(instance, 'userprofile'):
|
||||
instance.userprofile.save()
|
||||
@@ -0,0 +1,31 @@
|
||||
from django import template
|
||||
from django.utils.timesince import timesince
|
||||
import random
|
||||
|
||||
register = template.Library()
|
||||
|
||||
@register.filter
|
||||
def add_class(field, css_class):
|
||||
return field.as_widget(attrs={'class': css_class})
|
||||
|
||||
@register.filter
|
||||
def add_name(field, atrname):
|
||||
return field.as_widget(attrs={'name': atrname})
|
||||
|
||||
@register.filter
|
||||
def mul(value, arg):
|
||||
return value * arg
|
||||
|
||||
# Define a list of classes to choose from
|
||||
CLASS_CHOICES = ["primary", "danger", "warning", "success"]
|
||||
|
||||
@register.filter
|
||||
def random_class(value):
|
||||
# Choose a random class from the list
|
||||
return random.choice(CLASS_CHOICES)
|
||||
|
||||
@register.filter(name='attr')
|
||||
def attr(field, attribute):
|
||||
attr_name, attr_value = attribute.split('=')
|
||||
attrs = {attr_name: attr_value}
|
||||
return field.as_widget(attrs=attrs)
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,16 @@
|
||||
from django.urls import path
|
||||
from accounts.views import *
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/users/user-list', usersList, name="userList"),
|
||||
path('admin/user/create', createUser, name="createUser"),
|
||||
path('admin/edit-profile/<int:id>', editUserProfile, name='editUserProfile'),
|
||||
path('admin/user/change-password/<int:id>', changePassword, name='changePassword'),
|
||||
path('admin/user/delete/<int:id>', deleteUser, name='deleteUser'),
|
||||
|
||||
path('forgot-password/', initiate_password_reset, name='initiate_password_reset'),
|
||||
path('reset_password/<uuid:token>/', reset_password, name='reset_password'),
|
||||
|
||||
path('login/', logIn, name='logIn'),
|
||||
path('logout/', LogOut, name='LogOut'),
|
||||
]
|
||||
@@ -0,0 +1,31 @@
|
||||
# utils.py
|
||||
from django.conf import settings
|
||||
import uuid
|
||||
from django.core.mail import send_mail
|
||||
from django.utils import timezone
|
||||
from .models import PasswordResetToken
|
||||
from django.urls import reverse
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.html import strip_tags
|
||||
from settings.models import websiteSetting
|
||||
|
||||
|
||||
def generate_reset_token_and_send_email(user, request):
|
||||
token = uuid.uuid4() # Generate a UUID4 token
|
||||
expiration_time = timezone.now() + timezone.timedelta(hours=1)
|
||||
reset_token = PasswordResetToken.objects.create(user=user, token=token, expiration_time=expiration_time)
|
||||
|
||||
reset_link = request.build_absolute_uri(reverse('reset_password', args=[str(reset_token.token)]))
|
||||
|
||||
website_settings = websiteSetting.objects.first()
|
||||
subject = "Password Reset"
|
||||
html_message = render_to_string('authenticate/email/password_reset_email.html', {
|
||||
'user': user,
|
||||
'reset_link': reset_link,
|
||||
})
|
||||
plain_message = strip_tags(html_message)
|
||||
from_email = f'"{website_settings.name}" <{settings.EMAIL_HOST_USER}>'
|
||||
recipient_list = [user.email]
|
||||
|
||||
# Send the email with HTML content
|
||||
send_mail(subject, plain_message, from_email, recipient_list, html_message=html_message)
|
||||
@@ -0,0 +1,223 @@
|
||||
from django.shortcuts import render, redirect
|
||||
from accounts.models import *
|
||||
from django.http import Http404
|
||||
from accounts.forms import *
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth import update_session_auth_hash
|
||||
from accounts.utils import *
|
||||
from django.contrib.auth import authenticate, login, logout
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from core.decorators import *
|
||||
from django.conf import settings
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin User List #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def usersList(request):
|
||||
users = UserProfile.objects.all()
|
||||
context = {
|
||||
'title': 'Users',
|
||||
'users': users,
|
||||
}
|
||||
return render(request, 'authenticate/user/users.html', context)
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin User Edit #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def editUserProfile(request, id):
|
||||
try:
|
||||
profile = UserProfile.objects.get(id=id)
|
||||
user = profile.user
|
||||
except UserProfile.DoesNotExist:
|
||||
raise Http404("User profile does not exist")
|
||||
|
||||
if request.method == 'POST':
|
||||
form = UserProfileForm(request.POST, request.FILES, instance=profile)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Profile updated successfully.')
|
||||
return redirect('editUserProfile', user.id)
|
||||
else:
|
||||
form = UserProfileForm(instance=profile)
|
||||
|
||||
context = {
|
||||
'title': 'Edit User Profile',
|
||||
'form': form,
|
||||
'profile': profile,
|
||||
'user': user,
|
||||
}
|
||||
return render(request, 'authenticate/user/edit.html', context)
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin User Create #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def createUser(request):
|
||||
if request.method == 'POST':
|
||||
form = CustomUserCreationForm(request.POST)
|
||||
if form.is_valid():
|
||||
user = form.save(commit=False) # Prevent immediate save
|
||||
user.role = form.cleaned_data['role'] # Set role from form
|
||||
user.save() # Save User instance to DB
|
||||
|
||||
# Update or Create a profile for the user
|
||||
UserProfile.objects.update_or_create(
|
||||
user=user,
|
||||
defaults={
|
||||
'name': form.cleaned_data['name'],
|
||||
'email': form.cleaned_data['email']
|
||||
}
|
||||
)
|
||||
|
||||
return redirect('userList')
|
||||
else:
|
||||
print(form.errors)
|
||||
else:
|
||||
form = CustomUserCreationForm()
|
||||
|
||||
context = {
|
||||
'title': 'Create User',
|
||||
'form': form,
|
||||
}
|
||||
return render(request, 'authenticate/user/create.html', context)
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin User Password #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def changePassword(request, id):
|
||||
|
||||
user = User.objects.get(id=id)
|
||||
profile = UserProfile.objects.get(user=user)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = UserPasswordChangeForm(user, request.POST)
|
||||
if form.is_valid():
|
||||
user = form.save()
|
||||
update_session_auth_hash(request, user)
|
||||
messages.success(request, 'Password changed successfully.')
|
||||
return redirect('changePassword', user.id)
|
||||
else:
|
||||
form = UserPasswordChangeForm(user)
|
||||
|
||||
context = {
|
||||
'title': 'Change Password',
|
||||
'form': form,
|
||||
'profile': profile,
|
||||
'user': user,
|
||||
}
|
||||
return render(request, 'authenticate/user/password.html', context)
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Delete User #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def deleteUser(request, id):
|
||||
try:
|
||||
user = User.objects.get(id=id)
|
||||
profile = UserProfile.objects.get(user=user)
|
||||
user.delete()
|
||||
profile.delete()
|
||||
except User.DoesNotExist:
|
||||
raise Http404("User does not exist")
|
||||
|
||||
return redirect('userList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Reset Password #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
def initiate_password_reset(request):
|
||||
if request.method == 'POST':
|
||||
username = request.POST.get('username')
|
||||
try:
|
||||
user = User.objects.get(username=username)
|
||||
generate_reset_token_and_send_email(user, request)
|
||||
messages.success(request, 'An email has sent!')
|
||||
return redirect('initiate_password_reset')
|
||||
except User.DoesNotExist:
|
||||
messages.warning(request, 'Invalid username!')
|
||||
return redirect('initiate_password_reset')
|
||||
context = {
|
||||
'title' : 'Forgot Password'
|
||||
}
|
||||
return render(request, 'authenticate/auth/forgotpassword.html', context)
|
||||
|
||||
def reset_password(request, token):
|
||||
try:
|
||||
password_reset_token = PasswordResetToken.objects.get(token=token)
|
||||
if password_reset_token.is_expired():
|
||||
messages.warning(request, 'The password reset token has expired. Please initiate the password reset process again.')
|
||||
return redirect('password_reset')
|
||||
|
||||
if request.method == 'POST':
|
||||
new_password1 = request.POST.get('new_password1')
|
||||
new_password2 = request.POST.get('new_password2')
|
||||
if new_password1 == new_password2:
|
||||
|
||||
user = password_reset_token.user
|
||||
user.set_password(new_password1)
|
||||
user.save()
|
||||
|
||||
update_session_auth_hash(request, user)
|
||||
|
||||
password_reset_token.delete()
|
||||
messages.success(request, 'Password reset successfully!')
|
||||
return redirect('/')
|
||||
else:
|
||||
messages.warning(request, 'Passwords did not match. Please try again.')
|
||||
return redirect('reset_password', token=token)
|
||||
context = {
|
||||
'title' : 'Reset Password'
|
||||
}
|
||||
return render(request, 'authenticate/auth/reset.html', context)
|
||||
except PasswordResetToken.DoesNotExist:
|
||||
messages.warning(request, 'Invalid token. Please ensure you have the correct link.')
|
||||
return redirect('initiate_password_reset')
|
||||
except Exception as e:
|
||||
messages.warning(request, f'An error occurred: {str(e)}')
|
||||
return redirect('/')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Login #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
def logIn(request):
|
||||
if not request.user.is_authenticated:
|
||||
if request.method == 'POST':
|
||||
username = request.POST.get('username')
|
||||
password = request.POST.get('login[password]')
|
||||
user = authenticate(request, username=username, password=password)
|
||||
if user is not None:
|
||||
login(request, user)
|
||||
return redirect('adminHome')
|
||||
else:
|
||||
messages.warning(request, 'Invalid username or password!')
|
||||
return redirect('logIn')
|
||||
|
||||
else:
|
||||
demo_mode = True if 'core.middleware.middleware.DemoModeMiddleware' in settings.MIDDLEWARE else False
|
||||
context = {
|
||||
'title' : 'Log In',
|
||||
'demo_mode' : demo_mode
|
||||
}
|
||||
return render(request, 'authenticate/auth/login.html', context)
|
||||
else:
|
||||
return redirect('adminHome')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# LogOut #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='signIn')
|
||||
def LogOut(request):
|
||||
logout(request)
|
||||
messages.success(request, 'Logout successfully!')
|
||||
return redirect('logIn')
|
||||
|
||||
def error_404(request, exception):
|
||||
return render(request, 'error/404.html', status=404)
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AdminappConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'adminapp'
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,64 @@
|
||||
from django.urls import path
|
||||
from adminapp.views import *
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/dashboard', adminHome, name='adminHome'),
|
||||
|
||||
# Admin Project URLS
|
||||
path('admin/projects', adminProjectList, name='adminProjectList'),
|
||||
path('admin/project/create', adminProjectCreate, name='adminProjectCreate'),
|
||||
path('admin/project/edit/<slug:slug>', adminProjectEdit, name='adminProjectEdit'),
|
||||
path('admin/project/delete/<int:id>', adminProjectDelete, name='adminProjectDelete'),
|
||||
|
||||
# Admin Project Category URLS
|
||||
path('admin/project-category', adminProjectCategoryList, name='adminProjectCategoryList'),
|
||||
path('admin/project-category/create', adminProjectCategoryCreate, name='adminProjectCategoryCreate'),
|
||||
path('admin/project-category/edit/<slug:slug>', adminProjectCategoryEdit, name='adminProjectCategoryEdit'),
|
||||
path('admin/project-category/delete/<int:id>', adminProjectCategoryDelete, name='adminProjectCategoryDelete'),
|
||||
|
||||
# Admin Service URLS
|
||||
path('admin/services', adminServiceList, name='adminServiceList'),
|
||||
path('admin/service/create', adminServiceCreate, name='adminServiceCreate'),
|
||||
path('admin/service/edit/<slug:slug>', adminServiceEdit, name='adminServiceEdit'),
|
||||
path('admin/service/delete/<int:id>', adminServiceDelete, name='adminServiceDelete'),
|
||||
|
||||
# Admin Slider Element URLS
|
||||
path('admin/element/sliders', adminSliderElementList, name='adminSliderElementList'),
|
||||
path('admin/element/slider/create', adminSliderElementCreate, name='adminSliderElementCreate'),
|
||||
path('admin/element/slider/edit/<int:id>', adminSliderElementEdit, name='adminSliderElementEdit'),
|
||||
path('admin/element/slider/delete/<int:id>', adminSliderElementDelete, name='adminSliderElementDelete'),
|
||||
|
||||
# Admin Client Element URLS
|
||||
path('admin/element/clients', adminClientElementList, name='adminClientElementList'),
|
||||
path('admin/element/client/create', adminClientElementCreate, name='adminClientElementCreate'),
|
||||
path('admin/element/client/edit/<int:id>', adminClientElementEdit, name='adminClientElementEdit'),
|
||||
path('admin/element/client/delete/<int:id>', adminClientElementDelete, name='adminClientElementDelete'),
|
||||
|
||||
# Admin Contact URLS
|
||||
path('admin/contacts', AdminContactList, name='AdminContactList'),
|
||||
path('admin/contact/delete/<int:id>', AdminContactDelete, name='AdminContactDelete'),
|
||||
|
||||
# Admin Settings URLS
|
||||
path('admin/settings/website-settings', AdminWebsiteSettings, name='AdminWebsiteSettings'),
|
||||
path('admin/settings/header-footer', AdminHeaderFooterSettings, name='AdminHeaderFooterSettings'),
|
||||
path('admin/settings/seo', AdminSEOSettings, name='AdminSEOSettings'),
|
||||
|
||||
# Admin Primary Menu URLS
|
||||
path('admin/menus/primary-menu', AdminPrimaryMenuList, name='AdminPrimaryMenuList'),
|
||||
path('admin/primary-menu/create', AdminPrimaryMenuCreate, name='AdminPrimaryMenuCreate'),
|
||||
path('admin/primary-menu/edit/<int:id>', AdminPrimaryMenuEdit, name='AdminPrimaryMenuEdit'),
|
||||
path('admin/primary-menu/delete/<int:id>', AdminPrimaryMenuDelete, name='AdminPrimaryMenuDelete'),
|
||||
|
||||
# Admin Sub Menu URLS
|
||||
path('admin/menus/sub-menu', AdminSubMenuList, name='AdminSubMenuList'),
|
||||
path('admin/sub-menu/create', AdminSubMenuCreate, name='AdminSubMenuCreate'),
|
||||
path('admin/sub-menu/edit/<int:id>', AdminSubMenuEdit, name='AdminSubMenuEdit'),
|
||||
path('admin/sub-menu/delete/<int:id>', AdminSubMenuDelete, name='AdminSubMenuDelete'),
|
||||
|
||||
# Admin Pages URLS
|
||||
path('admin/pages/home-page', AdminHomePage, name='AdminHomePage'),
|
||||
path('admin/pages/about-page', AdminAboutPage, name='AdminAboutPage'),
|
||||
path('admin/pages/service-page', AdminServicePage, name='AdminServicePage'),
|
||||
path('admin/pages/project-page', AdminProjectPage, name='AdminProjectPage'),
|
||||
path('admin/pages/contact-page', AdminContactPage, name='AdminContactPage'),
|
||||
]
|
||||
@@ -0,0 +1,684 @@
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from core.decorators import admin_role_required, both_role_required
|
||||
from home.models import *
|
||||
from home.forms import *
|
||||
from about.models import *
|
||||
from about.forms import *
|
||||
from contact.models import *
|
||||
from contact.forms import *
|
||||
from settings.models import *
|
||||
from settings.forms import *
|
||||
from menus.models import *
|
||||
from menus.forms import *
|
||||
from service.models import *
|
||||
from service.forms import *
|
||||
from project.models import *
|
||||
from project.forms import *
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Home Page #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@both_role_required
|
||||
def adminHome(request):
|
||||
services = serviceSection.objects.all()
|
||||
projects = projectSection.objects.all()
|
||||
clients = clientSection.objects.all()
|
||||
contacts = Contact.objects.all().order_by('-created_at')
|
||||
|
||||
context = {
|
||||
'title' : 'Dashboard',
|
||||
'services': services,
|
||||
'projects': projects,
|
||||
'clients': clients,
|
||||
'contacts' : contacts,
|
||||
}
|
||||
return render(request, 'dashboard/main/index.html', context)
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Project #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminProjectList(request):
|
||||
projects = projectSection.objects.all()
|
||||
context = {
|
||||
'title' : 'Projects',
|
||||
'projects' : projects,
|
||||
}
|
||||
return render(request, 'dashboard/main/project/projects.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminProjectCreate(request):
|
||||
if request.method == 'POST':
|
||||
form = projectSectionForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Project created successfully!')
|
||||
return redirect('adminProjectList')
|
||||
else:
|
||||
form = projectSectionForm()
|
||||
context = {
|
||||
'title' : 'Create Project',
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/project/create.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminProjectEdit(request, slug):
|
||||
project = get_object_or_404(projectSection, slug=slug)
|
||||
if request.method == 'POST':
|
||||
form = projectSectionForm(request.POST, request.FILES, instance=project)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Project updated successfully!')
|
||||
return redirect('adminProjectList')
|
||||
else:
|
||||
form = projectSectionForm(instance=project)
|
||||
context = {
|
||||
'title' : 'Edit Project',
|
||||
'project' : project,
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/project/edit.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminProjectDelete(request, id):
|
||||
project = get_object_or_404(projectSection, id=id)
|
||||
project.delete()
|
||||
messages.warning(request, 'Project deleted!')
|
||||
return redirect('adminProjectList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Project Categories #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminProjectCategoryList(request):
|
||||
categories = projectCategory.objects.all()
|
||||
context = {
|
||||
'title' : 'Project Categories',
|
||||
'categories' : categories,
|
||||
}
|
||||
return render(request, 'dashboard/main/project/partial/category/categories.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminProjectCategoryCreate(request):
|
||||
if request.method == 'POST':
|
||||
form = projectCategoryForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Category created successfully!')
|
||||
return redirect('adminProjectCategoryList')
|
||||
else:
|
||||
form = projectCategoryForm()
|
||||
context = {
|
||||
'title' : 'Create Project Category',
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/project/partial/category/create.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminProjectCategoryEdit(request, slug):
|
||||
category = get_object_or_404(projectCategory, slug=slug)
|
||||
if request.method == 'POST':
|
||||
form = projectCategoryForm(request.POST, request.FILES, instance=category)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Category updated successfully!')
|
||||
return redirect('adminProjectCategoryList')
|
||||
else:
|
||||
form = projectCategoryForm(instance=category)
|
||||
context = {
|
||||
'title' : 'Edit Project Category',
|
||||
'category' : category,
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/project/partial/category/edit.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminProjectCategoryDelete(request, id):
|
||||
category = get_object_or_404(projectCategory, id=id)
|
||||
category.delete()
|
||||
messages.warning(request, 'Category deleted!')
|
||||
return redirect('adminProjectCategoryList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Service #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminServiceList(request):
|
||||
services = serviceSection.objects.all()
|
||||
context = {
|
||||
'title' : 'Services',
|
||||
'services' : services,
|
||||
}
|
||||
return render(request, 'dashboard/main/service/services.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminServiceCreate(request):
|
||||
if request.method == 'POST':
|
||||
form = serviceForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Service created successfully!')
|
||||
return redirect('adminServiceList')
|
||||
else:
|
||||
form = serviceForm()
|
||||
context = {
|
||||
'title' : 'Create Service',
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/service/create.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminServiceEdit(request, slug):
|
||||
service = get_object_or_404(serviceSection, slug=slug)
|
||||
if request.method == 'POST':
|
||||
form = serviceForm(request.POST, request.FILES, instance=service)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Service updated successfully!')
|
||||
return redirect('adminServiceList')
|
||||
else:
|
||||
form = serviceForm(instance=service)
|
||||
context = {
|
||||
'title' : 'Edit Service',
|
||||
'service' : service,
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/service/edit.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminServiceDelete(request, id):
|
||||
service = get_object_or_404(serviceSection, id=id)
|
||||
service.delete()
|
||||
messages.warning(request, 'Service deleted!')
|
||||
return redirect('adminServiceList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Slider Element #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminSliderElementList(request):
|
||||
sliders = sliderSection.objects.all()
|
||||
context = {
|
||||
'title' : 'Sliders',
|
||||
'sliders' : sliders,
|
||||
}
|
||||
return render(request, 'dashboard/main/elements/slider/sliders.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminSliderElementCreate(request):
|
||||
if request.method == 'POST':
|
||||
form = sliderForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Slider created successfully!')
|
||||
return redirect('adminSliderElementList')
|
||||
else:
|
||||
form = sliderForm()
|
||||
context = {
|
||||
'title' : 'Create Slider',
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/elements/slider/create.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminSliderElementEdit(request, id):
|
||||
slider = get_object_or_404(sliderSection, id=id)
|
||||
if request.method == 'POST':
|
||||
form = sliderForm(request.POST, request.FILES, instance=slider)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Slider updated successfully!')
|
||||
return redirect('adminSliderElementList')
|
||||
else:
|
||||
form = sliderForm(instance=slider)
|
||||
|
||||
context = {
|
||||
'title' : 'Edit Slider',
|
||||
'form' : form,
|
||||
'slider' : slider,
|
||||
}
|
||||
return render(request, 'dashboard/main/elements/slider/edit.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminSliderElementDelete(request, id):
|
||||
slider = get_object_or_404(sliderSection, id=id)
|
||||
slider.delete()
|
||||
messages.warning(request, 'Slider deleted!')
|
||||
return redirect('adminSliderElementList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Client Element #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminClientElementList(request):
|
||||
clients = clientSection.objects.all()
|
||||
context = {
|
||||
'title' : 'Clients',
|
||||
'clients' : clients,
|
||||
}
|
||||
return render(request, 'dashboard/main/elements/client/clients.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminClientElementCreate(request):
|
||||
if request.method == 'POST':
|
||||
form = clientSectionForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Client created successfully!')
|
||||
return redirect('adminClientElementList')
|
||||
else:
|
||||
form = clientSectionForm()
|
||||
context = {
|
||||
'title' : 'Create Client',
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/elements/client/create.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminClientElementEdit(request, id):
|
||||
client = get_object_or_404(clientSection, id=id)
|
||||
if request.method == 'POST':
|
||||
form = clientSectionForm(request.POST, request.FILES, instance=client)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Client updated successfully!')
|
||||
return redirect('adminClientElementList')
|
||||
else:
|
||||
form = clientSectionForm(instance=client)
|
||||
|
||||
context = {
|
||||
'title' : 'Edit Client',
|
||||
'form' : form,
|
||||
'client' : client,
|
||||
}
|
||||
return render(request, 'dashboard/main/elements/client/edit.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def adminClientElementDelete(request, id):
|
||||
client = get_object_or_404(clientSection, id=id)
|
||||
client.delete()
|
||||
messages.warning(request, 'Client deleted!')
|
||||
return redirect('adminClientElementList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Contacts #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminContactList(request):
|
||||
contacts = Contact.objects.all()
|
||||
context = {
|
||||
'title' : 'Contacts',
|
||||
'contacts' : contacts,
|
||||
}
|
||||
return render(request, 'dashboard/main/form_data/contacts.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminContactDelete(request, id):
|
||||
contact = get_object_or_404(Contact, id=id)
|
||||
contact.delete()
|
||||
messages.warning(request, 'Contact deleted!')
|
||||
return redirect('AdminContactList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Website Settings #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminWebsiteSettings(request):
|
||||
setting = websiteSetting.objects.first()
|
||||
if request.method == 'POST':
|
||||
form = websiteSettingForm(request.POST, request.FILES, instance=setting)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Settings updated successfully!')
|
||||
return redirect('AdminWebsiteSettings')
|
||||
else:
|
||||
form = websiteSettingForm(instance=setting)
|
||||
context = {
|
||||
'title' : 'Website Settings',
|
||||
'setting' : setting,
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/setting/website.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminHeaderFooterSettings(request):
|
||||
hf = headerFooterSetting.objects.first()
|
||||
if request.method == 'POST':
|
||||
form = headerFooterSettingForm(request.POST, request.FILES, instance=hf)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Header footer updated successfully!')
|
||||
return redirect('AdminHeaderFooterSettings')
|
||||
else:
|
||||
form = headerFooterSettingForm(instance=hf)
|
||||
context = {
|
||||
'title' : 'Header Footer Settings',
|
||||
'hf' : hf,
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/setting/hf.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminSEOSettings(request):
|
||||
seo = SeoSetting.objects.first()
|
||||
if request.method == 'POST':
|
||||
form = SeoSettingForm(request.POST, request.FILES, instance=seo)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'SEO settings updated successfully!')
|
||||
return redirect('AdminSEOSettings')
|
||||
else:
|
||||
form = SeoSettingForm(instance=seo)
|
||||
context = {
|
||||
'title' : 'SEO Settings',
|
||||
'seo' : seo,
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/setting/seo.html', context)
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Primary Menus #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminPrimaryMenuList(request):
|
||||
menus = primaryMenu.objects.all()
|
||||
context = {
|
||||
'title' : 'Menus',
|
||||
'menus' : menus,
|
||||
}
|
||||
return render(request, 'dashboard/main/menu/primary/menus.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminPrimaryMenuCreate(request):
|
||||
if request.method == 'POST':
|
||||
form = primaryMenuForm(request.POST)
|
||||
if form.is_valid():
|
||||
order = form.cleaned_data['order']
|
||||
if primaryMenu.objects.filter(order=order).exists():
|
||||
form.add_error('order', 'A menu with this order already exists. Use a different order.')
|
||||
else:
|
||||
form.save()
|
||||
messages.success(request, 'Menu created successfully!')
|
||||
return redirect('AdminPrimaryMenuList')
|
||||
else:
|
||||
form = primaryMenuForm()
|
||||
|
||||
context = {
|
||||
'title': 'Create Menu',
|
||||
'form': form,
|
||||
}
|
||||
return render(request, 'dashboard/main/menu/primary/create.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminPrimaryMenuEdit(request, id):
|
||||
menu = get_object_or_404(primaryMenu, id=id)
|
||||
if request.method == 'POST':
|
||||
form = primaryMenuForm(request.POST, instance=menu)
|
||||
if form.is_valid():
|
||||
order = form.cleaned_data['order']
|
||||
if primaryMenu.objects.filter(order=order).exclude(id=id).exists():
|
||||
form.add_error('order', 'A menu with this order already exists. Use a different order.')
|
||||
else:
|
||||
form.save()
|
||||
messages.success(request, 'Menu updated successfully!')
|
||||
return redirect('AdminPrimaryMenuList')
|
||||
else:
|
||||
form = primaryMenuForm(instance=menu)
|
||||
|
||||
context = {
|
||||
'title': 'Edit Menu',
|
||||
'form': form,
|
||||
'menu': menu,
|
||||
}
|
||||
return render(request, 'dashboard/main/menu/primary/edit.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminPrimaryMenuDelete(request, id):
|
||||
menu = get_object_or_404(primaryMenu, id=id)
|
||||
menu.delete()
|
||||
messages.warning(request, 'Menu deleted!')
|
||||
return redirect('AdminPrimaryMenuList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Sub Menus #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminSubMenuList(request):
|
||||
submenus = subMenu.objects.all()
|
||||
context = {
|
||||
'title' : 'Sub Menus',
|
||||
'submenus' : submenus,
|
||||
}
|
||||
return render(request, 'dashboard/main/menu/sub/menus.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminSubMenuCreate(request):
|
||||
if request.method == 'POST':
|
||||
form = subMenuForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Submenu created successfully!')
|
||||
return redirect('AdminSubMenuList')
|
||||
else:
|
||||
form = subMenuForm()
|
||||
|
||||
context = {
|
||||
'title': 'Create Submenu',
|
||||
'form': form,
|
||||
}
|
||||
return render(request, 'dashboard/main/menu/sub/create.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminSubMenuEdit(request, id):
|
||||
submenu = get_object_or_404(subMenu, id=id)
|
||||
if request.method == 'POST':
|
||||
form = subMenuForm(request.POST, instance=submenu)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Submenu updated successfully!')
|
||||
return redirect('AdminSubMenuList')
|
||||
else:
|
||||
form = subMenuForm(instance=submenu)
|
||||
|
||||
context = {
|
||||
'title': 'Edit Submenu',
|
||||
'form': form,
|
||||
'submenu': submenu,
|
||||
}
|
||||
return render(request, 'dashboard/main/menu/sub/edit.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminSubMenuDelete(request, id):
|
||||
submenu = get_object_or_404(subMenu, id=id)
|
||||
submenu.delete()
|
||||
messages.warning(request, 'Submenu deleted!')
|
||||
return redirect('AdminSubMenuList')
|
||||
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
# Admin Page Edit #
|
||||
# # # # # # # # # # # # # # # # # #
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminHomePage(request):
|
||||
homeabout = aboutSection.objects.first()
|
||||
homeSEO = homePageSEO.objects.first()
|
||||
|
||||
if request.method == 'POST':
|
||||
if 'subtitle' in request.POST:
|
||||
form = aboutSectionForm(request.POST, request.FILES, instance = homeabout)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Home page updated successfully!')
|
||||
return redirect('AdminHomePage')
|
||||
elif 'meta_title' in request.POST:
|
||||
SeoForm = homePageSEOForm(request.POST, request.FILES, instance = homeSEO)
|
||||
if SeoForm.is_valid():
|
||||
SeoForm.save()
|
||||
messages.success(request, 'Home page seo updated successfully!')
|
||||
return redirect('AdminHomePage')
|
||||
else:
|
||||
return redirect('AdminHomePage')
|
||||
else:
|
||||
form = aboutSectionForm(instance = homeabout)
|
||||
SeoForm = homePageSEOForm(instance = homeSEO)
|
||||
|
||||
context ={
|
||||
'title' : 'Home Page',
|
||||
'form' : form,
|
||||
'SeoForm' : SeoForm,
|
||||
'homeabout' : homeabout,
|
||||
}
|
||||
return render(request, 'dashboard/main/pages/home.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminAboutPage(request):
|
||||
aboutSection = aboutPage.objects.first()
|
||||
aboutSEO = aboutPageSEO.objects.first()
|
||||
if request.method == 'POST':
|
||||
if 'subtitle' in request.POST:
|
||||
form = aboutPageForm(request.POST, request.FILES, instance=aboutSection)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'About page updated successfully!')
|
||||
return redirect('AdminAboutPage')
|
||||
elif 'meta_title' in request.POST:
|
||||
SeoForm = aboutPageSEOForm(request.POST, request.FILES, instance = aboutSEO)
|
||||
if SeoForm.is_valid():
|
||||
SeoForm.save()
|
||||
messages.success(request, 'About page seo updated successfully!')
|
||||
return redirect('AdminAboutPage')
|
||||
else:
|
||||
return redirect('AdminAboutPage')
|
||||
else:
|
||||
form = aboutPageForm(instance=aboutSection)
|
||||
SeoForm = aboutPageSEOForm(instance=aboutSEO)
|
||||
|
||||
context = {
|
||||
'title' : 'About Page',
|
||||
'form' : form,
|
||||
'SeoForm' : SeoForm,
|
||||
}
|
||||
return render(request, 'dashboard/main/pages/about.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminServicePage(request):
|
||||
serviceSEO = servicePageSEO.objects.first()
|
||||
if request.method == 'POST':
|
||||
SeoForm = servicePageSEOForm(request.POST, instance = serviceSEO)
|
||||
if SeoForm.is_valid():
|
||||
SeoForm.save()
|
||||
messages.success(request, 'Service page seo updated successfully!')
|
||||
return redirect('AdminServicePage')
|
||||
else:
|
||||
SeoForm = servicePageSEOForm(instance = serviceSEO)
|
||||
|
||||
context = {
|
||||
'title' : 'Service Page',
|
||||
'SeoForm' : SeoForm,
|
||||
}
|
||||
return render(request, 'dashboard/main/pages/service.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminProjectPage(request):
|
||||
projectSEO = projectPageSEO.objects.first()
|
||||
if request.method == 'POST':
|
||||
SeoForm = projectPageSEOForm(request.POST, instance = projectSEO)
|
||||
if SeoForm.is_valid():
|
||||
SeoForm.save()
|
||||
messages.success(request, 'Project page seo updated successfully!')
|
||||
return redirect('AdminProjectPage')
|
||||
|
||||
else:
|
||||
SeoForm = projectPageSEOForm(instance = projectSEO)
|
||||
|
||||
context = {
|
||||
'title' : 'Project Page',
|
||||
'SeoForm' : SeoForm,
|
||||
}
|
||||
return render(request, 'dashboard/main/pages/project.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminContactPage(request):
|
||||
contactSEO = contactPageSEO.objects.first()
|
||||
if request.method == 'POST':
|
||||
SeoForm = contactPageSEOForm(request.POST, instance = contactSEO)
|
||||
if SeoForm.is_valid():
|
||||
SeoForm.save()
|
||||
messages.success(request, 'Contact page seo updated successfully!')
|
||||
return redirect('AdminContactPage')
|
||||
|
||||
else:
|
||||
SeoForm = contactPageSEOForm(instance = contactSEO)
|
||||
|
||||
context = {
|
||||
'title' : 'Contact Page',
|
||||
'SeoForm' : SeoForm,
|
||||
}
|
||||
return render(request, 'dashboard/main/pages/contact.html', context)
|
||||
|
||||
@login_required(login_url='logIn')
|
||||
@admin_role_required
|
||||
def AdminPolicyPage(request):
|
||||
policy = Policy.objects.first()
|
||||
if request.method == 'POST':
|
||||
form = policyForm(request.POST, instance=policy)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Privacy policy updated successfully')
|
||||
return redirect('AdminPolicyPage')
|
||||
else:
|
||||
form = policyForm(instance=policy)
|
||||
|
||||
context = {
|
||||
'title' : 'Policy Page',
|
||||
'form' : form,
|
||||
}
|
||||
return render(request, 'dashboard/main/pages/policy.html', context)
|
||||
|
||||
# Error Page
|
||||
def error_404(request, exception):
|
||||
return render(request, 'error/404.html', status=404)
|
||||
|
||||
def error_500(request):
|
||||
return render(request, 'error/500.html', status=500)
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"color-1.css"}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+2338
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
+1443
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+765
@@ -0,0 +1,765 @@
|
||||
body[data-aos-duration="50"] [data-aos], [data-aos][data-aos][data-aos-duration="50"] {
|
||||
transition-duration: 50ms;
|
||||
}
|
||||
body[data-aos-delay="50"] [data-aos], [data-aos][data-aos][data-aos-delay="50"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="50"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="50"].aos-animate {
|
||||
transition-delay: 50ms;
|
||||
}
|
||||
body[data-aos-duration="100"] [data-aos], [data-aos][data-aos][data-aos-duration="100"] {
|
||||
transition-duration: 100ms;
|
||||
}
|
||||
body[data-aos-delay="100"] [data-aos], [data-aos][data-aos][data-aos-delay="100"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="100"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="100"].aos-animate {
|
||||
transition-delay: 100ms;
|
||||
}
|
||||
body[data-aos-duration="150"] [data-aos], [data-aos][data-aos][data-aos-duration="150"] {
|
||||
transition-duration: 150ms;
|
||||
}
|
||||
body[data-aos-delay="150"] [data-aos], [data-aos][data-aos][data-aos-delay="150"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="150"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="150"].aos-animate {
|
||||
transition-delay: 150ms;
|
||||
}
|
||||
body[data-aos-duration="200"] [data-aos], [data-aos][data-aos][data-aos-duration="200"] {
|
||||
transition-duration: 200ms;
|
||||
}
|
||||
body[data-aos-delay="200"] [data-aos], [data-aos][data-aos][data-aos-delay="200"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="200"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="200"].aos-animate {
|
||||
transition-delay: 200ms;
|
||||
}
|
||||
body[data-aos-duration="250"] [data-aos], [data-aos][data-aos][data-aos-duration="250"] {
|
||||
transition-duration: 250ms;
|
||||
}
|
||||
body[data-aos-delay="250"] [data-aos], [data-aos][data-aos][data-aos-delay="250"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="250"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="250"].aos-animate {
|
||||
transition-delay: 250ms;
|
||||
}
|
||||
body[data-aos-duration="300"] [data-aos], [data-aos][data-aos][data-aos-duration="300"] {
|
||||
transition-duration: 300ms;
|
||||
}
|
||||
body[data-aos-delay="300"] [data-aos], [data-aos][data-aos][data-aos-delay="300"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="300"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="300"].aos-animate {
|
||||
transition-delay: 300ms;
|
||||
}
|
||||
body[data-aos-duration="350"] [data-aos], [data-aos][data-aos][data-aos-duration="350"] {
|
||||
transition-duration: 350ms;
|
||||
}
|
||||
body[data-aos-delay="350"] [data-aos], [data-aos][data-aos][data-aos-delay="350"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="350"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="350"].aos-animate {
|
||||
transition-delay: 350ms;
|
||||
}
|
||||
body[data-aos-duration="400"] [data-aos], [data-aos][data-aos][data-aos-duration="400"] {
|
||||
transition-duration: 400ms;
|
||||
}
|
||||
body[data-aos-delay="400"] [data-aos], [data-aos][data-aos][data-aos-delay="400"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="400"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="400"].aos-animate {
|
||||
transition-delay: 400ms;
|
||||
}
|
||||
body[data-aos-duration="450"] [data-aos], [data-aos][data-aos][data-aos-duration="450"] {
|
||||
transition-duration: 450ms;
|
||||
}
|
||||
body[data-aos-delay="450"] [data-aos], [data-aos][data-aos][data-aos-delay="450"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="450"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="450"].aos-animate {
|
||||
transition-delay: 450ms;
|
||||
}
|
||||
body[data-aos-duration="500"] [data-aos], [data-aos][data-aos][data-aos-duration="500"] {
|
||||
transition-duration: 500ms;
|
||||
}
|
||||
body[data-aos-delay="500"] [data-aos], [data-aos][data-aos][data-aos-delay="500"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="500"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="500"].aos-animate {
|
||||
transition-delay: 500ms;
|
||||
}
|
||||
body[data-aos-duration="550"] [data-aos], [data-aos][data-aos][data-aos-duration="550"] {
|
||||
transition-duration: 550ms;
|
||||
}
|
||||
body[data-aos-delay="550"] [data-aos], [data-aos][data-aos][data-aos-delay="550"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="550"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="550"].aos-animate {
|
||||
transition-delay: 550ms;
|
||||
}
|
||||
body[data-aos-duration="600"] [data-aos], [data-aos][data-aos][data-aos-duration="600"] {
|
||||
transition-duration: 600ms;
|
||||
}
|
||||
body[data-aos-delay="600"] [data-aos], [data-aos][data-aos][data-aos-delay="600"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="600"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="600"].aos-animate {
|
||||
transition-delay: 600ms;
|
||||
}
|
||||
body[data-aos-duration="650"] [data-aos], [data-aos][data-aos][data-aos-duration="650"] {
|
||||
transition-duration: 650ms;
|
||||
}
|
||||
body[data-aos-delay="650"] [data-aos], [data-aos][data-aos][data-aos-delay="650"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="650"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="650"].aos-animate {
|
||||
transition-delay: 650ms;
|
||||
}
|
||||
body[data-aos-duration="700"] [data-aos], [data-aos][data-aos][data-aos-duration="700"] {
|
||||
transition-duration: 700ms;
|
||||
}
|
||||
body[data-aos-delay="700"] [data-aos], [data-aos][data-aos][data-aos-delay="700"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="700"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="700"].aos-animate {
|
||||
transition-delay: 700ms;
|
||||
}
|
||||
body[data-aos-duration="750"] [data-aos], [data-aos][data-aos][data-aos-duration="750"] {
|
||||
transition-duration: 750ms;
|
||||
}
|
||||
body[data-aos-delay="750"] [data-aos], [data-aos][data-aos][data-aos-delay="750"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="750"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="750"].aos-animate {
|
||||
transition-delay: 750ms;
|
||||
}
|
||||
body[data-aos-duration="800"] [data-aos], [data-aos][data-aos][data-aos-duration="800"] {
|
||||
transition-duration: 800ms;
|
||||
}
|
||||
body[data-aos-delay="800"] [data-aos], [data-aos][data-aos][data-aos-delay="800"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="800"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="800"].aos-animate {
|
||||
transition-delay: 800ms;
|
||||
}
|
||||
body[data-aos-duration="850"] [data-aos], [data-aos][data-aos][data-aos-duration="850"] {
|
||||
transition-duration: 850ms;
|
||||
}
|
||||
body[data-aos-delay="850"] [data-aos], [data-aos][data-aos][data-aos-delay="850"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="850"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="850"].aos-animate {
|
||||
transition-delay: 850ms;
|
||||
}
|
||||
body[data-aos-duration="900"] [data-aos], [data-aos][data-aos][data-aos-duration="900"] {
|
||||
transition-duration: 900ms;
|
||||
}
|
||||
body[data-aos-delay="900"] [data-aos], [data-aos][data-aos][data-aos-delay="900"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="900"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="900"].aos-animate {
|
||||
transition-delay: 900ms;
|
||||
}
|
||||
body[data-aos-duration="950"] [data-aos], [data-aos][data-aos][data-aos-duration="950"] {
|
||||
transition-duration: 950ms;
|
||||
}
|
||||
body[data-aos-delay="950"] [data-aos], [data-aos][data-aos][data-aos-delay="950"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="950"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="950"].aos-animate {
|
||||
transition-delay: 950ms;
|
||||
}
|
||||
body[data-aos-duration="1000"] [data-aos], [data-aos][data-aos][data-aos-duration="1000"] {
|
||||
transition-duration: 1000ms;
|
||||
}
|
||||
body[data-aos-delay="1000"] [data-aos], [data-aos][data-aos][data-aos-delay="1000"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1000"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1000"].aos-animate {
|
||||
transition-delay: 1000ms;
|
||||
}
|
||||
body[data-aos-duration="1050"] [data-aos], [data-aos][data-aos][data-aos-duration="1050"] {
|
||||
transition-duration: 1050ms;
|
||||
}
|
||||
body[data-aos-delay="1050"] [data-aos], [data-aos][data-aos][data-aos-delay="1050"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1050"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1050"].aos-animate {
|
||||
transition-delay: 1050ms;
|
||||
}
|
||||
body[data-aos-duration="1100"] [data-aos], [data-aos][data-aos][data-aos-duration="1100"] {
|
||||
transition-duration: 1100ms;
|
||||
}
|
||||
body[data-aos-delay="1100"] [data-aos], [data-aos][data-aos][data-aos-delay="1100"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1100"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1100"].aos-animate {
|
||||
transition-delay: 1100ms;
|
||||
}
|
||||
body[data-aos-duration="1150"] [data-aos], [data-aos][data-aos][data-aos-duration="1150"] {
|
||||
transition-duration: 1150ms;
|
||||
}
|
||||
body[data-aos-delay="1150"] [data-aos], [data-aos][data-aos][data-aos-delay="1150"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1150"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1150"].aos-animate {
|
||||
transition-delay: 1150ms;
|
||||
}
|
||||
body[data-aos-duration="1200"] [data-aos], [data-aos][data-aos][data-aos-duration="1200"] {
|
||||
transition-duration: 1200ms;
|
||||
}
|
||||
body[data-aos-delay="1200"] [data-aos], [data-aos][data-aos][data-aos-delay="1200"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1200"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1200"].aos-animate {
|
||||
transition-delay: 1200ms;
|
||||
}
|
||||
body[data-aos-duration="1250"] [data-aos], [data-aos][data-aos][data-aos-duration="1250"] {
|
||||
transition-duration: 1250ms;
|
||||
}
|
||||
body[data-aos-delay="1250"] [data-aos], [data-aos][data-aos][data-aos-delay="1250"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1250"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1250"].aos-animate {
|
||||
transition-delay: 1250ms;
|
||||
}
|
||||
body[data-aos-duration="1300"] [data-aos], [data-aos][data-aos][data-aos-duration="1300"] {
|
||||
transition-duration: 1300ms;
|
||||
}
|
||||
body[data-aos-delay="1300"] [data-aos], [data-aos][data-aos][data-aos-delay="1300"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1300"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1300"].aos-animate {
|
||||
transition-delay: 1300ms;
|
||||
}
|
||||
body[data-aos-duration="1350"] [data-aos], [data-aos][data-aos][data-aos-duration="1350"] {
|
||||
transition-duration: 1350ms;
|
||||
}
|
||||
body[data-aos-delay="1350"] [data-aos], [data-aos][data-aos][data-aos-delay="1350"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1350"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1350"].aos-animate {
|
||||
transition-delay: 1350ms;
|
||||
}
|
||||
body[data-aos-duration="1400"] [data-aos], [data-aos][data-aos][data-aos-duration="1400"] {
|
||||
transition-duration: 1400ms;
|
||||
}
|
||||
body[data-aos-delay="1400"] [data-aos], [data-aos][data-aos][data-aos-delay="1400"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1400"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1400"].aos-animate {
|
||||
transition-delay: 1400ms;
|
||||
}
|
||||
body[data-aos-duration="1450"] [data-aos], [data-aos][data-aos][data-aos-duration="1450"] {
|
||||
transition-duration: 1450ms;
|
||||
}
|
||||
body[data-aos-delay="1450"] [data-aos], [data-aos][data-aos][data-aos-delay="1450"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1450"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1450"].aos-animate {
|
||||
transition-delay: 1450ms;
|
||||
}
|
||||
body[data-aos-duration="1500"] [data-aos], [data-aos][data-aos][data-aos-duration="1500"] {
|
||||
transition-duration: 1500ms;
|
||||
}
|
||||
body[data-aos-delay="1500"] [data-aos], [data-aos][data-aos][data-aos-delay="1500"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1500"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1500"].aos-animate {
|
||||
transition-delay: 1500ms;
|
||||
}
|
||||
body[data-aos-duration="1550"] [data-aos], [data-aos][data-aos][data-aos-duration="1550"] {
|
||||
transition-duration: 1550ms;
|
||||
}
|
||||
body[data-aos-delay="1550"] [data-aos], [data-aos][data-aos][data-aos-delay="1550"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1550"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1550"].aos-animate {
|
||||
transition-delay: 1550ms;
|
||||
}
|
||||
body[data-aos-duration="1600"] [data-aos], [data-aos][data-aos][data-aos-duration="1600"] {
|
||||
transition-duration: 1600ms;
|
||||
}
|
||||
body[data-aos-delay="1600"] [data-aos], [data-aos][data-aos][data-aos-delay="1600"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1600"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1600"].aos-animate {
|
||||
transition-delay: 1600ms;
|
||||
}
|
||||
body[data-aos-duration="1650"] [data-aos], [data-aos][data-aos][data-aos-duration="1650"] {
|
||||
transition-duration: 1650ms;
|
||||
}
|
||||
body[data-aos-delay="1650"] [data-aos], [data-aos][data-aos][data-aos-delay="1650"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1650"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1650"].aos-animate {
|
||||
transition-delay: 1650ms;
|
||||
}
|
||||
body[data-aos-duration="1700"] [data-aos], [data-aos][data-aos][data-aos-duration="1700"] {
|
||||
transition-duration: 1700ms;
|
||||
}
|
||||
body[data-aos-delay="1700"] [data-aos], [data-aos][data-aos][data-aos-delay="1700"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1700"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1700"].aos-animate {
|
||||
transition-delay: 1700ms;
|
||||
}
|
||||
body[data-aos-duration="1750"] [data-aos], [data-aos][data-aos][data-aos-duration="1750"] {
|
||||
transition-duration: 1750ms;
|
||||
}
|
||||
body[data-aos-delay="1750"] [data-aos], [data-aos][data-aos][data-aos-delay="1750"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1750"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1750"].aos-animate {
|
||||
transition-delay: 1750ms;
|
||||
}
|
||||
body[data-aos-duration="1800"] [data-aos], [data-aos][data-aos][data-aos-duration="1800"] {
|
||||
transition-duration: 1800ms;
|
||||
}
|
||||
body[data-aos-delay="1800"] [data-aos], [data-aos][data-aos][data-aos-delay="1800"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1800"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1800"].aos-animate {
|
||||
transition-delay: 1800ms;
|
||||
}
|
||||
body[data-aos-duration="1850"] [data-aos], [data-aos][data-aos][data-aos-duration="1850"] {
|
||||
transition-duration: 1850ms;
|
||||
}
|
||||
body[data-aos-delay="1850"] [data-aos], [data-aos][data-aos][data-aos-delay="1850"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1850"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1850"].aos-animate {
|
||||
transition-delay: 1850ms;
|
||||
}
|
||||
body[data-aos-duration="1900"] [data-aos], [data-aos][data-aos][data-aos-duration="1900"] {
|
||||
transition-duration: 1900ms;
|
||||
}
|
||||
body[data-aos-delay="1900"] [data-aos], [data-aos][data-aos][data-aos-delay="1900"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1900"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1900"].aos-animate {
|
||||
transition-delay: 1900ms;
|
||||
}
|
||||
body[data-aos-duration="1950"] [data-aos], [data-aos][data-aos][data-aos-duration="1950"] {
|
||||
transition-duration: 1950ms;
|
||||
}
|
||||
body[data-aos-delay="1950"] [data-aos], [data-aos][data-aos][data-aos-delay="1950"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="1950"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="1950"].aos-animate {
|
||||
transition-delay: 1950ms;
|
||||
}
|
||||
body[data-aos-duration="2000"] [data-aos], [data-aos][data-aos][data-aos-duration="2000"] {
|
||||
transition-duration: 2000ms;
|
||||
}
|
||||
body[data-aos-delay="2000"] [data-aos], [data-aos][data-aos][data-aos-delay="2000"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2000"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2000"].aos-animate {
|
||||
transition-delay: 2000ms;
|
||||
}
|
||||
body[data-aos-duration="2050"] [data-aos], [data-aos][data-aos][data-aos-duration="2050"] {
|
||||
transition-duration: 2050ms;
|
||||
}
|
||||
body[data-aos-delay="2050"] [data-aos], [data-aos][data-aos][data-aos-delay="2050"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2050"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2050"].aos-animate {
|
||||
transition-delay: 2050ms;
|
||||
}
|
||||
body[data-aos-duration="2100"] [data-aos], [data-aos][data-aos][data-aos-duration="2100"] {
|
||||
transition-duration: 2100ms;
|
||||
}
|
||||
body[data-aos-delay="2100"] [data-aos], [data-aos][data-aos][data-aos-delay="2100"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2100"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2100"].aos-animate {
|
||||
transition-delay: 2100ms;
|
||||
}
|
||||
body[data-aos-duration="2150"] [data-aos], [data-aos][data-aos][data-aos-duration="2150"] {
|
||||
transition-duration: 2150ms;
|
||||
}
|
||||
body[data-aos-delay="2150"] [data-aos], [data-aos][data-aos][data-aos-delay="2150"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2150"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2150"].aos-animate {
|
||||
transition-delay: 2150ms;
|
||||
}
|
||||
body[data-aos-duration="2200"] [data-aos], [data-aos][data-aos][data-aos-duration="2200"] {
|
||||
transition-duration: 2200ms;
|
||||
}
|
||||
body[data-aos-delay="2200"] [data-aos], [data-aos][data-aos][data-aos-delay="2200"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2200"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2200"].aos-animate {
|
||||
transition-delay: 2200ms;
|
||||
}
|
||||
body[data-aos-duration="2250"] [data-aos], [data-aos][data-aos][data-aos-duration="2250"] {
|
||||
transition-duration: 2250ms;
|
||||
}
|
||||
body[data-aos-delay="2250"] [data-aos], [data-aos][data-aos][data-aos-delay="2250"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2250"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2250"].aos-animate {
|
||||
transition-delay: 2250ms;
|
||||
}
|
||||
body[data-aos-duration="2300"] [data-aos], [data-aos][data-aos][data-aos-duration="2300"] {
|
||||
transition-duration: 2300ms;
|
||||
}
|
||||
body[data-aos-delay="2300"] [data-aos], [data-aos][data-aos][data-aos-delay="2300"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2300"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2300"].aos-animate {
|
||||
transition-delay: 2300ms;
|
||||
}
|
||||
body[data-aos-duration="2350"] [data-aos], [data-aos][data-aos][data-aos-duration="2350"] {
|
||||
transition-duration: 2350ms;
|
||||
}
|
||||
body[data-aos-delay="2350"] [data-aos], [data-aos][data-aos][data-aos-delay="2350"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2350"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2350"].aos-animate {
|
||||
transition-delay: 2350ms;
|
||||
}
|
||||
body[data-aos-duration="2400"] [data-aos], [data-aos][data-aos][data-aos-duration="2400"] {
|
||||
transition-duration: 2400ms;
|
||||
}
|
||||
body[data-aos-delay="2400"] [data-aos], [data-aos][data-aos][data-aos-delay="2400"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2400"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2400"].aos-animate {
|
||||
transition-delay: 2400ms;
|
||||
}
|
||||
body[data-aos-duration="2450"] [data-aos], [data-aos][data-aos][data-aos-duration="2450"] {
|
||||
transition-duration: 2450ms;
|
||||
}
|
||||
body[data-aos-delay="2450"] [data-aos], [data-aos][data-aos][data-aos-delay="2450"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2450"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2450"].aos-animate {
|
||||
transition-delay: 2450ms;
|
||||
}
|
||||
body[data-aos-duration="2500"] [data-aos], [data-aos][data-aos][data-aos-duration="2500"] {
|
||||
transition-duration: 2500ms;
|
||||
}
|
||||
body[data-aos-delay="2500"] [data-aos], [data-aos][data-aos][data-aos-delay="2500"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2500"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2500"].aos-animate {
|
||||
transition-delay: 2500ms;
|
||||
}
|
||||
body[data-aos-duration="2550"] [data-aos], [data-aos][data-aos][data-aos-duration="2550"] {
|
||||
transition-duration: 2550ms;
|
||||
}
|
||||
body[data-aos-delay="2550"] [data-aos], [data-aos][data-aos][data-aos-delay="2550"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2550"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2550"].aos-animate {
|
||||
transition-delay: 2550ms;
|
||||
}
|
||||
body[data-aos-duration="2600"] [data-aos], [data-aos][data-aos][data-aos-duration="2600"] {
|
||||
transition-duration: 2600ms;
|
||||
}
|
||||
body[data-aos-delay="2600"] [data-aos], [data-aos][data-aos][data-aos-delay="2600"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2600"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2600"].aos-animate {
|
||||
transition-delay: 2600ms;
|
||||
}
|
||||
body[data-aos-duration="2650"] [data-aos], [data-aos][data-aos][data-aos-duration="2650"] {
|
||||
transition-duration: 2650ms;
|
||||
}
|
||||
body[data-aos-delay="2650"] [data-aos], [data-aos][data-aos][data-aos-delay="2650"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2650"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2650"].aos-animate {
|
||||
transition-delay: 2650ms;
|
||||
}
|
||||
body[data-aos-duration="2700"] [data-aos], [data-aos][data-aos][data-aos-duration="2700"] {
|
||||
transition-duration: 2700ms;
|
||||
}
|
||||
body[data-aos-delay="2700"] [data-aos], [data-aos][data-aos][data-aos-delay="2700"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2700"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2700"].aos-animate {
|
||||
transition-delay: 2700ms;
|
||||
}
|
||||
body[data-aos-duration="2750"] [data-aos], [data-aos][data-aos][data-aos-duration="2750"] {
|
||||
transition-duration: 2750ms;
|
||||
}
|
||||
body[data-aos-delay="2750"] [data-aos], [data-aos][data-aos][data-aos-delay="2750"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2750"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2750"].aos-animate {
|
||||
transition-delay: 2750ms;
|
||||
}
|
||||
body[data-aos-duration="2800"] [data-aos], [data-aos][data-aos][data-aos-duration="2800"] {
|
||||
transition-duration: 2800ms;
|
||||
}
|
||||
body[data-aos-delay="2800"] [data-aos], [data-aos][data-aos][data-aos-delay="2800"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2800"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2800"].aos-animate {
|
||||
transition-delay: 2800ms;
|
||||
}
|
||||
body[data-aos-duration="2850"] [data-aos], [data-aos][data-aos][data-aos-duration="2850"] {
|
||||
transition-duration: 2850ms;
|
||||
}
|
||||
body[data-aos-delay="2850"] [data-aos], [data-aos][data-aos][data-aos-delay="2850"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2850"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2850"].aos-animate {
|
||||
transition-delay: 2850ms;
|
||||
}
|
||||
body[data-aos-duration="2900"] [data-aos], [data-aos][data-aos][data-aos-duration="2900"] {
|
||||
transition-duration: 2900ms;
|
||||
}
|
||||
body[data-aos-delay="2900"] [data-aos], [data-aos][data-aos][data-aos-delay="2900"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2900"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2900"].aos-animate {
|
||||
transition-delay: 2900ms;
|
||||
}
|
||||
body[data-aos-duration="2950"] [data-aos], [data-aos][data-aos][data-aos-duration="2950"] {
|
||||
transition-duration: 2950ms;
|
||||
}
|
||||
body[data-aos-delay="2950"] [data-aos], [data-aos][data-aos][data-aos-delay="2950"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="2950"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="2950"].aos-animate {
|
||||
transition-delay: 2950ms;
|
||||
}
|
||||
body[data-aos-duration="3000"] [data-aos], [data-aos][data-aos][data-aos-duration="3000"] {
|
||||
transition-duration: 3000ms;
|
||||
}
|
||||
body[data-aos-delay="3000"] [data-aos], [data-aos][data-aos][data-aos-delay="3000"] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
body[data-aos-delay="3000"] [data-aos].aos-animate, [data-aos][data-aos][data-aos-delay="3000"].aos-animate {
|
||||
transition-delay: 3000ms;
|
||||
}
|
||||
|
||||
body[data-aos-easing=linear] [data-aos], [data-aos][data-aos][data-aos-easing=linear] {
|
||||
transition-timing-function: cubic-bezier(0.25, 0.25, 0.75, 0.75);
|
||||
}
|
||||
body[data-aos-easing=ease] [data-aos], [data-aos][data-aos][data-aos-easing=ease] {
|
||||
transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);
|
||||
}
|
||||
body[data-aos-easing=ease-in] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in] {
|
||||
transition-timing-function: cubic-bezier(0.42, 0, 1, 1);
|
||||
}
|
||||
body[data-aos-easing=ease-out] [data-aos], [data-aos][data-aos][data-aos-easing=ease-out] {
|
||||
transition-timing-function: cubic-bezier(0, 0, 0.58, 1);
|
||||
}
|
||||
body[data-aos-easing=ease-in-out] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-out] {
|
||||
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
|
||||
}
|
||||
body[data-aos-easing=ease-in-back] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-back] {
|
||||
transition-timing-function: cubic-bezier(0.6, -0.28, 0.735, 0.045);
|
||||
}
|
||||
body[data-aos-easing=ease-out-back] [data-aos], [data-aos][data-aos][data-aos-easing=ease-out-back] {
|
||||
transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||||
}
|
||||
body[data-aos-easing=ease-in-out-back] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-out-back] {
|
||||
transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
||||
}
|
||||
body[data-aos-easing=ease-in-sine] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-sine] {
|
||||
transition-timing-function: cubic-bezier(0.47, 0, 0.745, 0.715);
|
||||
}
|
||||
body[data-aos-easing=ease-out-sine] [data-aos], [data-aos][data-aos][data-aos-easing=ease-out-sine] {
|
||||
transition-timing-function: cubic-bezier(0.39, 0.575, 0.565, 1);
|
||||
}
|
||||
body[data-aos-easing=ease-in-out-sine] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-out-sine] {
|
||||
transition-timing-function: cubic-bezier(0.445, 0.05, 0.55, 0.95);
|
||||
}
|
||||
body[data-aos-easing=ease-in-quad] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-quad] {
|
||||
transition-timing-function: cubic-bezier(0.55, 0.085, 0.68, 0.53);
|
||||
}
|
||||
body[data-aos-easing=ease-out-quad] [data-aos], [data-aos][data-aos][data-aos-easing=ease-out-quad] {
|
||||
transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
||||
}
|
||||
body[data-aos-easing=ease-in-out-quad] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-out-quad] {
|
||||
transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);
|
||||
}
|
||||
body[data-aos-easing=ease-in-cubic] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-cubic] {
|
||||
transition-timing-function: cubic-bezier(0.55, 0.085, 0.68, 0.53);
|
||||
}
|
||||
body[data-aos-easing=ease-out-cubic] [data-aos], [data-aos][data-aos][data-aos-easing=ease-out-cubic] {
|
||||
transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
||||
}
|
||||
body[data-aos-easing=ease-in-out-cubic] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-out-cubic] {
|
||||
transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);
|
||||
}
|
||||
body[data-aos-easing=ease-in-quart] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-quart] {
|
||||
transition-timing-function: cubic-bezier(0.55, 0.085, 0.68, 0.53);
|
||||
}
|
||||
body[data-aos-easing=ease-out-quart] [data-aos], [data-aos][data-aos][data-aos-easing=ease-out-quart] {
|
||||
transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
||||
}
|
||||
body[data-aos-easing=ease-in-out-quart] [data-aos], [data-aos][data-aos][data-aos-easing=ease-in-out-quart] {
|
||||
transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fade animations:
|
||||
* fade
|
||||
* fade-up, fade-down, fade-left, fade-right
|
||||
* fade-up-right, fade-up-left, fade-down-right, fade-down-left
|
||||
*/
|
||||
[data-aos^=fade][data-aos^=fade] {
|
||||
opacity: 0;
|
||||
transition-property: opacity, transform;
|
||||
}
|
||||
[data-aos^=fade][data-aos^=fade].aos-animate {
|
||||
opacity: 1;
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
[data-aos=fade-up] {
|
||||
transform: translate(0, 100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-down] {
|
||||
transform: translate(0, -100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-right] {
|
||||
transform: translate(-100px, 0);
|
||||
}
|
||||
|
||||
[data-aos=fade-left] {
|
||||
transform: translate(100px, 0);
|
||||
}
|
||||
|
||||
[data-aos=fade-up-right] {
|
||||
transform: translate(-100px, 100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-up-left] {
|
||||
transform: translate(100px, 100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-down-right] {
|
||||
transform: translate(-100px, -100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-down-left] {
|
||||
transform: translate(100px, -100px);
|
||||
}
|
||||
|
||||
/**
|
||||
* Zoom animations:
|
||||
* zoom-in, zoom-in-up, zoom-in-down, zoom-in-left, zoom-in-right
|
||||
* zoom-out, zoom-out-up, zoom-out-down, zoom-out-left, zoom-out-right
|
||||
*/
|
||||
[data-aos^=zoom][data-aos^=zoom] {
|
||||
opacity: 0;
|
||||
transition-property: opacity, transform;
|
||||
}
|
||||
[data-aos^=zoom][data-aos^=zoom].aos-animate {
|
||||
opacity: 1;
|
||||
transform: translate(0, 0) scale(1);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in] {
|
||||
transform: scale(0.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in-up] {
|
||||
transform: translate(0, 100px) scale(0.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in-down] {
|
||||
transform: translate(0, -100px) scale(0.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in-right] {
|
||||
transform: translate(-100px, 0) scale(0.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in-left] {
|
||||
transform: translate(100px, 0) scale(0.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out] {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out-up] {
|
||||
transform: translate(0, 100px) scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out-down] {
|
||||
transform: translate(0, -100px) scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out-right] {
|
||||
transform: translate(-100px, 0) scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out-left] {
|
||||
transform: translate(100px, 0) scale(1.2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Slide animations
|
||||
*/
|
||||
[data-aos^=slide][data-aos^=slide] {
|
||||
transition-property: transform;
|
||||
}
|
||||
[data-aos^=slide][data-aos^=slide].aos-animate {
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
[data-aos=slide-up] {
|
||||
transform: translateY(100%);
|
||||
}
|
||||
|
||||
[data-aos=slide-down] {
|
||||
transform: translateY(-100%);
|
||||
}
|
||||
|
||||
[data-aos=slide-right] {
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
|
||||
[data-aos=slide-left] {
|
||||
transform: translateX(100%);
|
||||
}
|
||||
|
||||
/**
|
||||
* Flip animations:
|
||||
* flip-left, flip-right, flip-up, flip-down
|
||||
*/
|
||||
[data-aos^=flip][data-aos^=flip] {
|
||||
backface-visibility: hidden;
|
||||
transition-property: transform;
|
||||
}
|
||||
|
||||
[data-aos=flip-left] {
|
||||
transform: perspective(2500px) rotateY(-100deg);
|
||||
}
|
||||
[data-aos=flip-left].aos-animate {
|
||||
transform: perspective(2500px) rotateY(0);
|
||||
}
|
||||
|
||||
[data-aos=flip-right] {
|
||||
transform: perspective(2500px) rotateY(100deg);
|
||||
}
|
||||
[data-aos=flip-right].aos-animate {
|
||||
transform: perspective(2500px) rotateY(0);
|
||||
}
|
||||
|
||||
[data-aos=flip-up] {
|
||||
transform: perspective(2500px) rotateX(-100deg);
|
||||
}
|
||||
[data-aos=flip-up].aos-animate {
|
||||
transform: perspective(2500px) rotateX(0);
|
||||
}
|
||||
|
||||
[data-aos=flip-down] {
|
||||
transform: perspective(2500px) rotateX(100deg);
|
||||
}
|
||||
[data-aos=flip-down].aos-animate {
|
||||
transform: perspective(2500px) rotateX(0);
|
||||
}
|
||||
+1
File diff suppressed because one or more lines are too long
+18179
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,422 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.0.2 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2021 The Bootstrap Authors
|
||||
* Copyright 2011-2021 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
font-size: 1rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
color: #212529;
|
||||
background-color: #fff;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
background-color: currentColor;
|
||||
border: 0;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
hr:not([size]) {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title],
|
||||
abbr[data-bs-original-title] {
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.2em;
|
||||
background-color: #fcf8e3;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0d6efd;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
color: #0a58ca;
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
font-size: 1em;
|
||||
direction: ltr /* rtl:ignore */;
|
||||
unicode-bidi: bidi-override;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: #d63384;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.2rem 0.4rem;
|
||||
font-size: 0.875em;
|
||||
color: #fff;
|
||||
background-color: #212529;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: #6c757d;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
select:disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
[list]::-webkit-calendar-picker-indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
float: left;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
/* rtl:raw:
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
*/
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+9738
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+471
@@ -0,0 +1,471 @@
|
||||
/**=====================
|
||||
65. Button Builder color picker CSS Start
|
||||
==========================**/
|
||||
.button-builder .colorpicker {
|
||||
width: 325px;
|
||||
height: 176px;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
display: none;
|
||||
z-index: 8;
|
||||
background: #2c323f;
|
||||
border: 1px solid #ecf3fa;
|
||||
}
|
||||
.button-builder .colorpicker input {
|
||||
background-color: transparent;
|
||||
border: 1px solid transparent;
|
||||
position: absolute;
|
||||
font-size: 10px;
|
||||
color: #ecf3fa;
|
||||
top: 4px;
|
||||
right: 11px;
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 11px;
|
||||
}
|
||||
.button-builder .colorpicker-color {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
left: 14px;
|
||||
top: 13px;
|
||||
position: absolute;
|
||||
background: #FC4438;
|
||||
overflow: hidden;
|
||||
cursor: crosshair;
|
||||
}
|
||||
.button-builder .colorpicker-color div {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
background: url(../images/button_builder/colorpicker_overlay.png);
|
||||
}
|
||||
.button-builder .colorpicker-color div div {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 11px;
|
||||
height: 11px;
|
||||
overflow: hidden;
|
||||
background: url(../images/button_builder/colorpicker_select.gif);
|
||||
margin: -5px 0 0 -5px;
|
||||
}
|
||||
.button-builder .colorpicker-hue {
|
||||
position: absolute;
|
||||
top: 13px;
|
||||
left: 171px;
|
||||
width: 35px;
|
||||
height: 150px;
|
||||
cursor: n-resize;
|
||||
}
|
||||
.button-builder .colorpicker-hue div {
|
||||
position: absolute;
|
||||
width: 35px;
|
||||
height: 9px;
|
||||
overflow: hidden;
|
||||
margin: -4px 0 0;
|
||||
left: 0;
|
||||
}
|
||||
.button-builder .colorpicker-new-color {
|
||||
position: absolute;
|
||||
width: 60px;
|
||||
height: 30px;
|
||||
left: 213px;
|
||||
top: 13px;
|
||||
background: #FC4438;
|
||||
}
|
||||
.button-builder .colorpicker-current-color {
|
||||
position: absolute;
|
||||
width: 60px;
|
||||
height: 30px;
|
||||
left: 283px;
|
||||
top: 13px;
|
||||
background: #FC4438;
|
||||
}
|
||||
.button-builder .colorpicker-hex {
|
||||
position: absolute;
|
||||
width: 72px;
|
||||
height: 22px;
|
||||
left: 212px;
|
||||
top: 142px;
|
||||
}
|
||||
.button-builder .colorpicker-hex input {
|
||||
right: 6px;
|
||||
}
|
||||
.button-builder .colorpicker-hex.colorpicker-focus {
|
||||
background-position: bottom;
|
||||
}
|
||||
.button-builder .colorpicker-field {
|
||||
height: 22px;
|
||||
width: 62px;
|
||||
background-position: top;
|
||||
position: absolute;
|
||||
}
|
||||
.button-builder .colorpicker-field span {
|
||||
position: absolute;
|
||||
width: 12px;
|
||||
height: 22px;
|
||||
overflow: hidden;
|
||||
top: 0;
|
||||
right: 0;
|
||||
cursor: n-resize;
|
||||
}
|
||||
.button-builder .colorpicker-rgb-r {
|
||||
top: 52px;
|
||||
left: 212px;
|
||||
}
|
||||
.button-builder .colorpicker-rgb-g {
|
||||
top: 82px;
|
||||
left: 212px;
|
||||
}
|
||||
.button-builder .colorpicker-rgb-b {
|
||||
top: 112px;
|
||||
left: 212px;
|
||||
}
|
||||
.button-builder .colorpicker_hsb_h {
|
||||
top: 52px;
|
||||
left: 282px;
|
||||
}
|
||||
.button-builder .colorpicker_hsb_s {
|
||||
top: 82px;
|
||||
left: 282px;
|
||||
}
|
||||
.button-builder .colorpicker-hsb-b {
|
||||
top: 112px;
|
||||
left: 282px;
|
||||
}
|
||||
.button-builder .colorpicker-submit {
|
||||
position: absolute;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
left: 322px;
|
||||
top: 142px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.button-builder .colorpicker-submit.colorpicker-focus {
|
||||
background-position: bottom;
|
||||
}
|
||||
.button-builder .colorpicker-focus {
|
||||
background-position: center;
|
||||
}
|
||||
.button-builder .colorpicker-slider {
|
||||
background-position: bottom;
|
||||
}
|
||||
|
||||
/**=====================
|
||||
65. Button Builder colorpicker CSS start
|
||||
==========================**/
|
||||
/**=====================
|
||||
64. Button Builder CSS start Here
|
||||
==========================**/
|
||||
.button-builder .colorpicker-submit:visited {
|
||||
background-color: #2c323f;
|
||||
background-image: none;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.button-builder .button-generator-bx {
|
||||
position: fixed;
|
||||
width: 340px;
|
||||
max-height: 500px;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
.button-builder .custom-button-color {
|
||||
display: none;
|
||||
}
|
||||
.button-builder .custom-button-color .form-control {
|
||||
width: 100px;
|
||||
border-radius: 5px 0 0 5px;
|
||||
}
|
||||
.button-builder .color-slelector {
|
||||
float: left;
|
||||
height: 39px;
|
||||
position: relative;
|
||||
width: 39px;
|
||||
}
|
||||
.button-builder .color-slelector div {
|
||||
height: 33px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 33px;
|
||||
transform: scale(1.4);
|
||||
z-index: 1;
|
||||
background: url(../images/button_builder/select.png) repeat scroll 0 0 rgba(0, 0, 0, 0);
|
||||
}
|
||||
.button-builder .custom-radio {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
top: 3px;
|
||||
border: 1px solid var(--theme-deafult);
|
||||
border-radius: 100%;
|
||||
}
|
||||
.button-builder .custom-radio:hover {
|
||||
background-position: 0 -16px;
|
||||
}
|
||||
.button-builder .custom-radio.selected {
|
||||
background-color: var(--theme-deafult);
|
||||
}
|
||||
.button-builder .custom-radio input[type=radio] {
|
||||
margin: 1px;
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
.button-builder .custom-checkbox {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
top: 3px;
|
||||
background: url(../images/button_builder/checkbox-sprite.png) no-repeat 0 0 transparent;
|
||||
}
|
||||
.button-builder .custom-checkbox:hover {
|
||||
background-position: 0 -16px;
|
||||
}
|
||||
.button-builder .custom-checkbox.selected {
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
.button-builder .custom-checkbox input[type=checkbox] {
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
.button-builder .colorpicker-hex {
|
||||
background: url(../images/button_builder/hex_bg.gif) no-repeat scroll right center rgba(0, 0, 0, 0);
|
||||
left: 220px;
|
||||
padding-left: 15px;
|
||||
position: absolute;
|
||||
top: 98px;
|
||||
width: 75px;
|
||||
height: 25px;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
.button-builder .colorpicker-hex input {
|
||||
background: transparent;
|
||||
border: medium none;
|
||||
color: #242934;
|
||||
display: block;
|
||||
box-shadow: none;
|
||||
font-size: 13px;
|
||||
height: 17px;
|
||||
outline: medium none;
|
||||
padding: 5px;
|
||||
top: 0;
|
||||
right: 1px;
|
||||
text-align: left;
|
||||
text-transform: uppercase;
|
||||
width: 65px;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
.button-builder .colorpicker-hue {
|
||||
background: url(../images/button_builder/rainbow.png) no-repeat scroll center center rgba(0, 0, 0, 0);
|
||||
cursor: default;
|
||||
height: 150px;
|
||||
left: 171px;
|
||||
position: absolute;
|
||||
top: 13px;
|
||||
width: 35px;
|
||||
}
|
||||
.button-builder .colorpicker-hue div {
|
||||
background: url(../images/button_builder/scroll.png) no-repeat scroll left top rgba(0, 0, 0, 0);
|
||||
height: 16px;
|
||||
left: 0;
|
||||
margin-top: -8px;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
width: 35px;
|
||||
}
|
||||
.button-builder .colorpicker-new-color {
|
||||
height: 75px;
|
||||
left: 235px;
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
width: 73px;
|
||||
border: 1px solid #ecf3fa;
|
||||
}
|
||||
.button-builder .colorpicker-field {
|
||||
display: none;
|
||||
}
|
||||
.button-builder .colorpicker-current-color {
|
||||
display: none;
|
||||
}
|
||||
.button-builder .colorpicker-submit {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
height: 25px;
|
||||
left: 235px;
|
||||
position: absolute;
|
||||
top: 133px;
|
||||
width: 75px;
|
||||
background-color: var(--theme-deafult);
|
||||
border-radius: 5px;
|
||||
}
|
||||
.button-builder .colorpicker-submit:before {
|
||||
content: "Ok";
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding: 3px 10px;
|
||||
color: #fff;
|
||||
}
|
||||
.button-builder .colorpicker-submit:hover {
|
||||
background-color: #4433ff;
|
||||
}
|
||||
.button-builder .box {
|
||||
background-color: #fff;
|
||||
margin-bottom: 20px;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
border: 1px solid #efefef;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.button-builder .button-preview {
|
||||
min-height: 145px;
|
||||
}
|
||||
.button-builder .button-preview h2 {
|
||||
color: #2c323f;
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
}
|
||||
.button-builder .button-preview.affix {
|
||||
top: 58px;
|
||||
position: fixed;
|
||||
width: 395px;
|
||||
z-index: 999;
|
||||
}
|
||||
.button-builder #result {
|
||||
padding-top: 30px;
|
||||
}
|
||||
.button-builder .well .language-markup {
|
||||
word-wrap: break-word;
|
||||
white-space: normal;
|
||||
}
|
||||
.button-builder .well .language-css {
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.button-builder pre.well {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #fff !important;
|
||||
overflow: unset;
|
||||
}
|
||||
.button-builder .copy {
|
||||
margin-top: 30px;
|
||||
position: relative;
|
||||
}
|
||||
.button-builder .copy .zclip {
|
||||
left: 0 !important;
|
||||
right: 0 !important;
|
||||
margin: 0 auto !important;
|
||||
}
|
||||
.button-builder .copy a {
|
||||
background-color: var(--theme-deafult);
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
padding: 0.375rem 1.75rem;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.button-builder .sucess-msg {
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
display: none;
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin-bottom: -30px;
|
||||
}
|
||||
.button-builder .code-wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
.button-builder .column-left {
|
||||
float: left;
|
||||
width: 655px;
|
||||
}
|
||||
.button-builder .column-right {
|
||||
float: right;
|
||||
width: 395px;
|
||||
position: relative;
|
||||
padding-top: 175px;
|
||||
}
|
||||
.button-builder code {
|
||||
font-size: 11.5px !important;
|
||||
}
|
||||
.button-builder .hint-label {
|
||||
float: left;
|
||||
padding: 4px 0 0 20px;
|
||||
font-style: italic;
|
||||
}
|
||||
.button-builder .button-style {
|
||||
margin-top: 1px !important;
|
||||
}
|
||||
.button-builder .ad-box {
|
||||
height: 90px;
|
||||
overflow: hidden;
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
.button-builder ul.the-icons {
|
||||
margin: 0 0 0 -8px;
|
||||
padding-left: 0;
|
||||
font-size: 13px;
|
||||
}
|
||||
.button-builder ul.the-icons li {
|
||||
float: left;
|
||||
line-height: 15px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
list-style: none outside none;
|
||||
padding: 5px;
|
||||
border: 1px dotted #efefef;
|
||||
color: #898989;
|
||||
width: 40px;
|
||||
transition: all 0.2s ease-in-out 0s;
|
||||
margin: 2px;
|
||||
}
|
||||
.button-builder ul.the-icons li em {
|
||||
display: none !important;
|
||||
}
|
||||
.button-builder ul.the-icons li:hover {
|
||||
background: #fff;
|
||||
box-shadow: 0 0 3px #f4f4f4;
|
||||
}
|
||||
.button-builder ul.the-icons li:hover.active {
|
||||
background: #fff;
|
||||
box-shadow: 0 0 3px #f4f4f4;
|
||||
}
|
||||
|
||||
.button-builder-wrap .form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.button-builder-wrap .form-group .btn {
|
||||
margin-right: 15px;
|
||||
margin-bottom: 15px;
|
||||
min-width: 100px;
|
||||
}
|
||||
.button-builder-wrap .grp-btns .btn input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*==============================
|
||||
64. Button Builder CSS End
|
||||
===========================*/
|
||||
File diff suppressed because one or more lines are too long
+1414
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+1728
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+182
@@ -0,0 +1,182 @@
|
||||
button, hr, input {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
audio, canvas, progress, video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
progress, sub, sup {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
html {
|
||||
font-family: sans-serif;
|
||||
line-height: 1.15;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
menu, article, aside, details, footer, header, nav, section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
figcaption, figure, main {
|
||||
display: block;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
code, kbd, pre, samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
-webkit-text-decoration-skip: objects;
|
||||
}
|
||||
|
||||
a:active, a:hover {
|
||||
outline-width: 0;
|
||||
}
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: none;
|
||||
text-decoration: underline;
|
||||
text-decoration: underline dotted;
|
||||
}
|
||||
|
||||
b, strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
mark {
|
||||
background-color: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
sub, sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button, input, optgroup, select, textarea {
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
line-height: 1.15;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
button, select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[type=submit], [type=reset], button, html [type=button] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
[type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring {
|
||||
outline: ButtonText dotted 1px;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
border: 1px solid silver;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
legend {
|
||||
box-sizing: border-box;
|
||||
color: inherit;
|
||||
display: table;
|
||||
max-width: 100%;
|
||||
padding: 0;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
[type=checkbox], [type=radio] {
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
-webkit-appearance: textfield;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button;
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
[hidden], template {
|
||||
display: none;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["vendors/feather-icon/_feather-icon.scss"],"names":[],"mappings":"AAAA,gBACE,gBAAiB,CAClB,4BAGC,oBAAqB,CACtB,iBAGC,uBAAwB,CACzB,KAGC,sBAAuB,CACvB,gBAAiB,CACjB,yBAA0B,CAC1B,6BAA8B,CAC/B,KAGC,QAAS,CACV,qDAGC,aAAc,CACf,GAGC,aAAc,CACd,cAAe,CAChB,uBAGC,aAAc,CACf,OAGC,eAAgB,CACjB,GAGC,8BAAuB,CAAvB,sBAAuB,CACvB,QAAS,CACV,kBAGC,+BAAgC,CAChC,aAAc,CACf,EAGC,4BAA6B,CAC7B,oCAAqC,CACtC,iBAGC,eAAgB,CACjB,YAGC,kBAAmB,CACnB,yBAA0B,CAC1B,wCAAiB,CAAjB,gCAAiC,CAClC,SAGC,kBAAmB,CACpB,IAGC,iBAAkB,CACnB,KAGC,qBAAsB,CACtB,UAAW,CACZ,MAGC,aAAc,CACf,QAGC,aAAc,CACd,aAAc,CACd,iBAAkB,CACnB,IAGC,aAAc,CACf,IAGC,SAAU,CACX,sBAGC,YAAa,CACb,QAAS,CACV,IAGC,iBAAkB,CACnB,eAGC,eAAgB,CACjB,sCAGC,sBAAuB,CACvB,cAAe,CACf,gBAAiB,CACjB,QAAS,CACV,cAMC,mBAAoB,CACrB,qDAGC,yBAA0B,CAC3B,wHAGC,iBAAkB,CAClB,SAAU,CACX,4GAGC,6BAA8B,CAC/B,SAGC,uBAAwB,CACxB,YAAa,CACb,0BAA2B,CAC5B,OAGC,6BAAsB,CAAtB,qBAAsB,CACtB,aAAc,CACd,aAAc,CACd,cAAe,CACf,SAAU,CACV,kBAAmB,CACpB,SAMC,aAAc,CACf,6BAGC,6BAAsB,CAAtB,qBAAsB,CACtB,SAAU,CACX,kFAGC,WAAY,CACb,cAGC,4BAA6B,CAC7B,mBAAoB,CACrB,qFAGC,uBAAwB,CACzB,6BAGC,yBAA0B,CAC1B,YAAa,CACd,QAGC,iBAAkB,CACnB,kBAGC,YAAa","file":"vendors/feather-icon.css","sourcesContent":["button,hr,input {\r\n overflow: visible;\r\n}\r\n\r\naudio,canvas,progress,video {\r\n display: inline-block;\r\n}\r\n\r\nprogress,sub,sup {\r\n vertical-align: baseline;\r\n}\r\n\r\nhtml {\r\n font-family: sans-serif;\r\n line-height: 1.15;\r\n -ms-text-size-adjust: 100%;\r\n -webkit-text-size-adjust: 100%;\r\n}\r\n\r\nbody {\r\n margin: 0;\r\n}\r\n\r\nmenu,article,aside,details,footer,header,nav,section {\r\n display: block;\r\n}\r\n\r\nh1 {\r\n font-size: 2em;\r\n margin: .67em 0;\r\n}\r\n\r\nfigcaption,figure,main {\r\n display: block;\r\n}\r\n\r\nfigure {\r\n margin: 1em 40px;\r\n}\r\n\r\nhr {\r\n box-sizing: content-box;\r\n height: 0;\r\n}\r\n\r\ncode,kbd,pre,samp {\r\n font-family: monospace,monospace;\r\n font-size: 1em;\r\n}\r\n\r\na {\r\n background-color: transparent;\r\n -webkit-text-decoration-skip: objects;\r\n}\r\n\r\na:active,a:hover {\r\n outline-width: 0;\r\n}\r\n\r\nabbr[title] {\r\n border-bottom: none;\r\n text-decoration: underline;\r\n text-decoration: underline dotted;\r\n}\r\n\r\nb,strong {\r\n font-weight: bolder;\r\n}\r\n\r\ndfn {\r\n font-style: italic;\r\n}\r\n\r\nmark {\r\n background-color: #ff0;\r\n color: #000;\r\n}\r\n\r\nsmall {\r\n font-size: 80%;\r\n}\r\n\r\nsub,sup {\r\n font-size: 75%;\r\n line-height: 0;\r\n position: relative;\r\n}\r\n\r\nsub {\r\n bottom: -.25em;\r\n}\r\n\r\nsup {\r\n top: -.5em;\r\n}\r\n\r\naudio:not([controls]) {\r\n display: none;\r\n height: 0;\r\n}\r\n\r\nimg {\r\n border-style: none;\r\n}\r\n\r\nsvg:not(:root) {\r\n overflow: hidden;\r\n}\r\n\r\nbutton,input,optgroup,select,textarea {\r\n font-family: sans-serif;\r\n font-size: 100%;\r\n line-height: 1.15;\r\n margin: 0;\r\n}\r\n\r\nbutton,input {\r\n}\r\n\r\nbutton,select {\r\n text-transform: none;\r\n}\r\n\r\n[type=submit], [type=reset],button,html [type=button] {\r\n -webkit-appearance: button;\r\n}\r\n\r\n[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner {\r\n border-style: none;\r\n padding: 0;\r\n}\r\n\r\n[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring {\r\n outline: ButtonText dotted 1px;\r\n}\r\n\r\nfieldset {\r\n border: 1px solid silver;\r\n margin: 0 2px;\r\n padding: .35em .625em .75em;\r\n}\r\n\r\nlegend {\r\n box-sizing: border-box;\r\n color: inherit;\r\n display: table;\r\n max-width: 100%;\r\n padding: 0;\r\n white-space: normal;\r\n}\r\n\r\nprogress {\r\n}\r\n\r\ntextarea {\r\n overflow: auto;\r\n}\r\n\r\n[type=checkbox],[type=radio] {\r\n box-sizing: border-box;\r\n padding: 0;\r\n}\r\n\r\n[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button {\r\n height: auto;\r\n}\r\n\r\n[type=search] {\r\n -webkit-appearance: textfield;\r\n outline-offset: -2px;\r\n}\r\n\r\n[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration {\r\n -webkit-appearance: none;\r\n}\r\n\r\n::-webkit-file-upload-button {\r\n -webkit-appearance: button;\r\n font: inherit;\r\n}\r\n\r\nsummary {\r\n display: list-item;\r\n}\r\n\r\n[hidden],template {\r\n display: none;\r\n}"]}
|
||||
+1811
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+8524
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1311
File diff suppressed because it is too large
Load Diff
+445
@@ -0,0 +1,445 @@
|
||||
@charset "UTF-8";
|
||||
.jsgrid {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 1em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.jsgrid * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.jsgrid :after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.jsgrid :before {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.jsgrid input {
|
||||
font-size: 1em;
|
||||
}
|
||||
.jsgrid select {
|
||||
font-size: 1em;
|
||||
}
|
||||
.jsgrid textarea {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.jsgrid-grid-header {
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.jsgrid-grid-body {
|
||||
overflow-x: auto;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.jsgrid-table {
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
.jsgrid-cell {
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
.jsgrid-header-cell {
|
||||
box-sizing: border-box;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
.jsgrid-сell {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.jsgrid-align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.jsgrid-align-center {
|
||||
text-align: center;
|
||||
}
|
||||
.jsgrid-align-center input {
|
||||
text-align: center;
|
||||
}
|
||||
.jsgrid-align-center select {
|
||||
text-align: center;
|
||||
}
|
||||
.jsgrid-align-center textarea {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.jsgrid-align-right {
|
||||
text-align: right;
|
||||
}
|
||||
.jsgrid-align-right input {
|
||||
text-align: right;
|
||||
}
|
||||
.jsgrid-align-right select {
|
||||
text-align: right;
|
||||
}
|
||||
.jsgrid-align-right textarea {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.jsgrid-edit-row input {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-edit-row select {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-edit-row textarea {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-edit-row input[type=checkbox] {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.jsgrid-filter-row input {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-filter-row select {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-filter-row textarea {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-filter-row input[type=checkbox] {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.jsgrid-insert-row input {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-insert-row select {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-insert-row textarea {
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em;
|
||||
}
|
||||
.jsgrid-insert-row input[type=checkbox] {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.jsgrid-header-sort {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.jsgrid-pager {
|
||||
padding: 0.5em 0;
|
||||
}
|
||||
|
||||
.jsgrid-pager-nav-button {
|
||||
padding: 0.2em 0.6em;
|
||||
}
|
||||
|
||||
.jsgrid-pager-nav-inactive-button {
|
||||
display: none;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.jsgrid-pager-page {
|
||||
padding: 0.2em 0.6em;
|
||||
}
|
||||
|
||||
.jsgrid-selected-row .jsgrid-cell {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.jsgrid-nodata-row .jsgrid-cell {
|
||||
padding: 0.5em 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.jsgrid-grid-body {
|
||||
border: 1px solid #e9e9e9;
|
||||
border-top: none;
|
||||
}
|
||||
.jsgrid-grid-body .jsgrid-cell:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
.jsgrid-grid-body .jsgrid-cell:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
.jsgrid-grid-body .jsgrid-alt-row:first-child .jsgrid-cell {
|
||||
border-top: none;
|
||||
}
|
||||
.jsgrid-grid-body .jsgrid-row:first-child .jsgrid-cell {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.jsgrid-grid-header {
|
||||
border: 1px solid #e9e9e9;
|
||||
background: #f9f9f9;
|
||||
}
|
||||
|
||||
.jsgrid-header-row .jsgrid-align-left {
|
||||
text-align: center;
|
||||
}
|
||||
.jsgrid-header-row .jsgrid-align-right {
|
||||
text-align: center;
|
||||
}
|
||||
.jsgrid-header-row .jsgrid-header-sort {
|
||||
background: #c4e2ff;
|
||||
}
|
||||
.jsgrid-header-row > .jsgrid-header-cell {
|
||||
border: 1px solid #e9e9e9;
|
||||
border-top: 0;
|
||||
background: #f9f9f9;
|
||||
border-bottom: 0;
|
||||
}
|
||||
.jsgrid-header-row > .jsgrid-header-cell:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
.jsgrid-header-row > .jsgrid-header-cell:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.jsgrid-header-scrollbar {
|
||||
scrollbar-arrow-color: #f1f1f1;
|
||||
scrollbar-base-color: #f1f1f1;
|
||||
scrollbar-3dlight-color: #f1f1f1;
|
||||
scrollbar-highlight-color: #f1f1f1;
|
||||
scrollbar-track-color: #f1f1f1;
|
||||
scrollbar-shadow-color: #f1f1f1;
|
||||
scrollbar-dark-shadow-color: #f1f1f1;
|
||||
}
|
||||
|
||||
.jsgrid-header-scrollbar::-webkit-scrollbar {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.jsgrid-header-scrollbar::-webkit-scrollbar-track {
|
||||
background: #f1f1f1;
|
||||
}
|
||||
|
||||
.jsgrid-cell {
|
||||
border: 1px solid #f3f3f3;
|
||||
}
|
||||
|
||||
.jsgrid-invalid input {
|
||||
background: #ffe3e5;
|
||||
border: 1px solid #ff808a;
|
||||
}
|
||||
.jsgrid-invalid select {
|
||||
background: #ffe3e5;
|
||||
border: 1px solid #ff808a;
|
||||
}
|
||||
.jsgrid-invalid textarea {
|
||||
background: #ffe3e5;
|
||||
border: 1px solid #ff808a;
|
||||
}
|
||||
|
||||
.jsgrid-pager-current-page {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.jsgrid-button:hover {
|
||||
opacity: 0.5;
|
||||
transition: opacity 200ms linear;
|
||||
}
|
||||
.jsgrid-button + .jsgrid-button {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.jsgrid .jsgrid-button {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
background-image: url(../../images/js-grid.png);
|
||||
background-repeat: no-repeat;
|
||||
background-color: transparent;
|
||||
}
|
||||
.jsgrid .jsgrid-mode-button {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) {
|
||||
.jsgrid .jsgrid-button {
|
||||
background-image: url(../../images/js-grid.png);
|
||||
background-size: 24px 352px;
|
||||
}
|
||||
}
|
||||
.jsgrid-mode-on-button {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.jsgrid-cancel-edit-button {
|
||||
background-position: 0 0;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.jsgrid-clear-filter-button {
|
||||
background-position: 0 -40px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.jsgrid-delete-button {
|
||||
background-position: 0 -80px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.jsgrid-edit-button {
|
||||
background-position: 0 -120px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.jsgrid-insert-mode-button {
|
||||
background-position: 0 -160px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.jsgrid-insert-button {
|
||||
background-position: 0 -208px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.jsgrid-search-mode-button {
|
||||
background-position: 0 -248px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.jsgrid-search-button {
|
||||
background-position: 0 -296px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.jsgrid-update-button {
|
||||
background-position: 0 -336px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.jsgrid-load-shader {
|
||||
background: #ddd;
|
||||
opacity: 0.5;
|
||||
filter: alpha(opacity=50);
|
||||
}
|
||||
|
||||
.jsgrid-load-panel {
|
||||
width: 15em;
|
||||
height: 5em;
|
||||
background: #fff;
|
||||
border: 1px solid #e9e9e9;
|
||||
padding-top: 3em;
|
||||
text-align: center;
|
||||
}
|
||||
.jsgrid-load-panel:before {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: 0.5em;
|
||||
left: 50%;
|
||||
margin-left: -1em;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
border: 2px solid #009a67;
|
||||
border-right-color: transparent;
|
||||
border-radius: 50%;
|
||||
animation: indicator 1s linear infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes indicator {}
|
||||
@keyframes indicator {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
50% {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
.jsgrid-edit-row > .jsgrid-cell {
|
||||
border: 1px solid #e9e9e9;
|
||||
background: #fdffe3;
|
||||
}
|
||||
|
||||
.jsgrid-filter-row > .jsgrid-cell {
|
||||
border: 1px solid #e9e9e9;
|
||||
border-bottom: 0;
|
||||
background: #f9f9f9;
|
||||
}
|
||||
.jsgrid-filter-row > .jsgrid-cell:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
.jsgrid-filter-row > .jsgrid-cell:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.jsgrid-insert-row > .jsgrid-cell {
|
||||
border: 1px solid #e9e9e9;
|
||||
border-bottom: 0;
|
||||
background: #e3ffe5;
|
||||
}
|
||||
.jsgrid-insert-row > .jsgrid-cell:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
.jsgrid-insert-row > .jsgrid-cell:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.jsgrid-header-sortable:hover {
|
||||
cursor: pointer;
|
||||
background: #f9f9f9;
|
||||
}
|
||||
|
||||
.jsgrid-header-sort:before {
|
||||
content: " ";
|
||||
display: block;
|
||||
float: right;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-style: solid;
|
||||
margin-top: 8px;
|
||||
margin-right: 9px;
|
||||
}
|
||||
|
||||
.jsgrid-header-sort-asc:before {
|
||||
border-width: 0 5px 5px;
|
||||
border-color: transparent transparent #ffc412;
|
||||
}
|
||||
|
||||
.jsgrid-header-sort-desc:before {
|
||||
border-width: 5px 5px 0;
|
||||
border-color: #ffc412 transparent transparent;
|
||||
}
|
||||
|
||||
.jsgrid-row > .jsgrid-cell {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.jsgrid-alt-row > .jsgrid-cell {
|
||||
background: #f9f9f9;
|
||||
}
|
||||
|
||||
.jsgrid-selected-row > .jsgrid-cell {
|
||||
background: #c4e2ff;
|
||||
border-color: #c4e2ff;
|
||||
}
|
||||
|
||||
.jsgrid-pager-nav-inactive-button a {
|
||||
color: #d3d3d3;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
+125
@@ -0,0 +1,125 @@
|
||||
/*=============Scrollable css start=============*/
|
||||
.ps-container.ps-active-y > .ps-scrollbar-y-rail, .ps-container.ps-active-x > .ps-scrollbar-x-rail {
|
||||
background-color: transparent;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.scroll-demo {
|
||||
padding: 10px;
|
||||
position: relative;
|
||||
border: 1px solid #f4f4f4;
|
||||
overflow: auto;
|
||||
height: 300px;
|
||||
}
|
||||
.scroll-demo .horz-scroll-content {
|
||||
width: 1600px;
|
||||
}
|
||||
|
||||
.ps-container {
|
||||
touch-action: none;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
.ps-container.ps-in-scrolling {
|
||||
pointer-events: none;
|
||||
}
|
||||
.ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail {
|
||||
background-color: #f4f4f4;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x {
|
||||
background-color: #59667a;
|
||||
}
|
||||
.ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail {
|
||||
background-color: #f4f4f4;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y {
|
||||
background-color: #59667a;
|
||||
}
|
||||
.ps-container > .ps-scrollbar-x-rail {
|
||||
display: none;
|
||||
position: absolute;
|
||||
border-radius: 4px;
|
||||
opacity: 0;
|
||||
transition: background-color 0.2s linear, opacity 0.2s linear;
|
||||
bottom: 3px;
|
||||
height: 8px;
|
||||
}
|
||||
.ps-container > .ps-scrollbar-x-rail > .ps-scrollbar-x {
|
||||
position: absolute;
|
||||
background-color: #59667a;
|
||||
border-radius: 4px;
|
||||
transition: background-color 0.2s linear;
|
||||
bottom: 0;
|
||||
height: 8px;
|
||||
}
|
||||
.ps-container > .ps-scrollbar-y-rail {
|
||||
right: 3px;
|
||||
width: 8px;
|
||||
display: none;
|
||||
position: absolute;
|
||||
border-radius: 4px;
|
||||
opacity: 0;
|
||||
transition: background-color 0.2s linear, opacity 0.2s linear;
|
||||
}
|
||||
.ps-container > .ps-scrollbar-y-rail > .ps-scrollbar-y {
|
||||
width: 10px;
|
||||
position: absolute;
|
||||
background-color: #59667a;
|
||||
border-radius: 4px;
|
||||
transition: background-color 0.2s linear;
|
||||
right: 0;
|
||||
}
|
||||
.ps-container:hover.ps-in-scrolling {
|
||||
pointer-events: none;
|
||||
}
|
||||
.ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail {
|
||||
background-color: #59667a;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x {
|
||||
width: 128px;
|
||||
background-color: #999999;
|
||||
}
|
||||
.ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail {
|
||||
background-color: #59667a;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y {
|
||||
background-color: #999999;
|
||||
}
|
||||
.ps-container:hover > .ps-scrollbar-x-rail {
|
||||
opacity: 0.6;
|
||||
}
|
||||
.ps-container:hover > .ps-scrollbar-x-rail:hover {
|
||||
background-color: #f4f4f4;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.ps-container:hover > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x {
|
||||
background-color: #999999;
|
||||
}
|
||||
.ps-container:hover > .ps-scrollbar-y-rail {
|
||||
opacity: 0.6;
|
||||
}
|
||||
.ps-container:hover > .ps-scrollbar-y-rail:hover {
|
||||
background-color: #f4f4f4;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.ps-container:hover > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y {
|
||||
background-color: #59667a;
|
||||
}
|
||||
.always-visible.ps-container > .ps-scrollbar-x-rail {
|
||||
opacity: 0.6;
|
||||
}
|
||||
.always-visible.ps-container > .ps-scrollbar-y-rail {
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.large-margin.ps-container > .ps-scrollbar-x-rail {
|
||||
margin: 0 25%;
|
||||
}
|
||||
.large-margin.ps-container > .ps-scrollbar-y-rail {
|
||||
margin: 100px 0;
|
||||
}
|
||||
|
||||
/*=============Scrollable css end=============*/
|
||||
File diff suppressed because one or more lines are too long
+212
@@ -0,0 +1,212 @@
|
||||
[data-simplebar] {
|
||||
position: relative;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
align-content: flex-start;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.simplebar-wrapper {
|
||||
overflow: hidden;
|
||||
width: inherit;
|
||||
height: inherit;
|
||||
max-width: inherit;
|
||||
max-height: inherit;
|
||||
}
|
||||
|
||||
.simplebar-mask {
|
||||
direction: inherit;
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.simplebar-offset {
|
||||
direction: inherit !important;
|
||||
box-sizing: inherit !important;
|
||||
resize: none !important;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.simplebar-content-wrapper {
|
||||
direction: inherit;
|
||||
box-sizing: border-box !important;
|
||||
position: relative;
|
||||
display: block;
|
||||
height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */
|
||||
width: auto;
|
||||
max-width: 100%; /* Not required for horizontal scroll to trigger */
|
||||
max-height: 100%; /* Needed for vertical scroll to trigger */
|
||||
scrollbar-width: none;
|
||||
-ms-overflow-style: none;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.simplebar-content-wrapper::-webkit-scrollbar,
|
||||
.simplebar-hide-scrollbar::-webkit-scrollbar {
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.simplebar-content:before,
|
||||
.simplebar-content:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
}
|
||||
|
||||
.simplebar-placeholder {
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.simplebar-height-auto-observer-wrapper {
|
||||
box-sizing: inherit !important;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
max-width: 1px;
|
||||
position: relative;
|
||||
float: left;
|
||||
max-height: 1px;
|
||||
overflow: hidden;
|
||||
z-index: -1;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
pointer-events: none;
|
||||
flex-grow: inherit;
|
||||
flex-shrink: 0;
|
||||
flex-basis: 0;
|
||||
}
|
||||
|
||||
.simplebar-height-auto-observer {
|
||||
box-sizing: inherit;
|
||||
display: block;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 1000%;
|
||||
width: 1000%;
|
||||
min-height: 1px;
|
||||
min-width: 1px;
|
||||
overflow: hidden;
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.simplebar-track {
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
pointer-events: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
[data-simplebar].simplebar-dragging .simplebar-content {
|
||||
pointer-events: none;
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
[data-simplebar].simplebar-dragging .simplebar-track {
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
.simplebar-scrollbar {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
min-height: 10px;
|
||||
}
|
||||
|
||||
.simplebar-scrollbar:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
background: black;
|
||||
border-radius: 7px;
|
||||
left: 2px;
|
||||
right: 2px;
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s linear;
|
||||
}
|
||||
|
||||
.simplebar-scrollbar.simplebar-visible:before {
|
||||
/* When hovered, remove all transitions from drag handle */
|
||||
opacity: 0.5;
|
||||
transition: opacity 0s linear;
|
||||
}
|
||||
|
||||
.simplebar-track.simplebar-vertical {
|
||||
top: 0;
|
||||
width: 11px;
|
||||
}
|
||||
|
||||
.simplebar-track.simplebar-vertical .simplebar-scrollbar:before {
|
||||
top: 2px;
|
||||
bottom: 2px;
|
||||
}
|
||||
|
||||
.simplebar-track.simplebar-horizontal {
|
||||
left: 0;
|
||||
height: 11px;
|
||||
}
|
||||
|
||||
.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before {
|
||||
height: 100%;
|
||||
left: 2px;
|
||||
right: 2px;
|
||||
}
|
||||
|
||||
.simplebar-track.simplebar-horizontal .simplebar-scrollbar {
|
||||
right: auto;
|
||||
left: 0;
|
||||
top: 2px;
|
||||
height: 7px;
|
||||
min-height: 0;
|
||||
min-width: 10px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* Rtl support */
|
||||
[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical {
|
||||
right: auto;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.hs-dummy-scrollbar-size {
|
||||
direction: rtl;
|
||||
position: fixed;
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
height: 500px;
|
||||
width: 500px;
|
||||
overflow-y: hidden;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
.simplebar-hide-scrollbar {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
visibility: hidden;
|
||||
overflow-y: scroll;
|
||||
scrollbar-width: none;
|
||||
-ms-overflow-style: none;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
+704
@@ -0,0 +1,704 @@
|
||||
@charset "UTF-8";
|
||||
.CodeMirror {
|
||||
color: #000;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
height: auto;
|
||||
min-height: 300px;
|
||||
border: 1px solid #ddd;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
padding: 10px;
|
||||
font: inherit;
|
||||
z-index: 1;
|
||||
}
|
||||
.CodeMirror pre {
|
||||
padding: 0 4px;
|
||||
border-radius: 0;
|
||||
border-width: 0;
|
||||
background: 0 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
margin: 0;
|
||||
white-space: pre;
|
||||
word-wrap: normal;
|
||||
line-height: inherit;
|
||||
color: inherit;
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
font-variant-ligatures: none;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-tag {
|
||||
color: #63a35c;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-attribute {
|
||||
color: #795da3;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-string {
|
||||
color: #183691;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-header-1 {
|
||||
font-size: 200%;
|
||||
line-height: 200%;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-header-2 {
|
||||
font-size: 160%;
|
||||
line-height: 160%;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-header-3 {
|
||||
font-size: 125%;
|
||||
line-height: 125%;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-header-4 {
|
||||
font-size: 110%;
|
||||
line-height: 110%;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-comment {
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
border-radius: 2px;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-link {
|
||||
color: #7f8c8d;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-url {
|
||||
color: #aab2b3;
|
||||
}
|
||||
.CodeMirror .CodeMirror-code .cm-strikethrough {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
.CodeMirror .CodeMirror-selected {
|
||||
background: #ddd;
|
||||
}
|
||||
.CodeMirror .CodeMirror-placeholder {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.CodeMirror div.CodeMirror-secondarycursor {
|
||||
border-left: 1px solid silver;
|
||||
}
|
||||
.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word) {
|
||||
background: rgba(255, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.CodeMirror-lines {
|
||||
padding: 4px 0;
|
||||
cursor: text;
|
||||
min-height: 1px;
|
||||
}
|
||||
|
||||
.CodeMirror-gutter-filler {
|
||||
background-color: #fff;
|
||||
position: absolute;
|
||||
z-index: 6;
|
||||
display: none;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.CodeMirror-scrollbar-filler {
|
||||
background-color: #fff;
|
||||
position: absolute;
|
||||
z-index: 6;
|
||||
display: none;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.CodeMirror-gutters {
|
||||
border-right: 1px solid #ddd;
|
||||
background-color: #f7f7f7;
|
||||
white-space: nowrap;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
min-height: 100%;
|
||||
z-index: 3;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.CodeMirror-linenumber {
|
||||
padding: 0 3px 0 5px;
|
||||
min-width: 20px;
|
||||
text-align: right;
|
||||
color: #999;
|
||||
white-space: nowrap;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.CodeMirror-guttermarker {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.CodeMirror-guttermarker-subtle {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.CodeMirror-cursor {
|
||||
border-left: 1px solid #000;
|
||||
border-right: none;
|
||||
width: 0;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.cm-fat-cursor .CodeMirror-cursor {
|
||||
width: auto;
|
||||
border: 0 !important;
|
||||
background: #7e7;
|
||||
}
|
||||
.cm-fat-cursor div.CodeMirror-cursors {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.cm-animate-fat-cursor {
|
||||
width: auto;
|
||||
border: 0;
|
||||
animation: blink 1.06s steps(1) infinite;
|
||||
background-color: #7e7;
|
||||
}
|
||||
|
||||
@-moz-keyframes blink {
|
||||
50% {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes blink {
|
||||
50% {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
@keyframes blink {
|
||||
50% {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
.cm-tab {
|
||||
display: inline-block;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
|
||||
.CodeMirror-ruler {
|
||||
border-left: 1px solid #ccc;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.cm-s-default .cm-header {
|
||||
color: #00f;
|
||||
}
|
||||
.cm-s-default .cm-quote {
|
||||
color: #090;
|
||||
}
|
||||
.cm-s-default .cm-keyword {
|
||||
color: #708;
|
||||
}
|
||||
.cm-s-default .cm-atom {
|
||||
color: #219;
|
||||
}
|
||||
.cm-s-default .cm-number {
|
||||
color: #164;
|
||||
}
|
||||
.cm-s-default .cm-def {
|
||||
color: #00f;
|
||||
}
|
||||
.cm-s-default .cm-variable-2 {
|
||||
color: #05a;
|
||||
}
|
||||
.cm-s-default .cm-variable-3 {
|
||||
color: #085;
|
||||
}
|
||||
.cm-s-default .cm-comment {
|
||||
color: #a50;
|
||||
}
|
||||
.cm-s-default .cm-string {
|
||||
color: #a11;
|
||||
}
|
||||
.cm-s-default .cm-string-2 {
|
||||
color: #f50;
|
||||
}
|
||||
.cm-s-default .cm-meta {
|
||||
color: #555;
|
||||
}
|
||||
.cm-s-default .cm-qualifier {
|
||||
color: #555;
|
||||
}
|
||||
.cm-s-default .cm-builtin {
|
||||
color: #219;
|
||||
}
|
||||
.cm-s-default .cm-bracket {
|
||||
color: #997;
|
||||
}
|
||||
.cm-s-default .cm-tag {
|
||||
color: #090;
|
||||
}
|
||||
.cm-s-default .cm-attribute {
|
||||
color: #00c;
|
||||
}
|
||||
.cm-s-default .cm-hr {
|
||||
color: #999;
|
||||
}
|
||||
.cm-s-default .cm-link {
|
||||
color: #00c;
|
||||
}
|
||||
.cm-s-default .cm-error {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.cm-negative {
|
||||
color: #d44;
|
||||
}
|
||||
|
||||
.cm-positive {
|
||||
color: #292;
|
||||
}
|
||||
|
||||
.cm-header {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.cm-strong {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.cm-em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.cm-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.cm-strikethrough {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
.cm-invalidchar {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.CodeMirror-composing {
|
||||
border-bottom: 2px solid;
|
||||
}
|
||||
|
||||
div.CodeMirror-cursors {
|
||||
visibility: hidden;
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
}
|
||||
div.CodeMirror-dragcursors {
|
||||
visibility: visible;
|
||||
}
|
||||
div.CodeMirror span.CodeMirror-matchingbracket {
|
||||
color: #0f0;
|
||||
}
|
||||
div.CodeMirror span.CodeMirror-nonmatchingbracket {
|
||||
color: #f22;
|
||||
}
|
||||
|
||||
.CodeMirror-matchingtag {
|
||||
background: rgba(255, 150, 0, 0.3);
|
||||
}
|
||||
|
||||
.CodeMirror-activeline-background {
|
||||
background: #e8f2ff;
|
||||
}
|
||||
|
||||
.CodeMirror-scroll {
|
||||
overflow: scroll !important;
|
||||
margin-bottom: -30px;
|
||||
margin-right: -30px;
|
||||
padding-bottom: 30px;
|
||||
height: 100%;
|
||||
outline: 0;
|
||||
position: relative;
|
||||
min-height: 300px;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.CodeMirror-sizer {
|
||||
position: relative;
|
||||
border-right: 30px solid transparent;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.CodeMirror-hscrollbar {
|
||||
position: absolute;
|
||||
z-index: 6;
|
||||
display: none;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow-y: hidden;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
.CodeMirror-vscrollbar {
|
||||
position: absolute;
|
||||
z-index: 6;
|
||||
display: none;
|
||||
right: 0;
|
||||
top: 0;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.CodeMirror-gutter {
|
||||
white-space: normal;
|
||||
height: 100%;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
margin-bottom: -30px;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.CodeMirror-gutter-wrapper {
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
background: 0 0 !important;
|
||||
border: none !important;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.CodeMirror-gutter-background {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
z-index: 4;
|
||||
}
|
||||
|
||||
.CodeMirror-gutter-elt {
|
||||
position: absolute;
|
||||
cursor: default;
|
||||
z-index: 4;
|
||||
}
|
||||
|
||||
.CodeMirror-linebackground {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.CodeMirror-linewidget {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.CodeMirror-code {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.CodeMirror-measure {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
}
|
||||
.CodeMirror-measure pre {
|
||||
position: static;
|
||||
}
|
||||
|
||||
.CodeMirror-focused .CodeMirror-selected {
|
||||
background: #d7d4f0;
|
||||
}
|
||||
.CodeMirror-focused div.CodeMirror-cursors {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.CodeMirror-selected {
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
.CodeMirror-line::selection {
|
||||
background: #d7d4f0;
|
||||
}
|
||||
|
||||
.CodeMirror-line > span::selection {
|
||||
background: #d7d4f0;
|
||||
}
|
||||
.CodeMirror-line > span > span::selection {
|
||||
background: #d7d4f0;
|
||||
}
|
||||
.CodeMirror-line > span > span::-moz-selection {
|
||||
background: #d7d4f0;
|
||||
}
|
||||
.CodeMirror-line > span::-moz-selection {
|
||||
background: #d7d4f0;
|
||||
}
|
||||
|
||||
.CodeMirror-crosshair {
|
||||
cursor: crosshair;
|
||||
}
|
||||
|
||||
.CodeMirror-line::-moz-selection {
|
||||
background: #d7d4f0;
|
||||
}
|
||||
|
||||
.cm-searching {
|
||||
background: #ffa;
|
||||
background: rgba(255, 255, 0, 0.4);
|
||||
}
|
||||
|
||||
.cm-force-border {
|
||||
padding-right: 0.1px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
.CodeMirror div.CodeMirror-cursors {
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
.CodeMirror-fullscreen {
|
||||
background: #fff;
|
||||
position: fixed !important;
|
||||
top: 50px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: auto;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.CodeMirror-sided {
|
||||
width: 50% !important;
|
||||
}
|
||||
|
||||
.editor-toolbar {
|
||||
position: relative;
|
||||
opacity: 0.6;
|
||||
user-select: none;
|
||||
padding: 0 10px;
|
||||
border-top: 1px solid #bbb;
|
||||
border-left: 1px solid #bbb;
|
||||
border-right: 1px solid #bbb;
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
.editor-toolbar:after {
|
||||
display: block;
|
||||
content: " ";
|
||||
height: 1px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
.editor-toolbar:before {
|
||||
display: block;
|
||||
content: " ";
|
||||
height: 1px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.editor-toolbar:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
.editor-toolbar.fullscreen {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
white-space: nowrap;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
box-sizing: border-box;
|
||||
background: #fff;
|
||||
border: 0;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
opacity: 1;
|
||||
z-index: 9;
|
||||
}
|
||||
.editor-toolbar.fullscreen::before {
|
||||
width: 20px;
|
||||
height: 50px;
|
||||
background: linear-gradient(to right, rgb(255, 255, 255) 0, rgba(255, 255, 255, 0) 100%);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.editor-toolbar.fullscreen::after {
|
||||
width: 20px;
|
||||
height: 50px;
|
||||
background: linear-gradient(to right, rgba(255, 255, 255, 0) 0, rgb(255, 255, 255) 100%);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.editor-toolbar a {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
text-decoration: none !important;
|
||||
color: #2c3e50 !important;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin: 0;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.editor-toolbar a.active {
|
||||
background: #fcfcfc;
|
||||
border-color: #95a5a6;
|
||||
}
|
||||
.editor-toolbar a:hover {
|
||||
background: #fcfcfc;
|
||||
border-color: #95a5a6;
|
||||
}
|
||||
.editor-toolbar a:before {
|
||||
line-height: 30px;
|
||||
}
|
||||
.editor-toolbar a.fa-header-x:after {
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 65%;
|
||||
vertical-align: text-bottom;
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
.editor-toolbar a.fa-header-1:after {
|
||||
content: "1";
|
||||
}
|
||||
.editor-toolbar a.fa-header-2:after {
|
||||
content: "2";
|
||||
}
|
||||
.editor-toolbar a.fa-header-3:after {
|
||||
content: "3";
|
||||
}
|
||||
.editor-toolbar a.fa-header-bigger:after {
|
||||
content: "▲";
|
||||
}
|
||||
.editor-toolbar a.fa-header-smaller:after {
|
||||
content: "▼";
|
||||
}
|
||||
.editor-toolbar i.separator {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
border-left: 1px solid #ddd;
|
||||
border-right: 1px solid #fff;
|
||||
color: transparent;
|
||||
text-indent: -10px;
|
||||
margin: 0 6px;
|
||||
}
|
||||
.editor-toolbar.disabled-for-preview a:not(.no-disable) {
|
||||
pointer-events: none;
|
||||
background: #fff;
|
||||
border-color: transparent;
|
||||
text-shadow: inherit;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 700px) {
|
||||
.editor-toolbar a.no-mobile {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.editor-statusbar {
|
||||
padding: 8px 10px;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
text-align: right;
|
||||
}
|
||||
.editor-statusbar span {
|
||||
display: inline-block;
|
||||
min-width: 4em;
|
||||
margin-left: 1em;
|
||||
}
|
||||
.editor-statusbar .lines:before {
|
||||
content: "lines: ";
|
||||
}
|
||||
.editor-statusbar .words:before {
|
||||
content: "words: ";
|
||||
}
|
||||
.editor-statusbar .characters:before {
|
||||
content: "characters: ";
|
||||
}
|
||||
|
||||
.editor-preview {
|
||||
padding: 10px;
|
||||
background: #fafafa;
|
||||
overflow: auto;
|
||||
display: none;
|
||||
box-sizing: border-box;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 7;
|
||||
}
|
||||
.editor-preview > p {
|
||||
margin-top: 0;
|
||||
}
|
||||
.editor-preview pre {
|
||||
background: #eee;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.editor-preview table td {
|
||||
border: 1px solid #ddd;
|
||||
padding: 5px;
|
||||
}
|
||||
.editor-preview table th {
|
||||
border: 1px solid #ddd;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.editor-preview-side {
|
||||
padding: 10px;
|
||||
background: #fafafa;
|
||||
overflow: auto;
|
||||
display: none;
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 50%;
|
||||
top: 50px;
|
||||
right: 0;
|
||||
z-index: 9;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
.editor-preview-side > p {
|
||||
margin-top: 0;
|
||||
}
|
||||
.editor-preview-side pre {
|
||||
background: #eee;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.editor-preview-side table td {
|
||||
border: 1px solid #ddd;
|
||||
padding: 5px;
|
||||
}
|
||||
.editor-preview-side table th {
|
||||
border: 1px solid #ddd;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.editor-preview-active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.editor-preview-active-side {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.CodeMirror-wrap pre {
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
.cm-tab-wrap-hack:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
span.CodeMirror-selectedtext {
|
||||
background: 0 0;
|
||||
}
|
||||
|
||||
.editor-wrapper input.title:focus {
|
||||
opacity: 0.8;
|
||||
}
|
||||
.editor-wrapper input.title:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
+184
@@ -0,0 +1,184 @@
|
||||
@charset 'UTF-8';
|
||||
/* Slider */
|
||||
.slick-loading .slick-list {
|
||||
background: #fff url("../../images/ajax-loader.gif") center center no-repeat;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
@font-face {
|
||||
font-family: "slick";
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
src: url("../../fonts/slick/slick.eot");
|
||||
src: url("../../fonts/slick/slick.eot?#iefix") format("embedded-opentype"),
|
||||
url("../../fonts/slick/slick.woff") format("woff"),
|
||||
url("../../fonts/slick/slick.ttf") format("truetype"),
|
||||
url("../../fonts/slick/slick.svg#slick") format("svg");
|
||||
}
|
||||
/* Arrows */
|
||||
.slick-prev,
|
||||
.slick-next {
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: 0;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
-ms-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
color: transparent;
|
||||
border: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-prev:hover,
|
||||
.slick-prev:focus,
|
||||
.slick-next:hover,
|
||||
.slick-next:focus {
|
||||
color: transparent;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-prev:hover:before,
|
||||
.slick-prev:focus:before,
|
||||
.slick-next:hover:before,
|
||||
.slick-next:focus:before {
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-prev.slick-disabled:before,
|
||||
.slick-next.slick-disabled:before {
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
.slick-prev:before,
|
||||
.slick-next:before {
|
||||
font-family: "slick";
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
|
||||
opacity: 0.75;
|
||||
color: white;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.slick-prev {
|
||||
left: -25px;
|
||||
}
|
||||
[dir="rtl"] .slick-prev {
|
||||
right: -25px;
|
||||
left: auto;
|
||||
}
|
||||
.slick-prev:before {
|
||||
content: "←";
|
||||
}
|
||||
[dir="rtl"] .slick-prev:before {
|
||||
content: "→";
|
||||
}
|
||||
|
||||
.slick-next {
|
||||
right: -25px;
|
||||
}
|
||||
[dir="rtl"] .slick-next {
|
||||
right: auto;
|
||||
left: -25px;
|
||||
}
|
||||
.slick-next:before {
|
||||
content: "→";
|
||||
}
|
||||
[dir="rtl"] .slick-next:before {
|
||||
content: "←";
|
||||
}
|
||||
|
||||
/* Dots */
|
||||
.slick-dotted.slick-slider {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.slick-dots {
|
||||
position: absolute;
|
||||
bottom: -25px;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
list-style: none;
|
||||
|
||||
text-align: center;
|
||||
}
|
||||
.slick-dots li {
|
||||
position: relative;
|
||||
|
||||
display: inline-block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 0 5px;
|
||||
padding: 0;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
.slick-dots li button {
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: 5px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
color: transparent;
|
||||
border: 0;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-dots li button:hover,
|
||||
.slick-dots li button:focus {
|
||||
outline: none;
|
||||
}
|
||||
.slick-dots li button:hover:before,
|
||||
.slick-dots li button:focus:before {
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-dots li button:before {
|
||||
font-family: "slick";
|
||||
font-size: 6px;
|
||||
line-height: 20px;
|
||||
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
|
||||
content: "•";
|
||||
text-align: center;
|
||||
|
||||
opacity: 0.25;
|
||||
color: black;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.slick-dots li.slick-active button:before {
|
||||
opacity: 0.75;
|
||||
color: black;
|
||||
}
|
||||
+245
@@ -0,0 +1,245 @@
|
||||
@charset "UTF-8";
|
||||
/* Slider */
|
||||
.slick-loading .slick-list {
|
||||
background: #fff url("./ajax-loader.gif") center center no-repeat;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
@font-face {
|
||||
font-family: "slick";
|
||||
src: url("./fonts/slick.eot");
|
||||
src: url("./fonts/slick.eot?#iefix") format("embedded-opentype"), url("./fonts/slick.woff") format("woff"), url("./fonts/slick.ttf") format("truetype"), url("./fonts/slick.svg#slick") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
/* Arrows */
|
||||
.slick-prev,
|
||||
.slick-next {
|
||||
position: absolute;
|
||||
display: block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
line-height: 0px;
|
||||
font-size: 0px;
|
||||
cursor: pointer;
|
||||
background: transparent;
|
||||
color: transparent;
|
||||
top: 50%;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
-ms-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
padding: 0;
|
||||
border: none;
|
||||
outline: none;
|
||||
}
|
||||
.slick-prev:hover, .slick-prev:focus,
|
||||
.slick-next:hover,
|
||||
.slick-next:focus {
|
||||
outline: none;
|
||||
background: transparent;
|
||||
color: transparent;
|
||||
}
|
||||
.slick-prev:hover:before, .slick-prev:focus:before,
|
||||
.slick-next:hover:before,
|
||||
.slick-next:focus:before {
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-prev.slick-disabled:before,
|
||||
.slick-next.slick-disabled:before {
|
||||
opacity: 0.25;
|
||||
}
|
||||
.slick-prev:before,
|
||||
.slick-next:before {
|
||||
font-family: "slick";
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
color: white;
|
||||
opacity: 0.75;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.slick-prev {
|
||||
left: -25px;
|
||||
}
|
||||
[dir=rtl] .slick-prev {
|
||||
left: auto;
|
||||
right: -25px;
|
||||
}
|
||||
.slick-prev:before {
|
||||
content: "←";
|
||||
}
|
||||
[dir=rtl] .slick-prev:before {
|
||||
content: "→";
|
||||
}
|
||||
|
||||
.slick-next {
|
||||
right: -25px;
|
||||
}
|
||||
[dir=rtl] .slick-next {
|
||||
left: -25px;
|
||||
right: auto;
|
||||
}
|
||||
.slick-next:before {
|
||||
content: "→";
|
||||
}
|
||||
[dir=rtl] .slick-next:before {
|
||||
content: "←";
|
||||
}
|
||||
|
||||
/* Dots */
|
||||
.slick-dotted.slick-slider {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.slick-dots {
|
||||
position: absolute;
|
||||
bottom: -25px;
|
||||
list-style: none;
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.slick-dots li {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
margin: 0 5px;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
.slick-dots li button {
|
||||
border: 0;
|
||||
background: transparent;
|
||||
display: block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
outline: none;
|
||||
line-height: 0px;
|
||||
font-size: 0px;
|
||||
color: transparent;
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.slick-dots li button:hover, .slick-dots li button:focus {
|
||||
outline: none;
|
||||
}
|
||||
.slick-dots li button:hover:before, .slick-dots li button:focus:before {
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-dots li button:before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
content: "•";
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
font-family: "slick";
|
||||
font-size: 6px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
color: black;
|
||||
opacity: 0.25;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.slick-dots li.slick-active button:before {
|
||||
color: black;
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
/* Slider */
|
||||
.slick-slider {
|
||||
position: relative;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
.slick-list {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.slick-list:focus {
|
||||
outline: none;
|
||||
}
|
||||
.slick-list.dragging {
|
||||
cursor: pointer;
|
||||
cursor: hand;
|
||||
}
|
||||
|
||||
.slick-slider .slick-track,
|
||||
.slick-slider .slick-list {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0);
|
||||
-o-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.slick-track {
|
||||
position: relative;
|
||||
left: 0;
|
||||
top: 0;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.slick-track:before, .slick-track:after {
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
.slick-track:after {
|
||||
clear: both;
|
||||
}
|
||||
.slick-loading .slick-track {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.slick-slide {
|
||||
float: left;
|
||||
height: 100%;
|
||||
min-height: 1px;
|
||||
display: none;
|
||||
}
|
||||
[dir=rtl] .slick-slide {
|
||||
float: right;
|
||||
}
|
||||
.slick-slide img {
|
||||
display: block;
|
||||
}
|
||||
.slick-slide.slick-loading img {
|
||||
display: none;
|
||||
}
|
||||
.slick-slide.dragging img {
|
||||
pointer-events: none;
|
||||
}
|
||||
.slick-initialized .slick-slide {
|
||||
display: block;
|
||||
}
|
||||
.slick-loading .slick-slide {
|
||||
visibility: hidden;
|
||||
}
|
||||
.slick-vertical .slick-slide {
|
||||
display: block;
|
||||
height: auto;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.slick-arrow.slick-hidden {
|
||||
display: none;
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
@charset "UTF-8";
|
||||
/* Slider */
|
||||
.slick-loading .slick-list {
|
||||
background: #fff url("./ajax-loader.gif") center center no-repeat;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
@font-face {
|
||||
font-family: "slick";
|
||||
src: url("./fonts/slick.eot");
|
||||
src: url("./fonts/slick.eot?#iefix") format("embedded-opentype"), url("./fonts/slick.woff") format("woff"), url("./fonts/slick.ttf") format("truetype"), url("./fonts/slick.svg#slick") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
/* Arrows */
|
||||
.slick-prev,
|
||||
.slick-next {
|
||||
position: absolute;
|
||||
display: block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
line-height: 0px;
|
||||
font-size: 0px;
|
||||
cursor: pointer;
|
||||
background: transparent;
|
||||
color: transparent;
|
||||
top: 50%;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
-ms-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
padding: 0;
|
||||
border: none;
|
||||
outline: none;
|
||||
}
|
||||
.slick-prev:hover, .slick-prev:focus,
|
||||
.slick-next:hover,
|
||||
.slick-next:focus {
|
||||
outline: none;
|
||||
background: transparent;
|
||||
color: transparent;
|
||||
}
|
||||
.slick-prev:hover:before, .slick-prev:focus:before,
|
||||
.slick-next:hover:before,
|
||||
.slick-next:focus:before {
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-prev.slick-disabled:before,
|
||||
.slick-next.slick-disabled:before {
|
||||
opacity: 0.25;
|
||||
}
|
||||
.slick-prev:before,
|
||||
.slick-next:before {
|
||||
font-family: "slick";
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
color: white;
|
||||
opacity: 0.75;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.slick-prev {
|
||||
left: -25px;
|
||||
}
|
||||
[dir=rtl] .slick-prev {
|
||||
left: auto;
|
||||
right: -25px;
|
||||
}
|
||||
.slick-prev:before {
|
||||
content: "←";
|
||||
}
|
||||
[dir=rtl] .slick-prev:before {
|
||||
content: "→";
|
||||
}
|
||||
|
||||
.slick-next {
|
||||
right: -25px;
|
||||
}
|
||||
[dir=rtl] .slick-next {
|
||||
left: -25px;
|
||||
right: auto;
|
||||
}
|
||||
.slick-next:before {
|
||||
content: "→";
|
||||
}
|
||||
[dir=rtl] .slick-next:before {
|
||||
content: "←";
|
||||
}
|
||||
|
||||
/* Dots */
|
||||
.slick-dotted.slick-slider {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.slick-dots {
|
||||
position: absolute;
|
||||
bottom: -25px;
|
||||
list-style: none;
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.slick-dots li {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
margin: 0 5px;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
.slick-dots li button {
|
||||
border: 0;
|
||||
background: transparent;
|
||||
display: block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
outline: none;
|
||||
line-height: 0px;
|
||||
font-size: 0px;
|
||||
color: transparent;
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.slick-dots li button:hover, .slick-dots li button:focus {
|
||||
outline: none;
|
||||
}
|
||||
.slick-dots li button:hover:before, .slick-dots li button:focus:before {
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-dots li button:before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
content: "•";
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
font-family: "slick";
|
||||
font-size: 6px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
color: black;
|
||||
opacity: 0.25;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.slick-dots li.slick-active button:before {
|
||||
color: black;
|
||||
opacity: 0.75;
|
||||
}
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
/* Slider */
|
||||
.slick-slider {
|
||||
position: relative;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
.slick-list {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.slick-list:focus {
|
||||
outline: none;
|
||||
}
|
||||
.slick-list.dragging {
|
||||
cursor: pointer;
|
||||
cursor: hand;
|
||||
}
|
||||
|
||||
.slick-slider .slick-track,
|
||||
.slick-slider .slick-list {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0);
|
||||
-o-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.slick-track {
|
||||
position: relative;
|
||||
left: 0;
|
||||
top: 0;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.slick-track:before, .slick-track:after {
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
.slick-track:after {
|
||||
clear: both;
|
||||
}
|
||||
.slick-loading .slick-track {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.slick-slide {
|
||||
float: left;
|
||||
height: 100%;
|
||||
min-height: 1px;
|
||||
display: none;
|
||||
}
|
||||
[dir=rtl] .slick-slide {
|
||||
float: right;
|
||||
}
|
||||
.slick-slide img {
|
||||
display: block;
|
||||
}
|
||||
.slick-slide.slick-loading img {
|
||||
display: none;
|
||||
}
|
||||
.slick-slide.dragging img {
|
||||
pointer-events: none;
|
||||
}
|
||||
.slick-initialized .slick-slide {
|
||||
display: block;
|
||||
}
|
||||
.slick-loading .slick-slide {
|
||||
visibility: hidden;
|
||||
}
|
||||
.slick-vertical .slick-slide {
|
||||
display: block;
|
||||
height: auto;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.slick-arrow.slick-hidden {
|
||||
display: none;
|
||||
}
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
/* * Hide from both screenreaders and browsers: h5bp.com/u */
|
||||
.hidden {
|
||||
display: none !important;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/* * Hide only visually, but have it available for screenreaders: h5bp.com/v */
|
||||
.visuallyhidden {
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
/* * Extends the .visuallyhidden class to allow the element to be focusable * when navigated to via the keyboard: h5bp.com/p */
|
||||
.visuallyhidden.focusable:active,
|
||||
.visuallyhidden.focusable:focus {
|
||||
clip: auto;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
position: static;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* * Hide visually and from screenreaders, but maintain layout */
|
||||
.invisible {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
content: " ";
|
||||
/* 1 */
|
||||
display: table;
|
||||
/* 2 */
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.noflick, .button, .note {
|
||||
perspective: 1000;
|
||||
backface-visibility: hidden;
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.sticky-note {
|
||||
margin: -15px;
|
||||
}
|
||||
|
||||
.note {
|
||||
float: left;
|
||||
display: block;
|
||||
position: relative;
|
||||
padding: 1em;
|
||||
width: calc(25% - 30px);
|
||||
min-height: 300px;
|
||||
margin: 15px;
|
||||
border-radius: 5px;
|
||||
background-color: rgba(115, 102, 255, 0.1);
|
||||
transition: transform 0.15s;
|
||||
z-index: 1;
|
||||
}
|
||||
.note:hover {
|
||||
cursor: move;
|
||||
}
|
||||
.note.ui-draggable-dragging:nth-child(n) {
|
||||
box-shadow: 5px 5px 15px 0 rgba(0, 0, 0, 0.3);
|
||||
transform: scale(1.125) !important;
|
||||
z-index: 100;
|
||||
cursor: move;
|
||||
transition: transform 0.15s;
|
||||
}
|
||||
.note textarea {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
resize: vertical;
|
||||
font-style: italic;
|
||||
width: 100%;
|
||||
padding: 5px;
|
||||
}
|
||||
.note textarea:focus {
|
||||
outline: none;
|
||||
border: none;
|
||||
box-shadow: 0 0 0px 1px rgba(0, 0, 0, 0.2) inset;
|
||||
}
|
||||
.note textarea.title {
|
||||
font-size: 24px;
|
||||
line-height: 1.2;
|
||||
color: #000000;
|
||||
height: 64px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.note textarea.cnt {
|
||||
min-height: 200px;
|
||||
}
|
||||
.note:nth-child(2n) {
|
||||
background: rgba(255, 51, 100, 0.2);
|
||||
}
|
||||
.note:nth-child(3n) {
|
||||
background: rgba(84, 186, 74, 0.2);
|
||||
}
|
||||
.note:nth-child(4n) {
|
||||
background: rgba(22, 199, 249, 0.1);
|
||||
}
|
||||
.note:nth-child(5n) {
|
||||
background: rgba(255, 170, 5, 0.2);
|
||||
}
|
||||
.note:nth-child(6n) {
|
||||
background: rgba(252, 68, 56, 0.3);
|
||||
}
|
||||
|
||||
/* Button style */
|
||||
.button {
|
||||
color: #FFFFFF;
|
||||
padding: 1em 2em;
|
||||
text-decoration: none;
|
||||
transition: transform 0.15s, background 0.01s;
|
||||
}
|
||||
.button.remove {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: -10px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1199px) {
|
||||
.note {
|
||||
min-width: 260px;
|
||||
min-height: 260px;
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user