[prepare] hardware website for staging
This commit is contained in:
parent
5d6a14e2ed
commit
0d28446044
187
app.py
Normal file
187
app.py
Normal file
@ -0,0 +1,187 @@
|
||||
from flask import Flask, render_template, request, jsonify, session
|
||||
from pymongo import MongoClient
|
||||
import random
|
||||
import string
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
MONGO_URI_RO = 'mongodb://localhost:27017/hardware'
|
||||
app.secret_key = 'test'
|
||||
# mongoimport --db hardware --collection product_thinkmate --file db.json --jsonArray
|
||||
|
||||
|
||||
def init_mongo():
|
||||
client = MongoClient(MONGO_URI_RO)
|
||||
return client['hardware']
|
||||
|
||||
@app.route('/', methods=['GET'])
|
||||
def home():
|
||||
hardware = init_mongo()
|
||||
categories = list(hardware['product_thinkmate'].find({}))
|
||||
return render_template('base_website.html', categories=categories)
|
||||
|
||||
@app.route('/index', methods=['POST'])
|
||||
def index():
|
||||
hardware = init_mongo()
|
||||
categories = list(hardware['product_thinkmate'].find({}))
|
||||
return render_template('index.html', categories=categories)
|
||||
|
||||
@app.route('/servers', methods=['POST'])
|
||||
def servers():
|
||||
hardware = init_mongo()
|
||||
servers = list(hardware['product_thinkmate'].find({'type': 'server'}))
|
||||
return render_template('servers.html', servers=servers)
|
||||
|
||||
@app.route('/servers/<category>', methods=['POST'])
|
||||
def category(category):
|
||||
hardware = init_mongo()
|
||||
server_category = hardware['product_thinkmate'].find_one({'type': 'server', 'category': category})
|
||||
server_details = server_category.get('server_details', '')
|
||||
server_highlights_detail = server_category.get('server_highlights_detail', '')
|
||||
products = server_category.get('products', '')
|
||||
details_list = [phrase.strip() for phrase in server_details.split('||')]
|
||||
return render_template('category.html', server_category=server_category,
|
||||
details_list=details_list, server_highlights_detail=server_highlights_detail,
|
||||
products=products)
|
||||
|
||||
@app.route('/product/<category>/<product_name>', methods=['POST'])
|
||||
def product(category, product_name):
|
||||
session.clear()
|
||||
product_id = request.args.get('product_id')
|
||||
hardware = init_mongo()
|
||||
category_data = hardware['product_thinkmate'].find_one({'category': category})
|
||||
saved_selections = session.get('config_selections', {}).get(product_name, {})
|
||||
product = None
|
||||
config_data = None
|
||||
if category_data and 'products' in category_data:
|
||||
for item in category_data['products']:
|
||||
if item.get('product_name') == product_name:
|
||||
product = item
|
||||
config_data = item.get('product_data', {}).get('config', [])[0]
|
||||
break
|
||||
return render_template('product.html', product=product,
|
||||
category_data=category_data, config_data=config_data,
|
||||
saved_selections=saved_selections)
|
||||
|
||||
@app.route('/configurator/<category>/<product_name>/<config_category>', methods=['POST'])
|
||||
def config(category, product_name, config_category):
|
||||
product_id = request.args.get('product_id')
|
||||
hardware = init_mongo()
|
||||
category_data = hardware['product_thinkmate'].find_one({'category': category})
|
||||
saved_selections = session.get('config_selections', {}).get(product_name, {})
|
||||
product = None
|
||||
config_data = None
|
||||
if category_data and 'products' in category_data:
|
||||
for item in category_data['products']:
|
||||
if item.get('product_name') == product_name:
|
||||
product = item
|
||||
config_data = item.get('product_data', {}).get('config', [])
|
||||
for config in config_data:
|
||||
if config.get('category', {}).get('name') == config_category:
|
||||
config_data = config
|
||||
break
|
||||
break
|
||||
return render_template('config.html', product=product, category_data=category_data,
|
||||
config_data=config_data, config_category=config_category,
|
||||
saved_selections=saved_selections)
|
||||
|
||||
@app.route('/save_config_selection', methods=['POST'])
|
||||
def save_config_selection():
|
||||
data = request.form
|
||||
product_name = data.get('product_name')
|
||||
category = data.get('category')
|
||||
max_quantity_str = data.get('max_quantity', None)
|
||||
try:
|
||||
max_quantity = int(max_quantity_str) if max_quantity_str and max_quantity_str.isdigit() else None
|
||||
except ValueError:
|
||||
max_quantity = None
|
||||
|
||||
sub_category = data.get('sub_category')
|
||||
config_choice_type = data.get('config_choice_type')
|
||||
new_category_data = {"max_quantity": max_quantity}
|
||||
config_keys = [key for key in data.keys() if key.startswith('config-')]
|
||||
|
||||
if config_choice_type != 'radio' and max_quantity and len(config_keys) > max_quantity:
|
||||
return jsonify({
|
||||
'message': f'Cannot select more than {max_quantity} options for {category}.',
|
||||
'status': 'ko'
|
||||
})
|
||||
|
||||
if config_keys:
|
||||
if config_choice_type == 'radio':
|
||||
for key, value in data.items():
|
||||
if key.startswith('config-'):
|
||||
new_category_data["selection"] = value
|
||||
break
|
||||
else:
|
||||
new_category_data["subcategories"] = {}
|
||||
for key, value in data.items():
|
||||
if key.startswith('config-'):
|
||||
parts = key.split('-')
|
||||
subcategory = parts[3] if len(parts) >= 4 else category
|
||||
new_category_data["subcategories"].setdefault(subcategory, []).append(value)
|
||||
else:
|
||||
if config_choice_type == 'radio':
|
||||
new_category_data["selection"] = None
|
||||
else:
|
||||
new_category_data["subcategories"] = {sub_category or category: []}
|
||||
|
||||
config_selections = session.get('config_selections', {})
|
||||
config_selections.setdefault(product_name, {})[category] = new_category_data
|
||||
|
||||
# Cleanup logic
|
||||
if config_choice_type != 'radio':
|
||||
subcats = config_selections[product_name][category].get("subcategories", {})
|
||||
subcats = {k: v for k, v in subcats.items() if v}
|
||||
if not subcats:
|
||||
config_selections[product_name].pop(category, None)
|
||||
elif not config_selections[product_name][category].get("selection"):
|
||||
config_selections[product_name].pop(category, None)
|
||||
|
||||
if not config_selections[product_name]:
|
||||
config_selections.pop(product_name)
|
||||
|
||||
session['config_selections'] = config_selections
|
||||
return jsonify(config_selections.get(product_name, {}))
|
||||
|
||||
@app.route('/show_order', methods=['POST'])
|
||||
def show_order():
|
||||
config_selection = session.get('config_selections', {})
|
||||
return render_template('order.html', config_selection=config_selection,
|
||||
no_order_message='No orders found in the session.')
|
||||
|
||||
def sanitize_keys(data):
|
||||
if isinstance(data, dict):
|
||||
return {k.replace('.', '_'): sanitize_keys(v) for k, v in data.items()}
|
||||
elif isinstance(data, list):
|
||||
return [sanitize_keys(i) for i in data]
|
||||
return data
|
||||
|
||||
@app.route('/confirm_order', methods=['POST'])
|
||||
def confirm_order():
|
||||
order = sanitize_keys(session.get('config_selections', {}))
|
||||
hardware = init_mongo()
|
||||
if not order:
|
||||
return 'No orders found in the session.'
|
||||
if 'order' not in hardware.list_collection_names():
|
||||
hardware.create_collection('order')
|
||||
order_id = ''.join(random.choices(string.ascii_letters + string.digits, k=5))
|
||||
details = []
|
||||
for product_name, categories in order.items():
|
||||
for category_name, category_data in categories.items():
|
||||
details.append({
|
||||
"category": category_name,
|
||||
"selection": category_data.get("selection"),
|
||||
"subcategories": category_data.get("subcategories", {})
|
||||
})
|
||||
hardware['order'].insert_one({
|
||||
'order_id': order_id,
|
||||
'product_name': product_name,
|
||||
'details': details,
|
||||
'status': 'confirmed'
|
||||
})
|
||||
session.clear()
|
||||
return '<i class="fas fa-check" style="color: green;"></i> Order confirmed successfully!'
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
||||
26
static/base/assets/examples/css/advanced/toastr.css
Normal file
26
static/base/assets/examples/css/advanced/toastr.css
Normal file
@ -0,0 +1,26 @@
|
||||
.toast-example {
|
||||
position: static;
|
||||
margin: 10px 0 30px;
|
||||
}
|
||||
.toast-example.padding-0 {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.toast-example > div {
|
||||
width: auto;
|
||||
max-width: 300px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.position-example {
|
||||
position: relative;
|
||||
height: 330px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.position-example > div {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
}
|
||||
.position-example > .btn-block + .btn-block {
|
||||
margin-top: 215px;
|
||||
}
|
||||
66
static/base/assets/examples/css/uikit/modals.css
Normal file
66
static/base/assets/examples/css/uikit/modals.css
Normal file
@ -0,0 +1,66 @@
|
||||
.example-modal {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 35px 15px;
|
||||
background-color: #f3f7f9;
|
||||
}
|
||||
.example-modal .modal {
|
||||
position: relative;
|
||||
top: auto;
|
||||
right: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
z-index: 1;
|
||||
display: block;
|
||||
}
|
||||
.example-modal .modal .modal-dialog {
|
||||
width: auto;
|
||||
max-width: 600px;
|
||||
margin: 15px auto;
|
||||
}
|
||||
.example-modal-top .center {
|
||||
top: 0;
|
||||
-webkit-transform: translate(-50%, 0px);
|
||||
transform: translate(-50%, 0px);
|
||||
}
|
||||
.example-modal-bottom .center {
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
-webkit-transform: translate(-50%, 0px);
|
||||
transform: translate(-50%, 0px);
|
||||
}
|
||||
.example-modal-sidebar .center {
|
||||
top: 0;
|
||||
right: 5px;
|
||||
left: auto;
|
||||
-webkit-transform: none;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.example-buttons .modal-footer .btn {
|
||||
margin-right: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.color-selector > li {
|
||||
margin-right: 20px;
|
||||
margin-bottom: 11px;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
#examplePositionSidebar .modal-sidebar {
|
||||
min-width: 260px;
|
||||
}
|
||||
}
|
||||
|
||||
.example-fill-in.example-well {
|
||||
position: relative;
|
||||
background-color: #fff;
|
||||
border: 1px solid #e4eaec;
|
||||
}
|
||||
.example-fill-in.example-well:after {
|
||||
content: "x";
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 10px;
|
||||
}
|
||||
0
static/felcloud/website/css.css
Normal file
0
static/felcloud/website/css.css
Normal file
24
static/felcloud/website/css/animate.min.css
vendored
Normal file
24
static/felcloud/website/css/animate.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
9809
static/felcloud/website/css/bootstrap.min.css
vendored
Normal file
9809
static/felcloud/website/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
301
static/felcloud/website/css/colors/dark.css
Normal file
301
static/felcloud/website/css/colors/dark.css
Normal file
@ -0,0 +1,301 @@
|
||||
/*------------------------------------------------------------------
|
||||
Project: Antler - Hosting Provider & WHMCS Template
|
||||
Description: Antler Responsive Premium Template Designed for all web hosting providers
|
||||
Author: inebur (Rúben Rodrigues)
|
||||
Author URI: http://inebur.com/
|
||||
Author Envato: https://themeforest.net/user/inebur
|
||||
Copyright: 2021 inebur
|
||||
Version: 2.4
|
||||
|
||||
* Dark Color Skin
|
||||
-------------------------------------------------------------------*/
|
||||
|
||||
/* Dark Light */
|
||||
svg #svg-ico {
|
||||
fill: #4c555d;
|
||||
}
|
||||
svg #svg-concept {
|
||||
stroke: #4c555d;
|
||||
}
|
||||
.golink {
|
||||
color: #4c555d !important;
|
||||
border-bottom: solid 1px #4c555d;
|
||||
}
|
||||
.golink:hover {
|
||||
color: #4c555d !important;
|
||||
}
|
||||
.bg-pink {
|
||||
background-color: #4c555d !important;
|
||||
}
|
||||
.c-pink {
|
||||
color: #4c555d !important;
|
||||
}
|
||||
.bb-pink {
|
||||
border-bottom: solid 1px #4c555d !important;
|
||||
}
|
||||
.popover {
|
||||
border: solid 1px #4c555d;
|
||||
}
|
||||
.popover .arrow::before {
|
||||
border-top-color: #4c555d;
|
||||
}
|
||||
.popover .popover-header {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
::selection {
|
||||
background: #4c555d;
|
||||
}
|
||||
.nav-menu .main-menu > .menu-item > .sub-menu > .menu-item a:hover {
|
||||
color: #4c555d;
|
||||
}
|
||||
.nav-menu
|
||||
.main-menu
|
||||
.menu-item
|
||||
.menu-large
|
||||
.service-list
|
||||
.service
|
||||
.media-body
|
||||
a:hover {
|
||||
color: #4c555d;
|
||||
}
|
||||
.megamenu .start-offer .inner {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.megamenu .service-list .service.special .media-body a:hover {
|
||||
color: #4c555d;
|
||||
}
|
||||
.megamenu .service-list .service .media-body a:hover {
|
||||
color: #4c555d;
|
||||
}
|
||||
.megamenu-list .service-list .service .media-body a:hover {
|
||||
color: #4c555d;
|
||||
}
|
||||
.team .wrapper:hover .team-info .desc {
|
||||
color: #4c555d;
|
||||
}
|
||||
.wpc-cloud-range .noUi-connect {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.wpc-cloud-range .noUi-tooltip:before {
|
||||
border-color: #4c555d transparent transparent transparent;
|
||||
}
|
||||
.wpc-cloud-range .noUi-tooltip {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.wpc-cloud-range .noUi-horizontal .noUi-handle {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.wpc-vps-info .title .info {
|
||||
color: #4c555d;
|
||||
}
|
||||
.fullrock .closer {
|
||||
color: #4c555d !important;
|
||||
}
|
||||
.form-control:focus {
|
||||
border: solid 1px #4c555d !important;
|
||||
}
|
||||
.sec-bg5 {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.total-grad {
|
||||
background: linear-gradient(-60deg, #4c555d 0%, #212529 100%) !important;
|
||||
}
|
||||
.total-grad-inverse {
|
||||
background: linear-gradient(240deg, #212529 0%, #4c555d 100%);
|
||||
}
|
||||
.total-grad-pink-blue-intense {
|
||||
background: linear-gradient(240deg, #3f004a 50%, #000000 100%);
|
||||
}
|
||||
.total-grad-pink-blue-intensee {
|
||||
background: linear-gradient(-240deg, #3f004a 50%, #000000 100%);
|
||||
}
|
||||
|
||||
.menu-wrap.fixed {
|
||||
background: #33003b;
|
||||
}
|
||||
.btn-default-pink {
|
||||
color: #4c555d;
|
||||
border: 1px solid #4c555d;
|
||||
}
|
||||
.btn-default-pink:hover {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.btn-default-grad-purple-fill {
|
||||
background-image: linear-gradient(
|
||||
to right,
|
||||
#212529,
|
||||
#4c555d 40%,
|
||||
#4c555d 40%,
|
||||
#212529
|
||||
);
|
||||
}
|
||||
.btn-default-grad-purple-fill:hover {
|
||||
background-image: linear-gradient(
|
||||
to right,
|
||||
#212529,
|
||||
#4c555d 40%,
|
||||
#4c555d 40%,
|
||||
#212529
|
||||
);
|
||||
}
|
||||
.btn-default-pink-fill {
|
||||
background-color: #4c555d !important;
|
||||
}
|
||||
.owl-theme .owl-dots .owl-dot.active span {
|
||||
border: solid 1px #4c555d !important;
|
||||
}
|
||||
.pricing .wrapper .title {
|
||||
color: #4c555d;
|
||||
}
|
||||
.pricing .list-info {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.slick #slider .plan-container .title {
|
||||
color: #4c555d;
|
||||
}
|
||||
.tabs-header .btn-secondary:not(:disabled):not(.disabled).active {
|
||||
background-color: #3e0048 !important;
|
||||
}
|
||||
.tabs.offers-tabs .tabs-header .active {
|
||||
border-left: solid 2px #4c555d;
|
||||
color: #4c555d;
|
||||
}
|
||||
.tabs.offers-tabs .tabs-header .active:hover {
|
||||
color: #4c555d;
|
||||
}
|
||||
.fill-input:focus {
|
||||
border-color: #4c555d !important;
|
||||
}
|
||||
.countdown .wrapper .clock div:first-child {
|
||||
border: solid 1px #4c555d;
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.accordion.faq .panel-title.active {
|
||||
border-bottom: solid 1px #4c555d;
|
||||
}
|
||||
.blog .sidebar .heading.active {
|
||||
color: #4c555d;
|
||||
}
|
||||
.blog .sidebar .posts .tabs-header li.active {
|
||||
color: #4c555d;
|
||||
border-bottom-color: #4c555d;
|
||||
}
|
||||
.blog .sidebar .line.active:before {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.blog .media .media-heading a:hover {
|
||||
color: #4c555d;
|
||||
}
|
||||
.blog .wrap-blog .social-icon i {
|
||||
color: #4c555d;
|
||||
}
|
||||
.blog .sidebar .categories .heading a.active {
|
||||
color: #4c555d;
|
||||
}
|
||||
.blog .sidebar .categories .heading a:after {
|
||||
color: #4c555d;
|
||||
}
|
||||
.blog .sidebar .categories .heading span {
|
||||
color: #4c555d;
|
||||
}
|
||||
.circle-section .title-round {
|
||||
color: #4c555d;
|
||||
}
|
||||
.domain-prices li {
|
||||
color: #4c555d;
|
||||
}
|
||||
.maping .datacenters {
|
||||
background: #4c555d;
|
||||
}
|
||||
.footer .soc-icons i {
|
||||
color: #4c555d;
|
||||
}
|
||||
.included i {
|
||||
color: #4c555d;
|
||||
}
|
||||
.soc-icons-apply span {
|
||||
color: #4c555d;
|
||||
}
|
||||
.bigline {
|
||||
border: solid 1px #4c555d;
|
||||
}
|
||||
.smallline {
|
||||
border: solid 1px #4c555d;
|
||||
}
|
||||
.knowledge a {
|
||||
color: #4c555d;
|
||||
}
|
||||
.godown span {
|
||||
color: #4c555d;
|
||||
}
|
||||
.cd-filter-block input[type="radio"]:checked + label::before,
|
||||
.cd-filter-block input[type="checkbox"]:checked + label::before {
|
||||
border: none !important;
|
||||
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
|
||||
background: white !important;
|
||||
}
|
||||
.cd-filter-block select:hover {
|
||||
border: solid 1px #4c555d !important;
|
||||
}
|
||||
.cd-filter-block input:focus,
|
||||
.cd-filter-block select:focus {
|
||||
border-color: #4c555d !important;
|
||||
}
|
||||
.range-slider-input::-webkit-slider-runnable-track {
|
||||
background: #4c555d;
|
||||
}
|
||||
.range-slider-input::-webkit-slider-thumb {
|
||||
background: #4c555d;
|
||||
}
|
||||
.zoo-content .icoo i {
|
||||
background-color: #4c555d;
|
||||
}
|
||||
.services .service-wrap .pay img {
|
||||
border: solid 1px #4c555d;
|
||||
}
|
||||
.page-item.active .page-link {
|
||||
background-color: #4c555d !important;
|
||||
border-color: #4c555d !important;
|
||||
}
|
||||
.cd-filter-block input.range-slider-input {
|
||||
background-color: #3e0048 !important;
|
||||
}
|
||||
.range-slider-input::-webkit-slider-thumb {
|
||||
background-color: #4c555d !important;
|
||||
}
|
||||
.range-slider-input::-moz-range-thumb {
|
||||
background-color: #4c555d !important;
|
||||
}
|
||||
/* Dark Dark */
|
||||
.bg-purple {
|
||||
background-color: #212529 !important;
|
||||
}
|
||||
.c-purple {
|
||||
color: #212529 !important;
|
||||
}
|
||||
.sec-grad-white-to-purple {
|
||||
background: linear-gradient(90deg, #fff 70%, #212529 0%) !important;
|
||||
}
|
||||
.btn-default-purple {
|
||||
color: #212529;
|
||||
border: 1px solid #212529;
|
||||
}
|
||||
.btn-default-purple:hover {
|
||||
background-color: #212529;
|
||||
}
|
||||
.btn-default-purple-fill {
|
||||
background-color: #212529 !important;
|
||||
}
|
||||
.pricing .table .title {
|
||||
color: #212529;
|
||||
}
|
||||
.accordion.faq .panel-title.active {
|
||||
color: #212529 !important;
|
||||
}
|
||||
.wpc-vps-info .price-wrap .title {
|
||||
background-color: #212529;
|
||||
}
|
||||
/* Custom Dark */
|
||||
.megamenu .start-offer .inner .inner-content {
|
||||
color: #efefef;
|
||||
}
|
||||
1525
static/felcloud/website/css/custom.css
Normal file
1525
static/felcloud/website/css/custom.css
Normal file
File diff suppressed because it is too large
Load Diff
781
static/felcloud/website/css/filter.css
Normal file
781
static/felcloud/website/css/filter.css
Normal file
@ -0,0 +1,781 @@
|
||||
/* --------------------------------
|
||||
Main Components
|
||||
-------------------------------- */
|
||||
.cd-header {
|
||||
position: relative;
|
||||
height: 150px;
|
||||
background-color: #331d35;
|
||||
}
|
||||
.cd-header h1 {
|
||||
color: #ffffff;
|
||||
line-height: 150px;
|
||||
text-align: center;
|
||||
font-size: 2.4rem;
|
||||
font-weight: 300;
|
||||
}
|
||||
@media only screen and (min-width: 1170px) {
|
||||
.cd-header {
|
||||
height: 180px;
|
||||
}
|
||||
.cd-header h1 {
|
||||
line-height: 180px;
|
||||
}
|
||||
}
|
||||
.cd-main-content:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
.cd-main-content.is-fixed .cd-tab-filter-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.cd-main-content.is-fixed .cd-gallery {
|
||||
padding-top: 76px;
|
||||
}
|
||||
.cd-main-content.is-fixed .cd-filter {
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
.cd-main-content.is-fixed .cd-filter-trigger {
|
||||
position: fixed;
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
.cd-main-content.is-fixed .cd-gallery {
|
||||
padding-top: 90px;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 1170px) {
|
||||
.cd-main-content.is-fixed .cd-gallery {
|
||||
padding-top: 100px;
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
xtab-filter
|
||||
-------------------------------- */
|
||||
.cd-tab-filter-wrapper {
|
||||
background-color: #ffffff;
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.08);
|
||||
z-index: 1;
|
||||
}
|
||||
.cd-tab-filter-wrapper:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
.cd-tab-filter {
|
||||
/* tabbed navigation style on mobile - dropdown */
|
||||
position: relative;
|
||||
height: 50px;
|
||||
width: 140px;
|
||||
margin: 0 auto;
|
||||
z-index: 1;
|
||||
}
|
||||
.cd-tab-filter::after {
|
||||
/* small arrow icon */
|
||||
content: "";
|
||||
position: absolute;
|
||||
right: 14px;
|
||||
top: 50%;
|
||||
bottom: auto;
|
||||
-webkit-transform: translateY(-50%);
|
||||
-moz-transform: translateY(-50%);
|
||||
-ms-transform: translateY(-50%);
|
||||
-o-transform: translateY(-50%);
|
||||
transform: translateY(-50%);
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: url("../img/filter/cd-icon-arrow.svg") no-repeat center center;
|
||||
-webkit-transition: all 0.3s;
|
||||
-moz-transition: all 0.3s;
|
||||
transition: all 0.3s;
|
||||
pointer-events: none;
|
||||
}
|
||||
.cd-tab-filter ul {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: #ffffff;
|
||||
box-shadow: inset 0 -2px 0 #a3d133;
|
||||
}
|
||||
.cd-tab-filter li {
|
||||
display: none;
|
||||
}
|
||||
.cd-tab-filter li:first-child {
|
||||
/* this way the placehodler is alway visible */
|
||||
display: block;
|
||||
}
|
||||
.cd-tab-filter a {
|
||||
display: block; /* set same size of the .cd-tab-filter */
|
||||
height: 50px;
|
||||
width: 140px;
|
||||
line-height: 50px;
|
||||
padding-left: 14px;
|
||||
}
|
||||
.cd-tab-filter a.selected {
|
||||
background: #a3d133;
|
||||
color: #ffffff;
|
||||
}
|
||||
.cd-tab-filter.is-open::after {
|
||||
/* small arrow rotation */
|
||||
-webkit-transform: translateY(-50%) rotate(-180deg);
|
||||
-moz-transform: translateY(-50%) rotate(-180deg);
|
||||
-ms-transform: translateY(-50%) rotate(-180deg);
|
||||
-o-transform: translateY(-50%) rotate(-180deg);
|
||||
transform: translateY(-50%) rotate(-180deg);
|
||||
}
|
||||
.cd-tab-filter.is-open ul {
|
||||
box-shadow: inset 0 -2px 0 #a3d133, 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.cd-tab-filter.is-open ul li {
|
||||
display: block;
|
||||
}
|
||||
.cd-tab-filter.is-open .placeholder a {
|
||||
/* reduces the opacity of the placeholder on mobile when the menu is open */
|
||||
opacity: 0.4;
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
.cd-tab-filter {
|
||||
/* tabbed navigation style on medium devices */
|
||||
width: auto;
|
||||
cursor: auto;
|
||||
}
|
||||
.cd-tab-filter::after {
|
||||
/* hide the arrow */
|
||||
display: none;
|
||||
}
|
||||
.cd-tab-filter ul {
|
||||
background: transparent;
|
||||
position: static;
|
||||
box-shadow: none;
|
||||
text-align: center;
|
||||
}
|
||||
.cd-tab-filter li {
|
||||
display: inline-block;
|
||||
}
|
||||
.cd-tab-filter li.placeholder {
|
||||
display: none !important;
|
||||
}
|
||||
.cd-tab-filter a {
|
||||
display: inline-block;
|
||||
padding: 0 1em;
|
||||
width: auto;
|
||||
color: #9a9a9a;
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
.no-touch .cd-tab-filter a:hover {
|
||||
color: #a3d133;
|
||||
}
|
||||
.cd-tab-filter a.selected {
|
||||
background: transparent;
|
||||
color: #a3d133; /* create border bottom using box-shadow property */
|
||||
box-shadow: inset 0 -2px 0 #a3d133;
|
||||
}
|
||||
.cd-tab-filter.is-open ul li {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 1170px) {
|
||||
.cd-tab-filter {
|
||||
/* tabbed navigation on big devices */
|
||||
width: 100%;
|
||||
float: right;
|
||||
margin: 0;
|
||||
-webkit-transition: width 0.3s;
|
||||
-moz-transition: width 0.3s;
|
||||
transition: width 0.3s;
|
||||
}
|
||||
.cd-tab-filter.filter-is-visible {
|
||||
/* reduce width when filter is visible */
|
||||
width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
xgallery
|
||||
-------------------------------- */
|
||||
.cd-gallery {
|
||||
padding: 26px 5%;
|
||||
width: 100%;
|
||||
}
|
||||
.cd-gallery li {
|
||||
margin-bottom: 1.6em;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
|
||||
display: none;
|
||||
}
|
||||
.cd-gallery li.gap {
|
||||
/* used in combination with text-align: justify to align gallery elements */
|
||||
opacity: 0;
|
||||
height: 0;
|
||||
display: inline-block;
|
||||
}
|
||||
.cd-gallery img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
.mixcontainer .cd-fail-message {
|
||||
box-shadow: 0 5px 15px 0 rgba(110, 110, 110, 0.1);
|
||||
border-radius: 15px;
|
||||
background: #fff;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
display: none;
|
||||
}
|
||||
.mixcontainer .sec-main .cd-fail-message {
|
||||
box-shadow: none;
|
||||
padding: 30px 0px 0px 0px;
|
||||
}
|
||||
.mixitup-container-failed .cd-fail-message {
|
||||
width: 100%;
|
||||
display: inline-block !important;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.mixitup-container-failed .cd-fail-message {
|
||||
margin-bottom: 80px;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
.cd-gallery {
|
||||
padding: 40px 3%;
|
||||
}
|
||||
.cd-gallery ul {
|
||||
text-align: justify;
|
||||
}
|
||||
.cd-gallery ul:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
.cd-gallery li {
|
||||
width: 48%;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 1170px) {
|
||||
.cd-gallery {
|
||||
padding: 50px 2%;
|
||||
float: right;
|
||||
-webkit-transition: width 0.3s;
|
||||
-moz-transition: width 0.3s;
|
||||
transition: width 0.3s;
|
||||
}
|
||||
.cd-gallery li {
|
||||
width: 23%;
|
||||
}
|
||||
.cd-gallery.filter-is-visible {
|
||||
/* reduce width when filter is visible */
|
||||
width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
xfilter
|
||||
-------------------------------- */
|
||||
.cd-filter {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 280px;
|
||||
background: #ffffff;
|
||||
box-shadow: 4px 4px 20px transparent;
|
||||
z-index: 2; /* Force Hardware Acceleration in WebKit */
|
||||
-webkit-transform: translateZ(0);
|
||||
-moz-transform: translateZ(0);
|
||||
-ms-transform: translateZ(0);
|
||||
-o-transform: translateZ(0);
|
||||
transform: translateZ(0);
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
-webkit-transform: translateX(-100%);
|
||||
-moz-transform: translateX(-100%);
|
||||
-ms-transform: translateX(-100%);
|
||||
-o-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
-webkit-transition: -webkit-transform 0.3s, box-shadow 0.3s;
|
||||
-moz-transition: -moz-transform 0.3s, box-shadow 0.3s;
|
||||
transition: transform 0.3s, box-shadow 0.3s;
|
||||
}
|
||||
.cd-filter .cd-close {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 5px;
|
||||
height: 45px;
|
||||
line-height: 45px;
|
||||
width: 45px;
|
||||
color: #414142;
|
||||
font-size: 1.3rem;
|
||||
text-align: center;
|
||||
background: #fed800;
|
||||
opacity: 0;
|
||||
font-size: 20px !important;
|
||||
border-radius: 50px;
|
||||
box-shadow: 3px 1px 5px rgba(0, 0, 0, 0.1);
|
||||
-webkit-transition: opacity 0.3s;
|
||||
-moz-transition: opacity 0.3s;
|
||||
transition: opacity 0.3s;
|
||||
z-index: 3;
|
||||
}
|
||||
.no-touch .cd-filter .cd-close:hover {
|
||||
background: #32255f;
|
||||
}
|
||||
.cd-filter.filter-is-visible {
|
||||
-webkit-transform: translateX(0);
|
||||
-moz-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
-o-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.cd-filter.filter-is-visible .cd-close {
|
||||
opacity: 1;
|
||||
}
|
||||
@media only screen and (min-width: 1170px) {
|
||||
.cd-filter {
|
||||
width: 20%;
|
||||
}
|
||||
.cd-filter form {
|
||||
padding: 70px 10%;
|
||||
}
|
||||
}
|
||||
.cd-filter-trigger {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
line-height: 50px;
|
||||
width: 60px; /* image replacement */
|
||||
overflow: hidden;
|
||||
text-indent: 100%;
|
||||
color: transparent;
|
||||
white-space: nowrap;
|
||||
z-index: 3;
|
||||
}
|
||||
.cd-filter-trigger.filter-is-visible {
|
||||
pointer-events: none;
|
||||
}
|
||||
@media only screen and (min-width: 1170px) {
|
||||
.cd-filter-trigger {
|
||||
width: auto;
|
||||
text-indent: 0;
|
||||
color: #9a9a9a;
|
||||
font-size: 1.3rem;
|
||||
font-weight: 700;
|
||||
padding-left: 24px;
|
||||
background-position: left center;
|
||||
-webkit-transition: color 0.3s;
|
||||
-moz-transition: color 0.3s;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
.no-touch .cd-filter-trigger:hover {
|
||||
color: #a3d133;
|
||||
}
|
||||
.cd-filter-trigger.filter-is-visible,
|
||||
.cd-filter-trigger.filter-is-visible:hover {
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
xcustom form elements
|
||||
-------------------------------- */
|
||||
.cd-filter-block {
|
||||
position: relative;
|
||||
}
|
||||
.cd-filter-block h4 {
|
||||
/* filter block title */
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
padding: 10px 0 10px 20px;
|
||||
color: #9a9a9a;
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
font-size: 1.3rem;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
.no-touch .cd-filter-block h4:hover {
|
||||
color: #a3d133;
|
||||
}
|
||||
.cd-filter-block h4::before {
|
||||
/* arrow */
|
||||
font-family: "Font Awesome 5 Free";
|
||||
content: "\f107";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 17px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
-webkit-transform: translateY(-50%);
|
||||
-moz-transform: translateY(-50%);
|
||||
-ms-transform: translateY(-50%);
|
||||
-o-transform: translateY(-50%);
|
||||
transform: translateY(-50%);
|
||||
-webkit-transition: -webkit-transform 0.3s;
|
||||
-moz-transition: -moz-transform 0.3s;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
.cd-filter-block h4.closed::before {
|
||||
-webkit-transform: translateY(-50%) rotate(-90deg);
|
||||
-moz-transform: translateY(-50%) rotate(-90deg);
|
||||
-ms-transform: translateY(-50%) rotate(-90deg);
|
||||
-o-transform: translateY(-50%) rotate(-90deg);
|
||||
transform: translateY(-50%) rotate(-90deg);
|
||||
}
|
||||
.cd-filter-block input,
|
||||
.cd-filter-block select,
|
||||
.cd-filter-block .radio-label::before,
|
||||
.cd-filter-block .checkbox-label::before {
|
||||
/* shared style for input elements */
|
||||
font-family: "Open Sans", sans-serif;
|
||||
border-radius: 0;
|
||||
background-color: #ffffff;
|
||||
border: none;
|
||||
}
|
||||
.cd-filter-block input,
|
||||
.cd-filter-block select {
|
||||
width: 100%;
|
||||
padding: 15px 60px 15px 30px;
|
||||
border-radius: 50px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
background-color: #ffffff !important;
|
||||
border: solid 1px #fcb813 !important;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
-ms-appearance: none;
|
||||
-o-appearance: none;
|
||||
appearance: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.cd-filter-block input:hover,
|
||||
.cd-filter-block select:hover {
|
||||
-webkit-transition: 0.3s;
|
||||
-moz-transition: 0.3s;
|
||||
-ms-transition: 0.3s;
|
||||
-o-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
}
|
||||
.cd-filter-block label i {
|
||||
font-size: 20px;
|
||||
color: #d8d8d8;
|
||||
top: 42px;
|
||||
right: 40px;
|
||||
position: absolute;
|
||||
}
|
||||
.cd-filter-block input:focus,
|
||||
.cd-filter-block select:focus {
|
||||
outline: none;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.cd-filter-block input {
|
||||
/* custom style for the search element */
|
||||
border-color: transparent;
|
||||
background-color: #e6e6e6; /* prevent jump - ios devices */
|
||||
}
|
||||
.cd-filter-block input::-webkit-search-cancel-button {
|
||||
display: none;
|
||||
}
|
||||
.cd-filter-block .cd-select {
|
||||
/* select element wrapper */
|
||||
position: relative;
|
||||
}
|
||||
.cd-filter-block .cd-select::after {
|
||||
/* switcher arrow for select element */
|
||||
content: "";
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
right: 30px;
|
||||
top: 27px;
|
||||
-webkit-transform: translateY(-50%);
|
||||
-moz-transform: translateY(-50%);
|
||||
-ms-transform: translateY(-50%);
|
||||
-o-transform: translateY(-50%);
|
||||
transform: translateY(-50%);
|
||||
display: block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: url("../img/filter/cd-icon-arrow.svg") no-repeat center center;
|
||||
pointer-events: none;
|
||||
}
|
||||
.cd-filter-block select::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
.cd-filter-block .list li {
|
||||
position: relative;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
.cd-filter-block .list li:last-of-type {
|
||||
margin-bottom: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.cd-filter-block input[type="radio"],
|
||||
.cd-filter-block input[type="checkbox"] {
|
||||
/* hide original check and radio buttons */
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
opacity: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
.cd-filter-block .checkbox-label,
|
||||
.cd-filter-block .radio-label {
|
||||
padding-left: 24px;
|
||||
font-size: 1.4rem;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.cd-filter-block .checkbox-label::before,
|
||||
.cd-filter-block .checkbox-label::after,
|
||||
.cd-filter-block .radio-label::before,
|
||||
.cd-filter-block .radio-label::after {
|
||||
/* custom radio and check boxes */
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
-webkit-transform: translateY(-50%);
|
||||
-moz-transform: translateY(-50%);
|
||||
-ms-transform: translateY(-50%);
|
||||
-o-transform: translateY(-50%);
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
.cd-filter-block .checkbox-label::before,
|
||||
.cd-filter-block .radio-label::before {
|
||||
width: 19px;
|
||||
height: 18px;
|
||||
margin-left: 0;
|
||||
}
|
||||
.cd-filter-block .checkbox-label::after,
|
||||
.cd-filter-block .radio-label::after {
|
||||
/* check mark - hidden */
|
||||
display: none;
|
||||
}
|
||||
.cd-filter-block .checkbox-label::after {
|
||||
/* check mark style for check boxes */
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
/* background: url("../img/filter/cd-icon-check.svg") no-repeat center center; */
|
||||
}
|
||||
.cd-filter-block .radio-label::before,
|
||||
.cd-filter-block .radio-label::after {
|
||||
border-radius: 50%;
|
||||
}
|
||||
.cd-filter-block .radio-label::after {
|
||||
/* check mark style for radio buttons */
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
background: linear-gradient(0deg, #fcb813 45.31%, #fcdb26 100%) !important;
|
||||
left: 5px;
|
||||
border: 2px solid black;
|
||||
}
|
||||
.cd-filter-block input[type="radio"]:checked + label::before,
|
||||
.cd-filter-block input[type="checkbox"]:checked + label::before {
|
||||
border-color: #a3d133;
|
||||
background-color: #a3d133;
|
||||
}
|
||||
.cd-filter-block input[type="radio"]:checked + label::after,
|
||||
.cd-filter-block input[type="checkbox"]:checked + label::after {
|
||||
display: block;
|
||||
/* background-color: red; */
|
||||
}
|
||||
#ex1Slider .slider-selection {
|
||||
background: #bababa;
|
||||
}
|
||||
.tooltip.in {
|
||||
filter: alpha(opacity=90);
|
||||
opacity: 0.9;
|
||||
}
|
||||
.tooltip.top .tooltip-arrow {
|
||||
bottom: -5px;
|
||||
left: 50%;
|
||||
margin-left: -5px;
|
||||
border-width: 5px 5px 0;
|
||||
border-top-color: #000;
|
||||
}
|
||||
.tooltip-arrow {
|
||||
position: absolute;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
ol,
|
||||
ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote,
|
||||
q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before,
|
||||
blockquote:after,
|
||||
q:before,
|
||||
q:after {
|
||||
content: "";
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
Custom
|
||||
-------------------------------- */
|
||||
.cd-gallery {
|
||||
padding: 50px 0px 0px 0px;
|
||||
}
|
||||
.cd-gallery li {
|
||||
box-shadow: none;
|
||||
}
|
||||
.cd-gallery .wrapper .title {
|
||||
font-size: 18px;
|
||||
font-family: "Open Sans";
|
||||
}
|
||||
.cd-gallery.domains .wrapper .title {
|
||||
font-size: 32px;
|
||||
font-family: "Open Sans";
|
||||
}
|
||||
.cd-tab-filter a.selected {
|
||||
border: none !important;
|
||||
background: #fdd700 !important;
|
||||
color: #fff !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
.cd-tab-filter a.selected:hover {
|
||||
text-transform: none !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.cd-tab-filter a {
|
||||
text-transform: none;
|
||||
font-size: 15px !important;
|
||||
font-family: "Open Sans";
|
||||
color: #808080;
|
||||
}
|
||||
.no-touch .cd-tab-filter a:hover {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.no-touch .cd-filter .cd-close:hover {
|
||||
background-color: #313131 !important;
|
||||
text-decoration: none !important;
|
||||
-webkit-transition: 0.3s;
|
||||
-moz-transition: 0.3s;
|
||||
-ms-transition: 0.3s;
|
||||
-o-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
}
|
||||
.cd-filter.filter-is-visible {
|
||||
font-family: "Open Sans";
|
||||
box-shadow: 2px 1px 10px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.cd-filter-block h4 {
|
||||
text-transform: capitalize !important;
|
||||
font-weight: 600 !important;
|
||||
font-size: 16px !important;
|
||||
color: #212122 !important;
|
||||
}
|
||||
.cd-filter-block .cd-filter-content input[type="search"] {
|
||||
border: solid 1px #e0e0e0;
|
||||
font-size: 14px !important;
|
||||
background: transparent;
|
||||
}
|
||||
.cd-filter-block .cd-filter-content {
|
||||
padding: 0px;
|
||||
}
|
||||
.cd-filter-block .checkbox-label::before,
|
||||
.cd-filter-block .radio-label::before {
|
||||
border: none;
|
||||
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;
|
||||
}
|
||||
.cd-filter-block .checkbox-label,
|
||||
.cd-filter-block .radio-label {
|
||||
position: relative;
|
||||
display: grid !important;
|
||||
font-size: 16px !important;
|
||||
color: #000;
|
||||
}
|
||||
.action-content {
|
||||
position: relative;
|
||||
}
|
||||
.action {
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
top: 0 !important;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
border-radius: 15px;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
top: 0px;
|
||||
text-align: center;
|
||||
opacity: 0;
|
||||
transition: all 0.3s;
|
||||
z-index: 1;
|
||||
}
|
||||
.action:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
.action a {
|
||||
margin-right: 20px;
|
||||
font-size: 16px;
|
||||
color: #fff;
|
||||
}
|
||||
.action a:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
.action a:hover {
|
||||
color: #fdd700;
|
||||
text-decoration: none;
|
||||
}
|
||||
.action a i {
|
||||
color: #fff;
|
||||
font-size: 32px;
|
||||
padding: 0px;
|
||||
}
|
||||
.action a i:hover {
|
||||
color: #fdd700;
|
||||
text-decoration: none;
|
||||
-webkit-transition: 0.3s;
|
||||
-moz-transition: 0.3s;
|
||||
-ms-transition: 0.3s;
|
||||
-o-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
}
|
||||
.action .metatag {
|
||||
position: relative;
|
||||
top: 50%;
|
||||
-webkit-transform: translateY(-50%);
|
||||
-ms-transform: translateY(-50%);
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
.action .rating {
|
||||
font-size: 24px;
|
||||
padding-top: 15px;
|
||||
width: 100%;
|
||||
}
|
||||
.action .rating i {
|
||||
font-size: 18px;
|
||||
color: #808080;
|
||||
padding: 2px;
|
||||
}
|
||||
.action .rating i:hover {
|
||||
color: #fdd700;
|
||||
text-decoration: none;
|
||||
-webkit-transition: 0.3s;
|
||||
-moz-transition: 0.3s;
|
||||
-ms-transition: 0.3s;
|
||||
-o-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
}
|
||||
6319
static/felcloud/website/css/style.min.css
vendored
Normal file
6319
static/felcloud/website/css/style.min.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
532
static/felcloud/website/css/swiper.min.css
vendored
Normal file
532
static/felcloud/website/css/swiper.min.css
vendored
Normal file
@ -0,0 +1,532 @@
|
||||
/**
|
||||
* Swiper 5.1.0
|
||||
* Most modern mobile touch slider and framework with hardware accelerated transitions
|
||||
* http://swiperjs.com
|
||||
* Copyright 2014-2019 Vladimir Kharlampidi
|
||||
* Released under the MIT License
|
||||
* Released on: October 16, 2019
|
||||
*/
|
||||
@font-face {
|
||||
font-family: swiper-icons;
|
||||
src: url("data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA")
|
||||
format("woff");
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
:root {
|
||||
--swiper-theme-color: #007aff;
|
||||
}
|
||||
.swiper-container {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-wrapper {
|
||||
flex-direction: column;
|
||||
}
|
||||
.swiper-wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
transition-property: transform;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
.swiper-container-android .swiper-slide,
|
||||
.swiper-wrapper {
|
||||
transform: translate3d(0px, 0, 0);
|
||||
}
|
||||
.swiper-container-multirow > .swiper-wrapper {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.swiper-container-multirow-column > .swiper-wrapper {
|
||||
flex-wrap: wrap;
|
||||
flex-direction: column;
|
||||
}
|
||||
.swiper-container-free-mode > .swiper-wrapper {
|
||||
transition-timing-function: ease-out;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.swiper-slide {
|
||||
flex-shrink: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
transition-property: transform;
|
||||
}
|
||||
.swiper-slide-invisible-blank {
|
||||
visibility: hidden;
|
||||
}
|
||||
.swiper-container-autoheight,
|
||||
.swiper-container-autoheight .swiper-slide {
|
||||
height: auto;
|
||||
}
|
||||
.swiper-container-autoheight .swiper-wrapper {
|
||||
align-items: flex-start;
|
||||
transition-property: transform, height;
|
||||
}
|
||||
.swiper-container-3d {
|
||||
perspective: 1200px;
|
||||
}
|
||||
.swiper-container-3d .swiper-cube-shadow,
|
||||
.swiper-container-3d .swiper-slide,
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom,
|
||||
.swiper-container-3d .swiper-slide-shadow-left,
|
||||
.swiper-container-3d .swiper-slide-shadow-right,
|
||||
.swiper-container-3d .swiper-slide-shadow-top,
|
||||
.swiper-container-3d .swiper-wrapper {
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom,
|
||||
.swiper-container-3d .swiper-slide-shadow-left,
|
||||
.swiper-container-3d .swiper-slide-shadow-right,
|
||||
.swiper-container-3d .swiper-slide-shadow-top {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
z-index: 10;
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-left {
|
||||
background-image: linear-gradient(
|
||||
to left,
|
||||
rgba(0, 0, 0, 0.5),
|
||||
rgba(0, 0, 0, 0)
|
||||
);
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-right {
|
||||
background-image: linear-gradient(
|
||||
to right,
|
||||
rgba(0, 0, 0, 0.5),
|
||||
rgba(0, 0, 0, 0)
|
||||
);
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-top {
|
||||
background-image: linear-gradient(
|
||||
to top,
|
||||
rgba(0, 0, 0, 0.5),
|
||||
rgba(0, 0, 0, 0)
|
||||
);
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom {
|
||||
background-image: linear-gradient(
|
||||
to bottom,
|
||||
rgba(0, 0, 0, 0.5),
|
||||
rgba(0, 0, 0, 0)
|
||||
);
|
||||
}
|
||||
.swiper-container-css-mode > .swiper-wrapper {
|
||||
overflow: auto;
|
||||
scrollbar-width: none;
|
||||
-ms-overflow-style: none;
|
||||
}
|
||||
.swiper-container-css-mode > .swiper-wrapper::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
.swiper-container-css-mode > .swiper-wrapper > .swiper-slide {
|
||||
scroll-snap-align: start start;
|
||||
}
|
||||
.swiper-container-horizontal.swiper-container-css-mode > .swiper-wrapper {
|
||||
scroll-snap-type: x mandatory;
|
||||
}
|
||||
.swiper-container-vertical.swiper-container-css-mode > .swiper-wrapper {
|
||||
scroll-snap-type: y mandatory;
|
||||
}
|
||||
:root {
|
||||
--swiper-navigation-size: 44px;
|
||||
}
|
||||
.swiper-button-next,
|
||||
.swiper-button-prev {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: calc(var(--swiper-navigation-size) / 44 * 27);
|
||||
height: var(--swiper-navigation-size);
|
||||
margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
|
||||
z-index: 10;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--swiper-navigation-color, var(--swiper-theme-color));
|
||||
}
|
||||
.swiper-button-next.swiper-button-disabled,
|
||||
.swiper-button-prev.swiper-button-disabled {
|
||||
opacity: 0.35;
|
||||
cursor: auto;
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-button-next:after,
|
||||
.swiper-button-prev:after {
|
||||
font-family: swiper-icons;
|
||||
font-size: var(--swiper-navigation-size);
|
||||
text-transform: none !important;
|
||||
}
|
||||
.swiper-button-prev,
|
||||
.swiper-container-rtl .swiper-button-next {
|
||||
left: 10px;
|
||||
right: auto;
|
||||
}
|
||||
.swiper-button-prev:after,
|
||||
.swiper-container-rtl .swiper-button-next:after {
|
||||
content: "prev";
|
||||
}
|
||||
.swiper-button-next,
|
||||
.swiper-container-rtl .swiper-button-prev {
|
||||
right: 10px;
|
||||
left: auto;
|
||||
}
|
||||
.swiper-button-next:after,
|
||||
.swiper-container-rtl .swiper-button-prev:after {
|
||||
content: "next";
|
||||
}
|
||||
.swiper-button-next.swiper-button-white,
|
||||
.swiper-button-prev.swiper-button-white {
|
||||
--swiper-navigation-color: #ffffff;
|
||||
}
|
||||
.swiper-button-next.swiper-button-black,
|
||||
.swiper-button-prev.swiper-button-black {
|
||||
--swiper-navigation-color: #000000;
|
||||
}
|
||||
.swiper-button-lock {
|
||||
display: none;
|
||||
}
|
||||
.swiper-pagination {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
transition: 0.3s opacity;
|
||||
transform: translate3d(0, 0, 0);
|
||||
z-index: 10;
|
||||
}
|
||||
.swiper-pagination.swiper-pagination-hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-pagination-bullets,
|
||||
.swiper-pagination-custom,
|
||||
.swiper-pagination-fraction {
|
||||
bottom: 10px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.swiper-pagination-bullets-dynamic {
|
||||
overflow: hidden;
|
||||
font-size: 0;
|
||||
}
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
||||
transform: scale(0.33);
|
||||
position: relative;
|
||||
}
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
|
||||
transform: scale(1);
|
||||
}
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
|
||||
transform: scale(1);
|
||||
}
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
|
||||
transform: scale(0.66);
|
||||
}
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
|
||||
transform: scale(0.33);
|
||||
}
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
|
||||
transform: scale(0.66);
|
||||
}
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
|
||||
transform: scale(0.33);
|
||||
}
|
||||
.swiper-pagination-bullet {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
display: inline-block;
|
||||
border-radius: 100%;
|
||||
background: #000;
|
||||
opacity: 0.2;
|
||||
}
|
||||
button.swiper-pagination-bullet {
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-shadow: none;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
.swiper-pagination-clickable .swiper-pagination-bullet {
|
||||
cursor: pointer;
|
||||
}
|
||||
.swiper-pagination-bullet-active {
|
||||
opacity: 1;
|
||||
background: var(--swiper-pagination-color, var(--swiper-theme-color));
|
||||
}
|
||||
.swiper-container-vertical > .swiper-pagination-bullets {
|
||||
right: 10px;
|
||||
top: 50%;
|
||||
transform: translate3d(0px, -50%, 0);
|
||||
}
|
||||
.swiper-container-vertical
|
||||
> .swiper-pagination-bullets
|
||||
.swiper-pagination-bullet {
|
||||
margin: 6px 0;
|
||||
display: block;
|
||||
}
|
||||
.swiper-container-vertical
|
||||
> .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 8px;
|
||||
}
|
||||
.swiper-container-vertical
|
||||
> .swiper-pagination-bullets.swiper-pagination-bullets-dynamic
|
||||
.swiper-pagination-bullet {
|
||||
display: inline-block;
|
||||
transition: 0.2s transform, 0.2s top;
|
||||
}
|
||||
.swiper-container-horizontal
|
||||
> .swiper-pagination-bullets
|
||||
.swiper-pagination-bullet {
|
||||
margin: 0 4px;
|
||||
}
|
||||
.swiper-container-horizontal
|
||||
> .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
.swiper-container-horizontal
|
||||
> .swiper-pagination-bullets.swiper-pagination-bullets-dynamic
|
||||
.swiper-pagination-bullet {
|
||||
transition: 0.2s transform, 0.2s left;
|
||||
}
|
||||
.swiper-container-horizontal.swiper-container-rtl
|
||||
> .swiper-pagination-bullets-dynamic
|
||||
.swiper-pagination-bullet {
|
||||
transition: 0.2s transform, 0.2s right;
|
||||
}
|
||||
.swiper-pagination-progressbar {
|
||||
background: rgba(0, 0, 0, 0.25);
|
||||
position: absolute;
|
||||
}
|
||||
.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
|
||||
background: var(--swiper-pagination-color, var(--swiper-theme-color));
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transform: scale(0);
|
||||
transform-origin: left top;
|
||||
}
|
||||
.swiper-container-rtl
|
||||
.swiper-pagination-progressbar
|
||||
.swiper-pagination-progressbar-fill {
|
||||
transform-origin: right top;
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-pagination-progressbar,
|
||||
.swiper-container-vertical
|
||||
> .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
|
||||
width: 100%;
|
||||
height: 4px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.swiper-container-horizontal
|
||||
> .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,
|
||||
.swiper-container-vertical > .swiper-pagination-progressbar {
|
||||
width: 4px;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.swiper-pagination-white {
|
||||
--swiper-pagination-color: #ffffff;
|
||||
}
|
||||
.swiper-pagination-black {
|
||||
--swiper-pagination-color: #000000;
|
||||
}
|
||||
.swiper-pagination-lock {
|
||||
display: none;
|
||||
}
|
||||
.swiper-scrollbar {
|
||||
border-radius: 10px;
|
||||
position: relative;
|
||||
-ms-touch-action: none;
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-scrollbar {
|
||||
position: absolute;
|
||||
left: 1%;
|
||||
bottom: 3px;
|
||||
z-index: 50;
|
||||
height: 5px;
|
||||
width: 98%;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-scrollbar {
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
top: 1%;
|
||||
z-index: 50;
|
||||
width: 5px;
|
||||
height: 98%;
|
||||
}
|
||||
.swiper-scrollbar-drag {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
border-radius: 10px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.swiper-scrollbar-cursor-drag {
|
||||
cursor: move;
|
||||
}
|
||||
.swiper-scrollbar-lock {
|
||||
display: none;
|
||||
}
|
||||
.swiper-zoom-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
.swiper-zoom-container > canvas,
|
||||
.swiper-zoom-container > img,
|
||||
.swiper-zoom-container > svg {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
.swiper-slide-zoomed {
|
||||
cursor: move;
|
||||
}
|
||||
.swiper-lazy-preloader {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin-left: -21px;
|
||||
margin-top: -21px;
|
||||
z-index: 10;
|
||||
transform-origin: 50%;
|
||||
animation: swiper-preloader-spin 1s infinite linear;
|
||||
box-sizing: border-box;
|
||||
border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
|
||||
border-radius: 50%;
|
||||
border-top-color: transparent;
|
||||
}
|
||||
.swiper-lazy-preloader-white {
|
||||
--swiper-preloader-color: #fff;
|
||||
}
|
||||
.swiper-lazy-preloader-black {
|
||||
--swiper-preloader-color: #000;
|
||||
}
|
||||
@keyframes swiper-preloader-spin {
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
.swiper-container .swiper-notification {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
z-index: -1000;
|
||||
}
|
||||
.swiper-container-fade.swiper-container-free-mode .swiper-slide {
|
||||
transition-timing-function: ease-out;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide {
|
||||
pointer-events: none;
|
||||
transition-property: opacity;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide-active,
|
||||
.swiper-container-fade .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
.swiper-container-cube {
|
||||
overflow: visible;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide {
|
||||
pointer-events: none;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
z-index: 1;
|
||||
visibility: hidden;
|
||||
transform-origin: 0 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-container-cube.swiper-container-rtl .swiper-slide {
|
||||
transform-origin: 100% 0;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide-active,
|
||||
.swiper-container-cube .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide-active,
|
||||
.swiper-container-cube .swiper-slide-next,
|
||||
.swiper-container-cube .swiper-slide-next + .swiper-slide,
|
||||
.swiper-container-cube .swiper-slide-prev {
|
||||
pointer-events: auto;
|
||||
visibility: visible;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide-shadow-bottom,
|
||||
.swiper-container-cube .swiper-slide-shadow-left,
|
||||
.swiper-container-cube .swiper-slide-shadow-right,
|
||||
.swiper-container-cube .swiper-slide-shadow-top {
|
||||
z-index: 0;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
.swiper-container-cube .swiper-cube-shadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
opacity: 0.6;
|
||||
-webkit-filter: blur(50px);
|
||||
filter: blur(50px);
|
||||
z-index: 0;
|
||||
}
|
||||
.swiper-container-flip {
|
||||
overflow: visible;
|
||||
}
|
||||
.swiper-container-flip .swiper-slide {
|
||||
pointer-events: none;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
z-index: 1;
|
||||
}
|
||||
.swiper-container-flip .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-container-flip .swiper-slide-active,
|
||||
.swiper-container-flip .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
.swiper-container-flip .swiper-slide-shadow-bottom,
|
||||
.swiper-container-flip .swiper-slide-shadow-left,
|
||||
.swiper-container-flip .swiper-slide-shadow-right,
|
||||
.swiper-container-flip .swiper-slide-shadow-top {
|
||||
z-index: 0;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
304
static/felcloud/website/fonts/cloudicon/cloudicon.css
Normal file
304
static/felcloud/website/fonts/cloudicon/cloudicon.css
Normal file
@ -0,0 +1,304 @@
|
||||
@font-face { font-family: 'Cloudicon'; src: url('../../fonts/cloudicon/Cloudicon.eot?h7rmut'); src: url('../../fonts/cloudicon/Cloudicon.eot?h7rmut#iefix') format('embedded-opentype'), url('../../fonts/cloudicon/Cloudicon.ttf?h7rmut') format('truetype'), url('../../fonts/cloudicon/Cloudicon.woff?h7rmut') format('woff'), url('../../fonts/cloudicon/Cloudicon.svg?h7rmut#Cloudicon') format('svg'); font-weight: normal; font-style: normal; }
|
||||
[Cloudicon]:before { font-family: 'Cloudicon'; content: attr(Cloudicon); speak: none; }
|
||||
[class^="icon-"], [class*=" icon-"] { /* use !important to prevent issues with browser extensions that change fonts */
|
||||
font-family: 'Cloudicon' !important; color: #808080; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; /* Better Font Rendering =========== */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
|
||||
.icon-add:before { content: "\e900"; }
|
||||
.icon-aid:before { content: "\e901"; }
|
||||
.icon-alarm:before { content: "\e902"; }
|
||||
.icon-alert:before { content: "\e903"; }
|
||||
.icon-alpha:before { content: "\e904"; }
|
||||
.icon-analytics:before { content: "\e905"; }
|
||||
.icon-android:before { content: "\e906"; }
|
||||
.icon-apple:before { content: "\e907"; }
|
||||
.icon-audio:before { content: "\e908"; }
|
||||
.icon-award:before { content: "\e909"; }
|
||||
.icon-ballon:before { content: "\e90a"; }
|
||||
.icon-basketshop:before { content: "\e90b"; }
|
||||
.icon-battery:before { content: "\e90c"; }
|
||||
.icon-bell:before { content: "\e90d"; }
|
||||
.icon-bitcoin:before { content: "\e90e"; }
|
||||
.icon-blog:before { content: "\e90f"; }
|
||||
.icon-bluetooth:before { content: "\e910"; }
|
||||
.icon-book:before { content: "\e911"; }
|
||||
.icon-bookmark:before { content: "\e912"; }
|
||||
.icon-branch:before { content: "\e913"; }
|
||||
.icon-briefcase:before { content: "\e914"; }
|
||||
.icon-browser:before { content: "\e915"; }
|
||||
.icon-brush:before { content: "\e916"; }
|
||||
.icon-bubble:before { content: "\e917"; }
|
||||
.icon-builder:before { content: "\e918"; }
|
||||
.icon-bulb:before { content: "\e919"; }
|
||||
.icon-businesman:before { content: "\e91a"; }
|
||||
.icon-calendar:before { content: "\e91b"; }
|
||||
.icon-card:before { content: "\e91c"; }
|
||||
.icon-cart:before { content: "\e91d"; }
|
||||
.icon-cartdown:before { content: "\e91e"; }
|
||||
.icon-cartnull:before { content: "\e91f"; }
|
||||
.icon-cartup:before { content: "\e920"; }
|
||||
.icon-cctv:before { content: "\e921"; }
|
||||
.icon-center:before { content: "\e922"; }
|
||||
.icon-ceo:before { content: "\e923"; }
|
||||
.icon-chart:before { content: "\e924"; }
|
||||
.icon-check:before { content: "\e925"; }
|
||||
.icon-clip:before { content: "\e926"; }
|
||||
.icon-clock:before { content: "\e927"; }
|
||||
.icon-close:before { content: "\e928"; }
|
||||
.icon-cloud:before { content: "\e929"; }
|
||||
.icon-cloudconnect:before { content: "\e92a"; }
|
||||
.icon-cloudfast:before { content: "\e92b"; }
|
||||
.icon-cloudfiber:before { content: "\e92c"; }
|
||||
.icon-cloudlinux:before { content: "\e92d"; }
|
||||
.icon-cloudmanaged:before { content: "\e92e"; }
|
||||
.icon-cloudown:before { content: "\e92f"; }
|
||||
.icon-cloudowner:before { content: "\e930"; }
|
||||
.icon-cloudsecurity:before { content: "\e931"; }
|
||||
.icon-cloudserver:before { content: "\e932"; }
|
||||
.icon-cloudup:before { content: "\e933"; }
|
||||
.icon-cloudwindows:before { content: "\e934"; }
|
||||
.icon-cluster:before { content: "\e935"; }
|
||||
.icon-code:before { content: "\e936"; }
|
||||
.icon-coffe:before { content: "\e937"; }
|
||||
.icon-color:before { content: "\e938"; }
|
||||
.icon-compare:before { content: "\e939"; }
|
||||
.icon-compass:before { content: "\e93a"; }
|
||||
.icon-container:before { content: "\e93b"; }
|
||||
.icon-coupon:before { content: "\e93c"; }
|
||||
.icon-cpu:before { content: "\e93d"; }
|
||||
.icon-crown:before { content: "\e93e"; }
|
||||
.icon-danger:before { content: "\e93f"; }
|
||||
.icon-database:before { content: "\e940"; }
|
||||
.icon-dedicated:before { content: "\e941"; }
|
||||
.icon-delete:before { content: "\e942"; }
|
||||
.icon-designed:before { content: "\e943"; }
|
||||
.icon-desktop:before { content: "\e944"; }
|
||||
.icon-device:before { content: "\e945"; }
|
||||
.icon-diagram:before { content: "\e946"; }
|
||||
.icon-diamond:before { content: "\e947"; }
|
||||
.icon-direction:before { content: "\e948"; }
|
||||
.icon-directions:before { content: "\e949"; }
|
||||
.icon-disabled:before { content: "\e94a"; }
|
||||
.icon-diskette:before { content: "\e94b"; }
|
||||
.icon-display:before { content: "\e94c"; }
|
||||
.icon-docbox:before { content: "\e94d"; }
|
||||
.icon-document:before { content: "\e94e"; }
|
||||
.icon-dollar:before { content: "\e94f"; }
|
||||
.icon-domains:before { content: "\e950"; }
|
||||
.icon-domainserver:before { content: "\e951"; }
|
||||
.icon-doubleleft:before { content: "\e952"; }
|
||||
.icon-doubleright:before { content: "\e953"; }
|
||||
.icon-download:before { content: "\e954"; }
|
||||
.icon-dribbble:before { content: "\e955"; }
|
||||
.icon-drink:before { content: "\e956"; }
|
||||
.icon-drives:before { content: "\e957"; }
|
||||
.icon-drivessd:before { content: "\e958"; }
|
||||
.icon-drone:before { content: "\e959"; }
|
||||
.icon-drop:before { content: "\e95a"; }
|
||||
.icon-dropbox:before { content: "\e95b"; }
|
||||
.icon-duality:before { content: "\e95c"; }
|
||||
.icon-dvd:before { content: "\e95d"; }
|
||||
.icon-eco:before { content: "\e95e"; }
|
||||
.icon-ecommerce:before { content: "\e95f"; }
|
||||
.icon-editable:before { content: "\e960"; }
|
||||
.icon-email:before { content: "\e961"; }
|
||||
.icon-emailopen:before { content: "\e962"; }
|
||||
.icon-empty:before { content: "\e963"; }
|
||||
.icon-energy:before { content: "\e964"; }
|
||||
.icon-euro:before { content: "\e965"; }
|
||||
.icon-eye:before { content: "\e966"; }
|
||||
.icon-facebook:before { content: "\e967"; }
|
||||
.icon-factory:before { content: "\e968"; }
|
||||
.icon-favorite:before { content: "\e969"; }
|
||||
.icon-features:before { content: "\e96a"; }
|
||||
.icon-female:before { content: "\e96b"; }
|
||||
.icon-filter:before { content: "\e96c"; }
|
||||
.icon-financial:before { content: "\e96d"; }
|
||||
.icon-firewall:before { content: "\e96e"; }
|
||||
.icon-flagpoint:before { content: "\e96f"; }
|
||||
.icon-flash:before { content: "\e970"; }
|
||||
.icon-folder:before { content: "\e971"; }
|
||||
.icon-free:before { content: "\e972"; }
|
||||
.icon-freenetwork:before { content: "\e973"; }
|
||||
.icon-frequency:before { content: "\e974"; }
|
||||
.icon-full:before { content: "\e975"; }
|
||||
.icon-fullscreen:before { content: "\e976"; }
|
||||
.icon-gaming:before { content: "\e977"; }
|
||||
.icon-gift:before { content: "\e978"; }
|
||||
.icon-git:before { content: "\e979"; }
|
||||
.icon-github:before { content: "\e97a"; }
|
||||
.icon-glasses:before { content: "\e97b"; }
|
||||
.icon-global:before { content: "\e97c"; }
|
||||
.icon-globe:before { content: "\e97d"; }
|
||||
.icon-goal:before { content: "\e97e"; }
|
||||
.icon-googleplus:before { content: "\e97f"; }
|
||||
.icon-graduation:before { content: "\e980"; }
|
||||
.icon-grow:before { content: "\e981"; }
|
||||
.icon-hand:before { content: "\e982"; }
|
||||
.icon-hat:before { content: "\e983"; }
|
||||
.icon-headphones:before { content: "\e984"; }
|
||||
.icon-helpdesk:before { content: "\e985"; }
|
||||
.icon-hierarchy:before { content: "\e986"; }
|
||||
.icon-house:before { content: "\e987"; }
|
||||
.icon-housebird:before { content: "\e988"; }
|
||||
.icon-html5:before { content: "\e989"; }
|
||||
.icon-inbox:before { content: "\e98a"; }
|
||||
.icon-index:before { content: "\e98b"; }
|
||||
.icon-indicateleft:before { content: "\e98c"; }
|
||||
.icon-indicateright:before { content: "\e98d"; }
|
||||
.icon-infrastructure:before { content: "\e98e"; }
|
||||
.icon-Instagram:before { content: "\e98f"; }
|
||||
.icon-interface:before { content: "\e990"; }
|
||||
.icon-internet:before { content: "\e991"; }
|
||||
.icon-inverse:before { content: "\e992"; }
|
||||
.icon-key:before { content: "\e993"; }
|
||||
.icon-label:before { content: "\e994"; }
|
||||
.icon-laptop:before { content: "\e995"; }
|
||||
.icon-latency:before { content: "\e996"; }
|
||||
.icon-law:before { content: "\e997"; }
|
||||
.icon-layers:before { content: "\e998"; }
|
||||
.icon-learning:before { content: "\e999"; }
|
||||
.icon-led:before { content: "\e99a"; }
|
||||
.icon-left:before { content: "\e99b"; }
|
||||
.icon-less:before { content: "\e99c"; }
|
||||
.icon-link:before { content: "\e99d"; }
|
||||
.icon-linkedin:before { content: "\e99e"; }
|
||||
.icon-linux:before { content: "\e99f"; }
|
||||
.icon-linuxserver:before { content: "\e9a0"; }
|
||||
.icon-livechat:before { content: "\e9a1"; }
|
||||
.icon-location:before { content: "\e9a2"; }
|
||||
.icon-lock:before { content: "\e9a3"; }
|
||||
.icon-log:before { content: "\e9a4"; }
|
||||
.icon-magnetic:before { content: "\e9a5"; }
|
||||
.icon-mailbox:before { content: "\e9a6"; }
|
||||
.icon-maintenance:before { content: "\e9a7"; }
|
||||
.icon-man:before { content: "\e9a8"; }
|
||||
.icon-managedserver:before { content: "\e9a9"; }
|
||||
.icon-map:before { content: "\e9aa"; }
|
||||
.icon-medal:before { content: "\e9ab"; }
|
||||
.icon-meeting:before { content: "\e9ac"; }
|
||||
.icon-megaphone:before { content: "\e9ad"; }
|
||||
.icon-menu:before { content: "\e9ae"; }
|
||||
.icon-metric:before { content: "\e9af"; }
|
||||
.icon-mobile:before { content: "\e9b0"; }
|
||||
.icon-money:before { content: "\e9b1"; }
|
||||
.icon-monitor:before { content: "\e9b2"; }
|
||||
.icon-mouse:before { content: "\e9b3"; }
|
||||
.icon-move:before { content: "\e9b4"; }
|
||||
.icon-movie:before { content: "\e9b5"; }
|
||||
.icon-music:before { content: "\e9b6"; }
|
||||
.icon-mute:before { content: "\e9b7"; }
|
||||
.icon-navigation:before { content: "\e9b8"; }
|
||||
.icon-network:before { content: "\e9b9"; }
|
||||
.icon-notes:before { content: "\e9ba"; }
|
||||
.icon-objective:before { content: "\e9bb"; }
|
||||
.icon-on:before { content: "\e9bc"; }
|
||||
.icon-pacman:before { content: "\e9bd"; }
|
||||
.icon-paper:before { content: "\e9be"; }
|
||||
.icon-paypal:before { content: "\e9bf"; }
|
||||
.icon-phone:before { content: "\e9c0"; }
|
||||
.icon-pic:before { content: "\e9c1"; }
|
||||
.icon-pin:before { content: "\e9c2"; }
|
||||
.icon-pinterest:before { content: "\e9c3"; }
|
||||
.icon-placard:before { content: "\e9c4"; }
|
||||
.icon-plane:before { content: "\e9c5"; }
|
||||
.icon-play:before { content: "\e9c6"; }
|
||||
.icon-playstore:before { content: "\e9c7"; }
|
||||
.icon-plug:before { content: "\e9c8"; }
|
||||
.icon-plus:before { content: "\e9c9"; }
|
||||
.icon-point:before { content: "\e9ca"; }
|
||||
.icon-points:before { content: "\e9cb"; }
|
||||
.icon-pound:before { content: "\e9cc"; }
|
||||
.icon-preferences:before { content: "\e9cd"; }
|
||||
.icon-print:before { content: "\e9ce"; }
|
||||
.icon-privacy:before { content: "\e9cf"; }
|
||||
.icon-private:before { content: "\e9d0"; }
|
||||
.icon-progress:before { content: "\e9d1"; }
|
||||
.icon-protected:before { content: "\e9d2"; }
|
||||
.icon-protection:before { content: "\e9d3"; }
|
||||
.icon-qrcode:before { content: "\e9d4"; }
|
||||
.icon-question:before { content: "\e9d5"; }
|
||||
.icon-rack:before { content: "\e9d6"; }
|
||||
.icon-ram:before { content: "\e9d7"; }
|
||||
.icon-random:before { content: "\e9d8"; }
|
||||
.icon-rate:before { content: "\e9d9"; }
|
||||
.icon-recycle:before { content: "\e9da"; }
|
||||
.icon-redundancy:before { content: "\e9db"; }
|
||||
.icon-refresh:before { content: "\e9dc"; }
|
||||
.icon-regression:before { content: "\e9dd"; }
|
||||
.icon-reload:before { content: "\e9de"; }
|
||||
.icon-repair:before { content: "\e9df"; }
|
||||
.icon-report:before { content: "\e9e0"; }
|
||||
.icon-reseller:before { content: "\e9e1"; }
|
||||
.icon-resize:before { content: "\e9e2"; }
|
||||
.icon-ribbon:before { content: "\e9e3"; }
|
||||
.icon-right:before { content: "\e9e4"; }
|
||||
.icon-robot:before { content: "\e9e5"; }
|
||||
.icon-router:before { content: "\e9e6"; }
|
||||
.icon-sad:before { content: "\e9e7"; }
|
||||
.icon-savings:before { content: "\e9e8"; }
|
||||
.icon-science:before { content: "\e9e9"; }
|
||||
.icon-security:before { content: "\e9ea"; }
|
||||
.icon-select:before { content: "\e9eb"; }
|
||||
.icon-servers:before { content: "\e9ec"; }
|
||||
.icon-settings:before { content: "\e9ed"; }
|
||||
.icon-shared:before { content: "\e9ee"; }
|
||||
.icon-shipping:before { content: "\e9ef"; }
|
||||
.icon-shop:before { content: "\e9f0"; }
|
||||
.icon-sinal:before { content: "\e9f1"; }
|
||||
.icon-smile:before { content: "\e9f2"; }
|
||||
.icon-snapchat:before { content: "\e9f3"; }
|
||||
.icon-solid:before { content: "\e9f4"; }
|
||||
.icon-solution:before { content: "\e9f5"; }
|
||||
.icon-spam:before { content: "\e9f6"; }
|
||||
.icon-speed:before { content: "\e9f7"; }
|
||||
.icon-stable:before { content: "\e9f8"; }
|
||||
.icon-star:before { content: "\e9f9"; }
|
||||
.icon-statuette:before { content: "\e9fa"; }
|
||||
.icon-strategy:before { content: "\e9fb"; }
|
||||
.icon-stream:before { content: "\e9fc"; }
|
||||
.icon-structure:before { content: "\e9fd"; }
|
||||
.icon-sun:before { content: "\e9fe"; }
|
||||
.icon-support:before { content: "\e9ff"; }
|
||||
.icon-surprise:before { content: "\ea00"; }
|
||||
.icon-switch:before { content: "\ea01"; }
|
||||
.icon-sync:before { content: "\ea02"; }
|
||||
.icon-tablet:before { content: "\ea03"; }
|
||||
.icon-tag:before { content: "\ea04"; }
|
||||
.icon-talk:before { content: "\ea05"; }
|
||||
.icon-target:before { content: "\ea06"; }
|
||||
.icon-tea:before { content: "\ea07"; }
|
||||
.icon-technology:before { content: "\ea08"; }
|
||||
.icon-telescope:before { content: "\ea09"; }
|
||||
.icon-thumbdown:before { content: "\ea0a"; }
|
||||
.icon-thumbup:before { content: "\ea0b"; }
|
||||
.icon-ticket:before { content: "\ea0c"; }
|
||||
.icon-time:before { content: "\ea0d"; }
|
||||
.icon-timer:before { content: "\ea0e"; }
|
||||
.icon-tools:before { content: "\ea0f"; }
|
||||
.icon-toxic:before { content: "\ea10"; }
|
||||
.icon-twitter:before { content: "\ea11"; }
|
||||
.icon-umbrella:before { content: "\ea12"; }
|
||||
.icon-unlock:before { content: "\ea13"; }
|
||||
.icon-upgrade:before { content: "\ea14"; }
|
||||
.icon-upload:before { content: "\ea15"; }
|
||||
.icon-ups:before { content: "\ea16"; }
|
||||
.icon-usb:before { content: "\ea17"; }
|
||||
.icon-user:before { content: "\ea18"; }
|
||||
.icon-vault:before { content: "\ea19"; }
|
||||
.icon-video:before { content: "\ea1a"; }
|
||||
.icon-vimeo:before { content: "\ea1b"; }
|
||||
.icon-virus:before { content: "\ea1c"; }
|
||||
.icon-vps:before { content: "\ea1d"; }
|
||||
.icon-wallet:before { content: "\ea1e"; }
|
||||
.icon-water:before { content: "\ea1f"; }
|
||||
.icon-wifi:before { content: "\ea20"; }
|
||||
.icon-win:before { content: "\ea21"; }
|
||||
.icon-wind:before { content: "\ea22"; }
|
||||
.icon-window:before { content: "\ea23"; }
|
||||
.icon-windows:before { content: "\ea24"; }
|
||||
.icon-windowserver:before { content: "\ea25"; }
|
||||
.icon-wine:before { content: "\ea26"; }
|
||||
.icon-wink:before { content: "\ea27"; }
|
||||
.icon-woman:before { content: "\ea28"; }
|
||||
.icon-wordpress:before { content: "\ea29"; }
|
||||
.icon-youtube:before { content: "\ea2a"; }
|
||||
.icon-zoom:before { content: "\ea2b"; }
|
||||
5616
static/felcloud/website/fonts/fontawesome/css/all.css
vendored
Normal file
5616
static/felcloud/website/fonts/fontawesome/css/all.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
197
static/felcloud/website/hardware.css
Normal file
197
static/felcloud/website/hardware.css
Normal file
@ -0,0 +1,197 @@
|
||||
::selection {
|
||||
background-color: #0056b3;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
::-moz-selection {
|
||||
background-color: #0056b3;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.indexBg.overlay:before {
|
||||
background-image: url("/static/felcloud/server room.jpg");
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.serversBg.overlay:before {
|
||||
background-image: url("/static/felcloud/servers.jpg") !important;
|
||||
background-size: cover !important;
|
||||
background-repeat: no-repeat !important;
|
||||
}
|
||||
.configurations {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px; /* Space between configuration items */
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.config-item {
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 8px;
|
||||
padding: 10px;
|
||||
transition: background-color 0.3s, box-shadow 0.3s;
|
||||
}
|
||||
|
||||
.config-item:hover {
|
||||
background-color: #f9f9f9; /* Subtle background change */
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Elevation effect */
|
||||
}
|
||||
|
||||
.config-link {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
transition: color 0.3s;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.config-link:hover {
|
||||
color: #0056b3; /* Darker blue on hover */
|
||||
text-decoration: underline;
|
||||
}
|
||||
#servers.htmx-added {
|
||||
opacity: 0;
|
||||
}
|
||||
#servers {
|
||||
opacity: 1;
|
||||
transition: opacity 0.1s ease-out;
|
||||
}
|
||||
.nav-menu .main-menu a {
|
||||
font-family: "Inter", sans-serif !important;
|
||||
font-size: 20px !important;
|
||||
}
|
||||
.configurations {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px; /* Space between configuration items */
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.config-item {
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 8px;
|
||||
padding: 10px;
|
||||
transition: background-color 0.3s, box-shadow 0.3s;
|
||||
}
|
||||
|
||||
.config-item:hover {
|
||||
background-color: #f9f9f9; /* Subtle background change */
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Elevation effect */
|
||||
}
|
||||
|
||||
.config-link {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
transition: color 0.3s;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.config-link:hover {
|
||||
color: #0056b3; /* Darker blue on hover */
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#options.htmx-added {
|
||||
opacity: 0;
|
||||
}
|
||||
#options {
|
||||
opacity: 1;
|
||||
transition: opacity 0.1s ease-out;
|
||||
}
|
||||
.wrappers {
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
padding: 30px;
|
||||
min-height: 240px;
|
||||
}
|
||||
/* .wrapper {
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
padding: 30px;
|
||||
min-height: 240px;
|
||||
} */
|
||||
.filter {
|
||||
background-color: white;
|
||||
margin-right: 15px;
|
||||
padding: 10px;
|
||||
}
|
||||
h4:before,
|
||||
h4:after {
|
||||
content: "";
|
||||
flex: 1;
|
||||
border-bottom: 2px solid #000;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.htmx-indicator {
|
||||
opacity: 0;
|
||||
transition: opacity 500ms ease-in;
|
||||
}
|
||||
.htmx-request .htmx-indicator {
|
||||
opacity: 1;
|
||||
}
|
||||
.htmx-request.htmx-indicator {
|
||||
opacity: 1;
|
||||
}
|
||||
.btn-focused {
|
||||
background-color: #4c4a4a !important;
|
||||
color: #fff !important;
|
||||
border: none !important;
|
||||
display: none;
|
||||
}
|
||||
.sc-config-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.sc-line {
|
||||
height: 4px;
|
||||
background: #ccc;
|
||||
}
|
||||
|
||||
.sc-line-left {
|
||||
flex: 0.2;
|
||||
}
|
||||
|
||||
.sc-line-right {
|
||||
flex: 1.5;
|
||||
margin-right: 100px; /* Reserve space for max quantity */
|
||||
}
|
||||
|
||||
.sc-category-title {
|
||||
margin: 0 10px;
|
||||
background: transparent;
|
||||
font-size: 13px;
|
||||
font-weight: 900;
|
||||
color: #717171;
|
||||
text-shadow: 1px 1px 1px #fff;
|
||||
text-transform: uppercase;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.sc-max-quantity {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
color: #555;
|
||||
white-space: nowrap;
|
||||
padding: 0 5px;
|
||||
}
|
||||
.fade-me-in.htmx-added {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.fade-me-in {
|
||||
opacity: 1;
|
||||
transition: opacity 0.2s ease-in;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 60px;
|
||||
}
|
||||
7
static/felcloud/website/js/bootstrap.min.js
vendored
Normal file
7
static/felcloud/website/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1817
static/felcloud/website/js/isotope.min.js
vendored
Normal file
1817
static/felcloud/website/js/isotope.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
205
static/felcloud/website/js/jquery.countdown.js
Normal file
205
static/felcloud/website/js/jquery.countdown.js
Normal file
@ -0,0 +1,205 @@
|
||||
/*!
|
||||
* The Final Countdown for jQuery v2.2.0 (http://hilios.github.io/jQuery.countdown/)
|
||||
* Copyright (c) 2016 Edson Hilios
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
!(function (a) {
|
||||
"use strict";
|
||||
"function" == typeof define && define.amd ? define(["jquery"], a) : a(jQuery);
|
||||
})(function (a) {
|
||||
"use strict";
|
||||
function b(a) {
|
||||
if (a instanceof Date) return a;
|
||||
if (String(a).match(g))
|
||||
return (
|
||||
String(a).match(/^[0-9]*$/) && (a = Number(a)),
|
||||
String(a).match(/\-/) && (a = String(a).replace(/\-/g, "/")),
|
||||
new Date(a)
|
||||
);
|
||||
throw new Error("Couldn't cast `" + a + "` to a date object.");
|
||||
}
|
||||
function c(a) {
|
||||
var b = a.toString().replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
|
||||
return new RegExp(b);
|
||||
}
|
||||
function d(a) {
|
||||
return function (b) {
|
||||
var d = b.match(/%(-|!)?[A-Z]{1}(:[^;]+;)?/gi);
|
||||
if (d)
|
||||
for (var f = 0, g = d.length; f < g; ++f) {
|
||||
var h = d[f].match(/%(-|!)?([a-zA-Z]{1})(:[^;]+;)?/),
|
||||
j = c(h[0]),
|
||||
k = h[1] || "",
|
||||
l = h[3] || "",
|
||||
m = null;
|
||||
(h = h[2]),
|
||||
i.hasOwnProperty(h) && ((m = i[h]), (m = Number(a[m]))),
|
||||
null !== m &&
|
||||
("!" === k && (m = e(l, m)),
|
||||
"" === k && m < 10 && (m = "0" + m.toString()),
|
||||
(b = b.replace(j, m.toString())));
|
||||
}
|
||||
return (b = b.replace(/%%/, "%"));
|
||||
};
|
||||
}
|
||||
function e(a, b) {
|
||||
var c = "s",
|
||||
d = "";
|
||||
return (
|
||||
a &&
|
||||
((a = a.replace(/(:|;|\s)/gi, "").split(/\,/)),
|
||||
1 === a.length ? (c = a[0]) : ((d = a[0]), (c = a[1]))),
|
||||
Math.abs(b) > 1 ? c : d
|
||||
);
|
||||
}
|
||||
var f = [],
|
||||
g = [],
|
||||
h = { precision: 100, elapse: !1, defer: !1 };
|
||||
g.push(/^[0-9]*$/.source),
|
||||
g.push(/([0-9]{1,2}\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),
|
||||
g.push(/[0-9]{4}([\/\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),
|
||||
(g = new RegExp(g.join("|")));
|
||||
var i = {
|
||||
Y: "years",
|
||||
m: "months",
|
||||
n: "daysToMonth",
|
||||
d: "daysToWeek",
|
||||
w: "weeks",
|
||||
W: "weeksToMonth",
|
||||
H: "hours",
|
||||
M: "minutes",
|
||||
S: "seconds",
|
||||
D: "totalDays",
|
||||
I: "totalHours",
|
||||
N: "totalMinutes",
|
||||
T: "totalSeconds",
|
||||
},
|
||||
j = function (b, c, d) {
|
||||
(this.el = b),
|
||||
(this.$el = a(b)),
|
||||
(this.interval = null),
|
||||
(this.offset = {}),
|
||||
(this.options = a.extend({}, h)),
|
||||
(this.instanceNumber = f.length),
|
||||
f.push(this),
|
||||
this.$el.data("countdown-instance", this.instanceNumber),
|
||||
d &&
|
||||
("function" == typeof d
|
||||
? (this.$el.on("update.countdown", d),
|
||||
this.$el.on("stoped.countdown", d),
|
||||
this.$el.on("finish.countdown", d))
|
||||
: (this.options = a.extend({}, h, d))),
|
||||
this.setFinalDate(c),
|
||||
this.options.defer === !1 && this.start();
|
||||
};
|
||||
a.extend(j.prototype, {
|
||||
start: function () {
|
||||
null !== this.interval && clearInterval(this.interval);
|
||||
var a = this;
|
||||
this.update(),
|
||||
(this.interval = setInterval(function () {
|
||||
a.update.call(a);
|
||||
}, this.options.precision));
|
||||
},
|
||||
stop: function () {
|
||||
clearInterval(this.interval),
|
||||
(this.interval = null),
|
||||
this.dispatchEvent("stoped");
|
||||
},
|
||||
toggle: function () {
|
||||
this.interval ? this.stop() : this.start();
|
||||
},
|
||||
pause: function () {
|
||||
this.stop();
|
||||
},
|
||||
resume: function () {
|
||||
this.start();
|
||||
},
|
||||
remove: function () {
|
||||
this.stop.call(this),
|
||||
(f[this.instanceNumber] = null),
|
||||
delete this.$el.data().countdownInstance;
|
||||
},
|
||||
setFinalDate: function (a) {
|
||||
this.finalDate = b(a);
|
||||
},
|
||||
update: function () {
|
||||
if (0 === this.$el.closest("html").length) return void this.remove();
|
||||
var b,
|
||||
c = void 0 !== a._data(this.el, "events"),
|
||||
d = new Date();
|
||||
(b = this.finalDate.getTime() - d.getTime()),
|
||||
(b = Math.ceil(b / 1e3)),
|
||||
(b = !this.options.elapse && b < 0 ? 0 : Math.abs(b)),
|
||||
this.totalSecsLeft !== b &&
|
||||
c &&
|
||||
((this.totalSecsLeft = b),
|
||||
(this.elapsed = d >= this.finalDate),
|
||||
(this.offset = {
|
||||
seconds: this.totalSecsLeft % 60,
|
||||
minutes: Math.floor(this.totalSecsLeft / 60) % 60,
|
||||
hours: Math.floor(this.totalSecsLeft / 60 / 60) % 24,
|
||||
days: Math.floor(this.totalSecsLeft / 60 / 60 / 24) % 7,
|
||||
daysToWeek: Math.floor(this.totalSecsLeft / 60 / 60 / 24) % 7,
|
||||
daysToMonth: Math.floor(
|
||||
(this.totalSecsLeft / 60 / 60 / 24) % 30.4368
|
||||
),
|
||||
weeks: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 7),
|
||||
weeksToMonth: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 7) % 4,
|
||||
months: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 30.4368),
|
||||
years: Math.abs(this.finalDate.getFullYear() - d.getFullYear()),
|
||||
totalDays: Math.floor(this.totalSecsLeft / 60 / 60 / 24),
|
||||
totalHours: Math.floor(this.totalSecsLeft / 60 / 60),
|
||||
totalMinutes: Math.floor(this.totalSecsLeft / 60),
|
||||
totalSeconds: this.totalSecsLeft,
|
||||
}),
|
||||
this.options.elapse || 0 !== this.totalSecsLeft
|
||||
? this.dispatchEvent("update")
|
||||
: (this.stop(), this.dispatchEvent("finish")));
|
||||
},
|
||||
dispatchEvent: function (b) {
|
||||
var c = a.Event(b + ".countdown");
|
||||
(c.finalDate = this.finalDate),
|
||||
(c.elapsed = this.elapsed),
|
||||
(c.offset = a.extend({}, this.offset)),
|
||||
(c.strftime = d(this.offset)),
|
||||
this.$el.trigger(c);
|
||||
},
|
||||
}),
|
||||
(a.fn.countdown = function () {
|
||||
var b = Array.prototype.slice.call(arguments, 0);
|
||||
return this.each(function () {
|
||||
var c = a(this).data("countdown-instance");
|
||||
if (void 0 !== c) {
|
||||
var d = f[c],
|
||||
e = b[0];
|
||||
j.prototype.hasOwnProperty(e)
|
||||
? d[e].apply(d, b.slice(1))
|
||||
: null === String(e).match(/^[$A-Z_][0-9A-Z_$]*$/i)
|
||||
? (d.setFinalDate.call(d, e), d.start())
|
||||
: a.error(
|
||||
"Method %s does not exist on jQuery.countdown".replace(
|
||||
/\%s/gi,
|
||||
e
|
||||
)
|
||||
);
|
||||
} else new j(this, b[0], b[1]);
|
||||
});
|
||||
});
|
||||
});
|
||||
4
static/felcloud/website/js/jquery.magnific-popup.min.js
vendored
Normal file
4
static/felcloud/website/js/jquery.magnific-popup.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5574
static/felcloud/website/js/jquery.min.js
vendored
Normal file
5574
static/felcloud/website/js/jquery.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
252
static/felcloud/website/js/jquery.scrollme.min.js
vendored
Normal file
252
static/felcloud/website/js/jquery.scrollme.min.js
vendored
Normal file
@ -0,0 +1,252 @@
|
||||
var scrollme = (function (e) {
|
||||
var t = {},
|
||||
a = e(document),
|
||||
n = e(window);
|
||||
return (
|
||||
(t.body_height = 0),
|
||||
(t.viewport_height = 0),
|
||||
(t.viewport_top = 0),
|
||||
(t.viewport_bottom = 0),
|
||||
(t.viewport_top_previous = -1),
|
||||
(t.elements = []),
|
||||
(t.elements_in_view = []),
|
||||
(t.property_defaults = {
|
||||
opacity: 1,
|
||||
translatex: 0,
|
||||
translatey: 0,
|
||||
translatez: 0,
|
||||
rotatex: 0,
|
||||
rotatey: 0,
|
||||
rotatez: 0,
|
||||
scale: 1,
|
||||
scalex: 1,
|
||||
scaley: 1,
|
||||
scalez: 1,
|
||||
}),
|
||||
(t.scrollme_selector = ".scrollme"),
|
||||
(t.animateme_selector = ".animateme"),
|
||||
(t.update_interval = 10),
|
||||
(t.easing_functions = {
|
||||
linear: function (e) {
|
||||
return e;
|
||||
},
|
||||
easeout: function (e) {
|
||||
return e * e * e;
|
||||
},
|
||||
easein: function (e) {
|
||||
return 1 - (e = 1 - e) * e * e;
|
||||
},
|
||||
easeinout: function (e) {
|
||||
return e < 0.5 ? 4 * e * e * e : 1 - 4 * (e = 1 - e) * e * e;
|
||||
},
|
||||
}),
|
||||
(t.init_events = ["ready", "page:load", "page:change"]),
|
||||
(t.init_if = function () {
|
||||
return !0;
|
||||
}),
|
||||
(t.init = function () {
|
||||
return (
|
||||
!!t.init_if() &&
|
||||
(t.init_elements(),
|
||||
t.on_resize(),
|
||||
n.on("resize orientationchange", function () {
|
||||
t.on_resize();
|
||||
}),
|
||||
e(document).ready(function () {
|
||||
setTimeout(function () {
|
||||
t.on_resize();
|
||||
}, 100);
|
||||
}),
|
||||
setInterval(t.update, t.update_interval),
|
||||
!0)
|
||||
);
|
||||
}),
|
||||
(t.init_elements = function () {
|
||||
e(t.scrollme_selector).each(function () {
|
||||
var a = {};
|
||||
a.element = e(this);
|
||||
var n = [];
|
||||
e(this)
|
||||
.find(t.animateme_selector)
|
||||
.addBack(t.animateme_selector)
|
||||
.each(function () {
|
||||
var a = {};
|
||||
(a.element = e(this)),
|
||||
(a.when = a.element.data("when")),
|
||||
(a.from = a.element.data("from")),
|
||||
(a.to = a.element.data("to")),
|
||||
a.element.is("[data-crop]")
|
||||
? (a.crop = a.element.data("crop"))
|
||||
: (a.crop = !0),
|
||||
a.element.is("[data-easing]")
|
||||
? (a.easing = t.easing_functions[a.element.data("easing")])
|
||||
: (a.easing = t.easing_functions.easeout);
|
||||
var i = {};
|
||||
a.element.is("[data-opacity]") &&
|
||||
(i.opacity = a.element.data("opacity")),
|
||||
a.element.is("[data-translatex]") &&
|
||||
(i.translatex = a.element.data("translatex")),
|
||||
a.element.is("[data-translatey]") &&
|
||||
(i.translatey = a.element.data("translatey")),
|
||||
a.element.is("[data-translatez]") &&
|
||||
(i.translatez = a.element.data("translatez")),
|
||||
a.element.is("[data-rotatex]") &&
|
||||
(i.rotatex = a.element.data("rotatex")),
|
||||
a.element.is("[data-rotatey]") &&
|
||||
(i.rotatey = a.element.data("rotatey")),
|
||||
a.element.is("[data-rotatez]") &&
|
||||
(i.rotatez = a.element.data("rotatez")),
|
||||
a.element.is("[data-scale]") &&
|
||||
(i.scale = a.element.data("scale")),
|
||||
a.element.is("[data-scalex]") &&
|
||||
(i.scalex = a.element.data("scalex")),
|
||||
a.element.is("[data-scaley]") &&
|
||||
(i.scaley = a.element.data("scaley")),
|
||||
a.element.is("[data-scalez]") &&
|
||||
(i.scalez = a.element.data("scalez")),
|
||||
(a.properties = i),
|
||||
n.push(a);
|
||||
}),
|
||||
(a.effects = n),
|
||||
t.elements.push(a);
|
||||
});
|
||||
}),
|
||||
(t.update = function () {
|
||||
window.requestAnimationFrame(function () {
|
||||
t.update_viewport_position(),
|
||||
t.viewport_top_previous != t.viewport_top &&
|
||||
(t.update_elements_in_view(), t.animate()),
|
||||
(t.viewport_top_previous = t.viewport_top);
|
||||
});
|
||||
}),
|
||||
(t.animate = function () {
|
||||
for (var e = t.elements_in_view.length, a = 0; a < e; a++)
|
||||
for (
|
||||
var n = t.elements_in_view[a], i = n.effects.length, o = 0;
|
||||
o < i;
|
||||
o++
|
||||
) {
|
||||
var r = n.effects[o];
|
||||
switch (r.when) {
|
||||
case "view":
|
||||
case "span":
|
||||
var s = n.top - t.viewport_height,
|
||||
l = n.bottom;
|
||||
break;
|
||||
case "exit":
|
||||
(s = n.bottom - t.viewport_height), (l = n.bottom);
|
||||
break;
|
||||
default:
|
||||
(s = n.top - t.viewport_height), (l = n.top);
|
||||
}
|
||||
r.crop &&
|
||||
(s < 0 && (s = 0),
|
||||
l > t.body_height - t.viewport_height &&
|
||||
(l = t.body_height - t.viewport_height));
|
||||
var m = (t.viewport_top - s) / (l - s),
|
||||
p = r.from,
|
||||
c = r.to,
|
||||
_ = (m - p) / (c - p),
|
||||
u = r.easing(_),
|
||||
d = t.animate_value(m, u, p, c, r, "opacity"),
|
||||
v = t.animate_value(m, u, p, c, r, "translatey"),
|
||||
h = t.animate_value(m, u, p, c, r, "translatex"),
|
||||
f = t.animate_value(m, u, p, c, r, "translatez"),
|
||||
w = t.animate_value(m, u, p, c, r, "rotatex"),
|
||||
g = t.animate_value(m, u, p, c, r, "rotatey"),
|
||||
y = t.animate_value(m, u, p, c, r, "rotatez"),
|
||||
x = t.animate_value(m, u, p, c, r, "scale"),
|
||||
z = t.animate_value(m, u, p, c, r, "scalex"),
|
||||
b = t.animate_value(m, u, p, c, r, "scaley"),
|
||||
k = t.animate_value(m, u, p, c, r, "scalez");
|
||||
"scale" in r.properties && ((z = x), (b = x), (k = x)),
|
||||
r.element.css({
|
||||
opacity: d,
|
||||
transform:
|
||||
"translate3d( " +
|
||||
h +
|
||||
"px , " +
|
||||
v +
|
||||
"px , " +
|
||||
f +
|
||||
"px ) rotateX( " +
|
||||
w +
|
||||
"deg ) rotateY( " +
|
||||
g +
|
||||
"deg ) rotateZ( " +
|
||||
y +
|
||||
"deg ) scale3d( " +
|
||||
z +
|
||||
" , " +
|
||||
b +
|
||||
" , " +
|
||||
k +
|
||||
" )",
|
||||
});
|
||||
}
|
||||
}),
|
||||
(t.animate_value = function (e, a, n, i, o, r) {
|
||||
var s = t.property_defaults[r];
|
||||
if (!(r in o.properties)) return s;
|
||||
var l = o.properties[r],
|
||||
m = i > n;
|
||||
if (e < n && m) return s;
|
||||
if (e > i && m) return l;
|
||||
if (e > n && !m) return s;
|
||||
if (e < i && !m) return l;
|
||||
var p = s + a * (l - s);
|
||||
switch (r) {
|
||||
case "opacity":
|
||||
p = p.toFixed(2);
|
||||
break;
|
||||
case "translatex":
|
||||
case "translatey":
|
||||
case "translatez":
|
||||
p = p.toFixed(0);
|
||||
break;
|
||||
case "rotatex":
|
||||
case "rotatey":
|
||||
case "rotatez":
|
||||
p = p.toFixed(1);
|
||||
break;
|
||||
case "scale":
|
||||
p = p.toFixed(3);
|
||||
}
|
||||
return p;
|
||||
}),
|
||||
(t.update_viewport_position = function () {
|
||||
(t.viewport_top = n.scrollTop()),
|
||||
(t.viewport_bottom = t.viewport_top + t.viewport_height);
|
||||
}),
|
||||
(t.update_elements_in_view = function () {
|
||||
t.elements_in_view = [];
|
||||
for (var e = t.elements.length, a = 0; a < e; a++)
|
||||
t.elements[a].top < t.viewport_bottom &&
|
||||
t.elements[a].bottom > t.viewport_top &&
|
||||
t.elements_in_view.push(t.elements[a]);
|
||||
}),
|
||||
(t.on_resize = function () {
|
||||
t.update_viewport(),
|
||||
t.update_element_heights(),
|
||||
t.update_viewport_position(),
|
||||
t.update_elements_in_view(),
|
||||
t.animate();
|
||||
}),
|
||||
(t.update_viewport = function () {
|
||||
(t.body_height = a.height()), (t.viewport_height = n.height());
|
||||
}),
|
||||
(t.update_element_heights = function () {
|
||||
for (var e = t.elements.length, a = 0; a < e; a++) {
|
||||
var n = t.elements[a].element.outerHeight(),
|
||||
i = t.elements[a].element.offset();
|
||||
(t.elements[a].height = n),
|
||||
(t.elements[a].top = i.top),
|
||||
(t.elements[a].bottom = i.top + n);
|
||||
}
|
||||
}),
|
||||
e("docuemnt").ready(function () {
|
||||
t.init();
|
||||
}),
|
||||
t
|
||||
);
|
||||
})(jQuery);
|
||||
630
static/felcloud/website/js/lazysizes.min.js
vendored
Normal file
630
static/felcloud/website/js/lazysizes.min.js
vendored
Normal file
@ -0,0 +1,630 @@
|
||||
/*! lazysizes - v5.3.0 */
|
||||
|
||||
!(function (e) {
|
||||
var t = (function (u, D, f) {
|
||||
"use strict";
|
||||
var k, H;
|
||||
if (
|
||||
((function () {
|
||||
var e;
|
||||
var t = {
|
||||
lazyClass: "lazyload",
|
||||
loadedClass: "lazyloaded",
|
||||
loadingClass: "lazyloading",
|
||||
preloadClass: "lazypreload",
|
||||
errorClass: "lazyerror",
|
||||
autosizesClass: "lazyautosizes",
|
||||
fastLoadedClass: "ls-is-cached",
|
||||
iframeLoadMode: 0,
|
||||
srcAttr: "data-src",
|
||||
srcsetAttr: "data-srcset",
|
||||
sizesAttr: "data-sizes",
|
||||
minSize: 40,
|
||||
customMedia: {},
|
||||
init: true,
|
||||
expFactor: 1.5,
|
||||
hFac: 0.8,
|
||||
loadMode: 2,
|
||||
loadHidden: true,
|
||||
ricTimeout: 0,
|
||||
throttleDelay: 125,
|
||||
};
|
||||
H = u.lazySizesConfig || u.lazysizesConfig || {};
|
||||
for (e in t) {
|
||||
if (!(e in H)) {
|
||||
H[e] = t[e];
|
||||
}
|
||||
}
|
||||
})(),
|
||||
!D || !D.getElementsByClassName)
|
||||
) {
|
||||
return { init: function () {}, cfg: H, noSupport: true };
|
||||
}
|
||||
var O = D.documentElement,
|
||||
i = u.HTMLPictureElement,
|
||||
P = "addEventListener",
|
||||
$ = "getAttribute",
|
||||
q = u[P].bind(u),
|
||||
I = u.setTimeout,
|
||||
U = u.requestAnimationFrame || I,
|
||||
o = u.requestIdleCallback,
|
||||
j = /^picture$/i,
|
||||
r = ["load", "error", "lazyincluded", "_lazyloaded"],
|
||||
a = {},
|
||||
G = Array.prototype.forEach,
|
||||
J = function (e, t) {
|
||||
if (!a[t]) {
|
||||
a[t] = new RegExp("(\\s|^)" + t + "(\\s|$)");
|
||||
}
|
||||
return a[t].test(e[$]("class") || "") && a[t];
|
||||
},
|
||||
K = function (e, t) {
|
||||
if (!J(e, t)) {
|
||||
e.setAttribute("class", (e[$]("class") || "").trim() + " " + t);
|
||||
}
|
||||
},
|
||||
Q = function (e, t) {
|
||||
var a;
|
||||
if ((a = J(e, t))) {
|
||||
e.setAttribute("class", (e[$]("class") || "").replace(a, " "));
|
||||
}
|
||||
},
|
||||
V = function (t, a, e) {
|
||||
var i = e ? P : "removeEventListener";
|
||||
if (e) {
|
||||
V(t, a);
|
||||
}
|
||||
r.forEach(function (e) {
|
||||
t[i](e, a);
|
||||
});
|
||||
},
|
||||
X = function (e, t, a, i, r) {
|
||||
var n = D.createEvent("Event");
|
||||
if (!a) {
|
||||
a = {};
|
||||
}
|
||||
a.instance = k;
|
||||
n.initEvent(t, !i, !r);
|
||||
n.detail = a;
|
||||
e.dispatchEvent(n);
|
||||
return n;
|
||||
},
|
||||
Y = function (e, t) {
|
||||
var a;
|
||||
if (!i && (a = u.picturefill || H.pf)) {
|
||||
if (t && t.src && !e[$]("srcset")) {
|
||||
e.setAttribute("srcset", t.src);
|
||||
}
|
||||
a({ reevaluate: true, elements: [e] });
|
||||
} else if (t && t.src) {
|
||||
e.src = t.src;
|
||||
}
|
||||
},
|
||||
Z = function (e, t) {
|
||||
return (getComputedStyle(e, null) || {})[t];
|
||||
},
|
||||
s = function (e, t, a) {
|
||||
a = a || e.offsetWidth;
|
||||
while (a < H.minSize && t && !e._lazysizesWidth) {
|
||||
a = t.offsetWidth;
|
||||
t = t.parentNode;
|
||||
}
|
||||
return a;
|
||||
},
|
||||
ee = (function () {
|
||||
var a, i;
|
||||
var t = [];
|
||||
var r = [];
|
||||
var n = t;
|
||||
var s = function () {
|
||||
var e = n;
|
||||
n = t.length ? r : t;
|
||||
a = true;
|
||||
i = false;
|
||||
while (e.length) {
|
||||
e.shift()();
|
||||
}
|
||||
a = false;
|
||||
};
|
||||
var e = function (e, t) {
|
||||
if (a && !t) {
|
||||
e.apply(this, arguments);
|
||||
} else {
|
||||
n.push(e);
|
||||
if (!i) {
|
||||
i = true;
|
||||
(D.hidden ? I : U)(s);
|
||||
}
|
||||
}
|
||||
};
|
||||
e._lsFlush = s;
|
||||
return e;
|
||||
})(),
|
||||
te = function (a, e) {
|
||||
return e
|
||||
? function () {
|
||||
ee(a);
|
||||
}
|
||||
: function () {
|
||||
var e = this;
|
||||
var t = arguments;
|
||||
ee(function () {
|
||||
a.apply(e, t);
|
||||
});
|
||||
};
|
||||
},
|
||||
ae = function (e) {
|
||||
var a;
|
||||
var i = 0;
|
||||
var r = H.throttleDelay;
|
||||
var n = H.ricTimeout;
|
||||
var t = function () {
|
||||
a = false;
|
||||
i = f.now();
|
||||
e();
|
||||
};
|
||||
var s =
|
||||
o && n > 49
|
||||
? function () {
|
||||
o(t, { timeout: n });
|
||||
if (n !== H.ricTimeout) {
|
||||
n = H.ricTimeout;
|
||||
}
|
||||
}
|
||||
: te(function () {
|
||||
I(t);
|
||||
}, true);
|
||||
return function (e) {
|
||||
var t;
|
||||
if ((e = e === true)) {
|
||||
n = 33;
|
||||
}
|
||||
if (a) {
|
||||
return;
|
||||
}
|
||||
a = true;
|
||||
t = r - (f.now() - i);
|
||||
if (t < 0) {
|
||||
t = 0;
|
||||
}
|
||||
if (e || t < 9) {
|
||||
s();
|
||||
} else {
|
||||
I(s, t);
|
||||
}
|
||||
};
|
||||
},
|
||||
ie = function (e) {
|
||||
var t, a;
|
||||
var i = 99;
|
||||
var r = function () {
|
||||
t = null;
|
||||
e();
|
||||
};
|
||||
var n = function () {
|
||||
var e = f.now() - a;
|
||||
if (e < i) {
|
||||
I(n, i - e);
|
||||
} else {
|
||||
(o || r)(r);
|
||||
}
|
||||
};
|
||||
return function () {
|
||||
a = f.now();
|
||||
if (!t) {
|
||||
t = I(n, i);
|
||||
}
|
||||
};
|
||||
},
|
||||
e = (function () {
|
||||
var v, m, c, h, e;
|
||||
var y, z, g, p, C, b, A;
|
||||
var n = /^img$/i;
|
||||
var d = /^iframe$/i;
|
||||
var E = "onscroll" in u && !/(gle|ing)bot/.test(navigator.userAgent);
|
||||
var _ = 0;
|
||||
var w = 0;
|
||||
var M = 0;
|
||||
var N = -1;
|
||||
var L = function (e) {
|
||||
M--;
|
||||
if (!e || M < 0 || !e.target) {
|
||||
M = 0;
|
||||
}
|
||||
};
|
||||
var x = function (e) {
|
||||
if (A == null) {
|
||||
A = Z(D.body, "visibility") == "hidden";
|
||||
}
|
||||
return (
|
||||
A ||
|
||||
!(
|
||||
Z(e.parentNode, "visibility") == "hidden" &&
|
||||
Z(e, "visibility") == "hidden"
|
||||
)
|
||||
);
|
||||
};
|
||||
var W = function (e, t) {
|
||||
var a;
|
||||
var i = e;
|
||||
var r = x(e);
|
||||
g -= t;
|
||||
b += t;
|
||||
p -= t;
|
||||
C += t;
|
||||
while (r && (i = i.offsetParent) && i != D.body && i != O) {
|
||||
r = (Z(i, "opacity") || 1) > 0;
|
||||
if (r && Z(i, "overflow") != "visible") {
|
||||
a = i.getBoundingClientRect();
|
||||
r =
|
||||
C > a.left && p < a.right && b > a.top - 1 && g < a.bottom + 1;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
};
|
||||
var t = function () {
|
||||
var e, t, a, i, r, n, s, o, l, u, f, c;
|
||||
var d = k.elements;
|
||||
if ((h = H.loadMode) && M < 8 && (e = d.length)) {
|
||||
t = 0;
|
||||
N++;
|
||||
for (; t < e; t++) {
|
||||
if (!d[t] || d[t]._lazyRace) {
|
||||
continue;
|
||||
}
|
||||
if (!E || (k.prematureUnveil && k.prematureUnveil(d[t]))) {
|
||||
R(d[t]);
|
||||
continue;
|
||||
}
|
||||
if (!(o = d[t][$]("data-expand")) || !(n = o * 1)) {
|
||||
n = w;
|
||||
}
|
||||
if (!u) {
|
||||
u =
|
||||
!H.expand || H.expand < 1
|
||||
? O.clientHeight > 500 && O.clientWidth > 500
|
||||
? 500
|
||||
: 370
|
||||
: H.expand;
|
||||
k._defEx = u;
|
||||
f = u * H.expFactor;
|
||||
c = H.hFac;
|
||||
A = null;
|
||||
if (w < f && M < 1 && N > 2 && h > 2 && !D.hidden) {
|
||||
w = f;
|
||||
N = 0;
|
||||
} else if (h > 1 && N > 1 && M < 6) {
|
||||
w = u;
|
||||
} else {
|
||||
w = _;
|
||||
}
|
||||
}
|
||||
if (l !== n) {
|
||||
y = innerWidth + n * c;
|
||||
z = innerHeight + n;
|
||||
s = n * -1;
|
||||
l = n;
|
||||
}
|
||||
a = d[t].getBoundingClientRect();
|
||||
if (
|
||||
(b = a.bottom) >= s &&
|
||||
(g = a.top) <= z &&
|
||||
(C = a.right) >= s * c &&
|
||||
(p = a.left) <= y &&
|
||||
(b || C || p || g) &&
|
||||
(H.loadHidden || x(d[t])) &&
|
||||
((m && M < 3 && !o && (h < 3 || N < 4)) || W(d[t], n))
|
||||
) {
|
||||
R(d[t]);
|
||||
r = true;
|
||||
if (M > 9) {
|
||||
break;
|
||||
}
|
||||
} else if (
|
||||
!r &&
|
||||
m &&
|
||||
!i &&
|
||||
M < 4 &&
|
||||
N < 4 &&
|
||||
h > 2 &&
|
||||
(v[0] || H.preloadAfterLoad) &&
|
||||
(v[0] ||
|
||||
(!o && (b || C || p || g || d[t][$](H.sizesAttr) != "auto")))
|
||||
) {
|
||||
i = v[0] || d[t];
|
||||
}
|
||||
}
|
||||
if (i && !r) {
|
||||
R(i);
|
||||
}
|
||||
}
|
||||
};
|
||||
var a = ae(t);
|
||||
var S = function (e) {
|
||||
var t = e.target;
|
||||
if (t._lazyCache) {
|
||||
delete t._lazyCache;
|
||||
return;
|
||||
}
|
||||
L(e);
|
||||
K(t, H.loadedClass);
|
||||
Q(t, H.loadingClass);
|
||||
V(t, B);
|
||||
X(t, "lazyloaded");
|
||||
};
|
||||
var i = te(S);
|
||||
var B = function (e) {
|
||||
i({ target: e.target });
|
||||
};
|
||||
var T = function (e, t) {
|
||||
var a = e.getAttribute("data-load-mode") || H.iframeLoadMode;
|
||||
if (a == 0) {
|
||||
e.contentWindow.location.replace(t);
|
||||
} else if (a == 1) {
|
||||
e.src = t;
|
||||
}
|
||||
};
|
||||
var F = function (e) {
|
||||
var t;
|
||||
var a = e[$](H.srcsetAttr);
|
||||
if ((t = H.customMedia[e[$]("data-media") || e[$]("media")])) {
|
||||
e.setAttribute("media", t);
|
||||
}
|
||||
if (a) {
|
||||
e.setAttribute("srcset", a);
|
||||
}
|
||||
};
|
||||
var s = te(function (t, e, a, i, r) {
|
||||
var n, s, o, l, u, f;
|
||||
if (!(u = X(t, "lazybeforeunveil", e)).defaultPrevented) {
|
||||
if (i) {
|
||||
if (a) {
|
||||
K(t, H.autosizesClass);
|
||||
} else {
|
||||
t.setAttribute("sizes", i);
|
||||
}
|
||||
}
|
||||
s = t[$](H.srcsetAttr);
|
||||
n = t[$](H.srcAttr);
|
||||
if (r) {
|
||||
o = t.parentNode;
|
||||
l = o && j.test(o.nodeName || "");
|
||||
}
|
||||
f = e.firesLoad || ("src" in t && (s || n || l));
|
||||
u = { target: t };
|
||||
K(t, H.loadingClass);
|
||||
if (f) {
|
||||
clearTimeout(c);
|
||||
c = I(L, 2500);
|
||||
V(t, B, true);
|
||||
}
|
||||
if (l) {
|
||||
G.call(o.getElementsByTagName("source"), F);
|
||||
}
|
||||
if (s) {
|
||||
t.setAttribute("srcset", s);
|
||||
} else if (n && !l) {
|
||||
if (d.test(t.nodeName)) {
|
||||
T(t, n);
|
||||
} else {
|
||||
t.src = n;
|
||||
}
|
||||
}
|
||||
if (r && (s || l)) {
|
||||
Y(t, { src: n });
|
||||
}
|
||||
}
|
||||
if (t._lazyRace) {
|
||||
delete t._lazyRace;
|
||||
}
|
||||
Q(t, H.lazyClass);
|
||||
ee(function () {
|
||||
var e = t.complete && t.naturalWidth > 1;
|
||||
if (!f || e) {
|
||||
if (e) {
|
||||
K(t, H.fastLoadedClass);
|
||||
}
|
||||
S(u);
|
||||
t._lazyCache = true;
|
||||
I(function () {
|
||||
if ("_lazyCache" in t) {
|
||||
delete t._lazyCache;
|
||||
}
|
||||
}, 9);
|
||||
}
|
||||
if (t.loading == "lazy") {
|
||||
M--;
|
||||
}
|
||||
}, true);
|
||||
});
|
||||
var R = function (e) {
|
||||
if (e._lazyRace) {
|
||||
return;
|
||||
}
|
||||
var t;
|
||||
var a = n.test(e.nodeName);
|
||||
var i = a && (e[$](H.sizesAttr) || e[$]("sizes"));
|
||||
var r = i == "auto";
|
||||
if (
|
||||
(r || !m) &&
|
||||
a &&
|
||||
(e[$]("src") || e.srcset) &&
|
||||
!e.complete &&
|
||||
!J(e, H.errorClass) &&
|
||||
J(e, H.lazyClass)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
t = X(e, "lazyunveilread").detail;
|
||||
if (r) {
|
||||
re.updateElem(e, true, e.offsetWidth);
|
||||
}
|
||||
e._lazyRace = true;
|
||||
M++;
|
||||
s(e, t, r, i, a);
|
||||
};
|
||||
var r = ie(function () {
|
||||
H.loadMode = 3;
|
||||
a();
|
||||
});
|
||||
var o = function () {
|
||||
if (H.loadMode == 3) {
|
||||
H.loadMode = 2;
|
||||
}
|
||||
r();
|
||||
};
|
||||
var l = function () {
|
||||
if (m) {
|
||||
return;
|
||||
}
|
||||
if (f.now() - e < 999) {
|
||||
I(l, 999);
|
||||
return;
|
||||
}
|
||||
m = true;
|
||||
H.loadMode = 3;
|
||||
a();
|
||||
q("scroll", o, true);
|
||||
};
|
||||
return {
|
||||
_: function () {
|
||||
e = f.now();
|
||||
k.elements = D.getElementsByClassName(H.lazyClass);
|
||||
v = D.getElementsByClassName(H.lazyClass + " " + H.preloadClass);
|
||||
q("scroll", a, true);
|
||||
q("resize", a, true);
|
||||
q("pageshow", function (e) {
|
||||
if (e.persisted) {
|
||||
var t = D.querySelectorAll("." + H.loadingClass);
|
||||
if (t.length && t.forEach) {
|
||||
U(function () {
|
||||
t.forEach(function (e) {
|
||||
if (e.complete) {
|
||||
R(e);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
if (u.MutationObserver) {
|
||||
new MutationObserver(a).observe(O, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
attributes: true,
|
||||
});
|
||||
} else {
|
||||
O[P]("DOMNodeInserted", a, true);
|
||||
O[P]("DOMAttrModified", a, true);
|
||||
setInterval(a, 999);
|
||||
}
|
||||
q("hashchange", a, true);
|
||||
[
|
||||
"focus",
|
||||
"mouseover",
|
||||
"click",
|
||||
"load",
|
||||
"transitionend",
|
||||
"animationend",
|
||||
].forEach(function (e) {
|
||||
D[P](e, a, true);
|
||||
});
|
||||
if (/d$|^c/.test(D.readyState)) {
|
||||
l();
|
||||
} else {
|
||||
q("load", l);
|
||||
D[P]("DOMContentLoaded", a);
|
||||
I(l, 2e4);
|
||||
}
|
||||
if (k.elements.length) {
|
||||
t();
|
||||
ee._lsFlush();
|
||||
} else {
|
||||
a();
|
||||
}
|
||||
},
|
||||
checkElems: a,
|
||||
unveil: R,
|
||||
_aLSL: o,
|
||||
};
|
||||
})(),
|
||||
re = (function () {
|
||||
var a;
|
||||
var n = te(function (e, t, a, i) {
|
||||
var r, n, s;
|
||||
e._lazysizesWidth = i;
|
||||
i += "px";
|
||||
e.setAttribute("sizes", i);
|
||||
if (j.test(t.nodeName || "")) {
|
||||
r = t.getElementsByTagName("source");
|
||||
for (n = 0, s = r.length; n < s; n++) {
|
||||
r[n].setAttribute("sizes", i);
|
||||
}
|
||||
}
|
||||
if (!a.detail.dataAttr) {
|
||||
Y(e, a.detail);
|
||||
}
|
||||
});
|
||||
var i = function (e, t, a) {
|
||||
var i;
|
||||
var r = e.parentNode;
|
||||
if (r) {
|
||||
a = s(e, r, a);
|
||||
i = X(e, "lazybeforesizes", { width: a, dataAttr: !!t });
|
||||
if (!i.defaultPrevented) {
|
||||
a = i.detail.width;
|
||||
if (a && a !== e._lazysizesWidth) {
|
||||
n(e, r, i, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var e = function () {
|
||||
var e;
|
||||
var t = a.length;
|
||||
if (t) {
|
||||
e = 0;
|
||||
for (; e < t; e++) {
|
||||
i(a[e]);
|
||||
}
|
||||
}
|
||||
};
|
||||
var t = ie(e);
|
||||
return {
|
||||
_: function () {
|
||||
a = D.getElementsByClassName(H.autosizesClass);
|
||||
q("resize", t);
|
||||
},
|
||||
checkElems: t,
|
||||
updateElem: i,
|
||||
};
|
||||
})(),
|
||||
t = function () {
|
||||
if (!t.i && D.getElementsByClassName) {
|
||||
t.i = true;
|
||||
re._();
|
||||
e._();
|
||||
}
|
||||
};
|
||||
return (
|
||||
I(function () {
|
||||
H.init && t();
|
||||
}),
|
||||
(k = {
|
||||
cfg: H,
|
||||
autoSizer: re,
|
||||
loader: e,
|
||||
init: t,
|
||||
uP: Y,
|
||||
aC: K,
|
||||
rC: Q,
|
||||
hC: J,
|
||||
fire: X,
|
||||
gW: s,
|
||||
rAF: ee,
|
||||
})
|
||||
);
|
||||
})(e, e.document, Date);
|
||||
(e.lazySizes = t),
|
||||
"object" == typeof module && module.exports && (module.exports = t);
|
||||
})("undefined" != typeof window ? window : {});
|
||||
2054
static/felcloud/website/js/owl.carousel.min.js
vendored
Normal file
2054
static/felcloud/website/js/owl.carousel.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1144
static/felcloud/website/js/popper.min.js
vendored
Normal file
1144
static/felcloud/website/js/popper.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
762
static/felcloud/website/js/scripts.min.js
vendored
Normal file
762
static/felcloud/website/js/scripts.min.js
vendored
Normal file
@ -0,0 +1,762 @@
|
||||
function setActiveColor(t) {
|
||||
var e, i;
|
||||
for (e = 0; (i = document.getElementsByTagName("link")[e]); e++)
|
||||
-1 != i.getAttribute("rel").indexOf("style") &&
|
||||
i.getAttribute("title") &&
|
||||
((i.disabled = !0), i.getAttribute("title") == t && (i.disabled = !1));
|
||||
}
|
||||
function getActiveColor() {
|
||||
var t, e;
|
||||
for (t = 0; (e = document.getElementsByTagName("link")[t]); t++)
|
||||
if (
|
||||
-1 != e.getAttribute("rel").indexOf("style") &&
|
||||
e.getAttribute("title") &&
|
||||
!e.disabled
|
||||
)
|
||||
return e.getAttribute("title");
|
||||
return null;
|
||||
}
|
||||
function getSetColor() {
|
||||
var t, e;
|
||||
for (t = 0; (e = document.getElementsByTagName("link")[t]); t++)
|
||||
if (
|
||||
-1 != e.getAttribute("rel").indexOf("style") &&
|
||||
-1 == e.getAttribute("rel").indexOf("alt") &&
|
||||
e.getAttribute("title")
|
||||
)
|
||||
return e.getAttribute("title");
|
||||
return null;
|
||||
}
|
||||
function generateCookie(t, e, i) {
|
||||
if (i) {
|
||||
var n = new Date();
|
||||
n.setTime(n.getTime() + 24 * i * 60 * 60 * 1e3);
|
||||
var o = "; expires=" + n.toGMTString();
|
||||
} else o = "";
|
||||
document.cookie = t + "=" + e + o + "; path=/";
|
||||
}
|
||||
function goCookie(t) {
|
||||
for (
|
||||
var e = t + "=", i = document.cookie.split(";"), n = 0;
|
||||
n < i.length;
|
||||
n++
|
||||
) {
|
||||
for (var o = i[n]; " " == o.charAt(0); ) o = o.substring(1, o.length);
|
||||
if (0 == o.indexOf(e)) return o.substring(e.length, o.length);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
"use strict";
|
||||
loadWindowSettings(),
|
||||
loadWindowEvents(),
|
||||
loadMenu(),
|
||||
loadTabs(),
|
||||
izotope(),
|
||||
popup(),
|
||||
accordion(),
|
||||
loadTooltips(),
|
||||
initSliderUI(),
|
||||
loadCountdown(),
|
||||
speacialCount(),
|
||||
loadSkills(),
|
||||
misc(),
|
||||
slick(),
|
||||
listenSlick(),
|
||||
loader(),
|
||||
backtotop(),
|
||||
owldemo(),
|
||||
isotope(),
|
||||
livechat(),
|
||||
contactform(),
|
||||
popover(),
|
||||
scrollgoto(),
|
||||
active(),
|
||||
display(),
|
||||
switching(),
|
||||
headerfooter(),
|
||||
translate(),
|
||||
switchVisible(),
|
||||
setActiveColor();
|
||||
}),
|
||||
(window.onload = function (t) {
|
||||
var e = goCookie("style");
|
||||
setActiveColor(e || getSetColor());
|
||||
}),
|
||||
(window.onunload = function (t) {
|
||||
generateCookie("style", getActiveColor(), 365);
|
||||
});
|
||||
var cookie = goCookie("style"),
|
||||
title = cookie || getSetColor();
|
||||
function switchVisible() {
|
||||
document.getElementById("price-val") &&
|
||||
("none" == document.getElementById("price-val").style.display
|
||||
? ((document.getElementById("price-val").style.display = "block"),
|
||||
(document.getElementById("priceon-val").style.display = "none"))
|
||||
: ((document.getElementById("price-val").style.display = "none"),
|
||||
(document.getElementById("priceon-val").style.display = "block")));
|
||||
}
|
||||
function translate() {
|
||||
$.getScript("js/lib/i18next.min.js", function () {
|
||||
$.getScript("js/lib/i18nextXHRBackend.min.js", function () {
|
||||
$.getScript("js/lib/jquery-i18next.min.js", function () {
|
||||
var t = localStorage.getItem("lng");
|
||||
t || (localStorage.setItem("lng", "en-US"), (t = "en-US")),
|
||||
i18next.use(i18nextXHRBackend).init(
|
||||
{
|
||||
lng: t,
|
||||
fallbackLng: "en-US",
|
||||
backend: { loadPath: "locales/{{lng}}/translations.json" },
|
||||
},
|
||||
function (t, e) {
|
||||
jqueryI18next.init(i18next, $, {
|
||||
tName: "t",
|
||||
i18nName: "i18n",
|
||||
handleName: "localize",
|
||||
selectorAttr: "data-i18n",
|
||||
targetAttr: "i18n-target",
|
||||
optionsAttr: "i18n-options",
|
||||
useOptionsAttr: !1,
|
||||
parseDefaultValueFromContent: !0,
|
||||
}),
|
||||
$(document).localize();
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
function headerfooter() {
|
||||
$("#header").load("header.html", function (t, e, i) {
|
||||
$('#drop-lng [data-lng="' + localStorage.getItem("lng") + '"]').addClass(
|
||||
"xpto active"
|
||||
),
|
||||
$("#drop-lng label").click(function (t) {
|
||||
t.preventDefault(),
|
||||
localStorage.setItem("lng", $(this).attr("data-lng")),
|
||||
location.reload(!0);
|
||||
});
|
||||
}),
|
||||
$("#footer").load("footer.html", function (t, e, i) {
|
||||
$('#drop-lng [data-lng="' + localStorage.getItem("lng") + '"]').addClass(
|
||||
"xpto active"
|
||||
),
|
||||
$("#drop-lng label").click(function (t) {
|
||||
t.preventDefault(),
|
||||
localStorage.setItem("lng", $(this).attr("data-lng")),
|
||||
location.reload(!0);
|
||||
});
|
||||
});
|
||||
}
|
||||
function switching() {
|
||||
$(window).on("load", function () {
|
||||
var t = $("#run-switch"),
|
||||
e = $(".price-content .period", ".price-container");
|
||||
t.on("click", function () {
|
||||
if (
|
||||
($(".mo", this).toggleClass("active"),
|
||||
$(".an", this).toggleClass("active"),
|
||||
$(".month", this).toggleClass("active"),
|
||||
$(".switch", this).toggleClass("on"),
|
||||
$(".year", this).toggleClass("active"),
|
||||
e.hasClass("hourly"))
|
||||
) {
|
||||
e.text("month");
|
||||
for (var t = 0; t <= 4; t++)
|
||||
$(".price-container:eq(" + t + ") .value").text(
|
||||
parseFloat(
|
||||
Number($(".price-container:eq(" + t + ") .value").text()) / 12
|
||||
).toFixed(2)
|
||||
),
|
||||
$(".price-container:eq(" + t + ") .discount").text(
|
||||
parseFloat(
|
||||
Number($(".price-container:eq(" + t + ") .discount").text()) /
|
||||
12
|
||||
).toFixed(2)
|
||||
);
|
||||
} else {
|
||||
e.text("year");
|
||||
for (t = 0; t <= 4; t++)
|
||||
$(".price-container:eq(" + t + ") .value").text(
|
||||
parseFloat(
|
||||
12 * Number($(".price-container:eq(" + t + ") .value").text())
|
||||
).toFixed(2)
|
||||
),
|
||||
$(".price-container:eq(" + t + ") .discount").text(
|
||||
parseFloat(
|
||||
12 *
|
||||
Number($(".price-container:eq(" + t + ") .discount").text())
|
||||
).toFixed(2)
|
||||
);
|
||||
}
|
||||
e.toggleClass("hourly");
|
||||
});
|
||||
});
|
||||
}
|
||||
function openNav() {
|
||||
document.getElementById("myNav").style.display = "block";
|
||||
}
|
||||
function closeNav() {
|
||||
document.getElementById("myNav").style.display = "none";
|
||||
}
|
||||
function display() {
|
||||
$("#showall").on("click", function () {
|
||||
$(".targetDiv").show();
|
||||
}),
|
||||
$(".showSingle").on("click", function () {
|
||||
$(".targetDiv").hide(), $("#div" + $(this).attr("target")).show();
|
||||
});
|
||||
}
|
||||
function active() {
|
||||
$(".heading a").on("click", function () {
|
||||
$(".heading a").removeClass("active"), $(this).addClass("active");
|
||||
});
|
||||
}
|
||||
function scrollgoto() {
|
||||
$(".gocheck").on("click", function (t) {
|
||||
var e = $(this.getAttribute("href"));
|
||||
e.length &&
|
||||
(t.preventDefault(),
|
||||
$("html, body").stop().animate({ scrollTop: e.offset().top }, 0));
|
||||
});
|
||||
}
|
||||
function popover() {
|
||||
$('[data-bs-toggle="popover"]').popover();
|
||||
}
|
||||
function contactform() {
|
||||
$("#contactForm").on("submit", function (t) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "php/form-process.php",
|
||||
data: $(this).serialize(),
|
||||
success: function () {
|
||||
$("#msgSubmit").fadeIn(100).show();
|
||||
},
|
||||
}),
|
||||
t.preventDefault();
|
||||
});
|
||||
}
|
||||
function livechat() {}
|
||||
function isotope() {
|
||||
$(window).on("load", function () {
|
||||
var t,
|
||||
e = $(".featured").isotope({
|
||||
itemSelector: ".isotope-item",
|
||||
masonry: { columnWidth: ".isotope-item" },
|
||||
getSortData: {
|
||||
selectedCategory: function (e) {
|
||||
return $(e).hasClass(t) ? 0 : 1;
|
||||
},
|
||||
},
|
||||
}),
|
||||
i = $(".featured").find(".featured-items");
|
||||
$(".sort-button-group").on("click", ".button", function () {
|
||||
if ("all" === (t = $(this).attr("data-category")))
|
||||
return (
|
||||
e.isotope({ sortBy: "original-order" }), void i.css({ opacity: 1 })
|
||||
);
|
||||
var n = "." + t;
|
||||
i.filter(n).css({ opacity: 1 }),
|
||||
i.not(n).css({ opacity: 0 }),
|
||||
e.isotope("updateSortData"),
|
||||
e.isotope({ sortBy: "selectedCategory" });
|
||||
}),
|
||||
$(".button-group").each(function (t, e) {
|
||||
var i = $(e);
|
||||
i.on("click", "li", function () {
|
||||
i.find(".active").removeClass("active"), $(this).addClass("active");
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
function owldemo() {
|
||||
$(".owl-carousel").owlCarousel({
|
||||
onInitialized: function (t) {
|
||||
$(".active .owl-video-play-icon").trigger("click");
|
||||
},
|
||||
nav: !1,
|
||||
singleItem: !0,
|
||||
autoHeight: !0,
|
||||
dots: !0,
|
||||
center: !0,
|
||||
margin: 0,
|
||||
padding: 0,
|
||||
animateOut: "fadeOut",
|
||||
items: 1,
|
||||
autoPlay: 5500,
|
||||
stopOnHover: !0,
|
||||
center: !0,
|
||||
navigation: !1,
|
||||
pagination: !1,
|
||||
goToFirstSpeed: 1300,
|
||||
singleItem: !0,
|
||||
responsive: !0,
|
||||
responsiveRefreshRate: 200,
|
||||
responsiveBaseWidth: window,
|
||||
video: !0,
|
||||
autoplay: !0,
|
||||
autoplayTimeout: 9e3,
|
||||
autoplayHoverPause: !0,
|
||||
navText: [
|
||||
"<i class='fa fa-chevron-left'></i>",
|
||||
"<i class='fa fa-chevron-right'></i>",
|
||||
],
|
||||
responsive: { 0: { items: 1 } },
|
||||
});
|
||||
}
|
||||
function backtotop() {
|
||||
var t = $(".cd-top");
|
||||
$(window).scroll(function () {
|
||||
$(this).scrollTop() > 300
|
||||
? t.addClass("cd-is-visible")
|
||||
: t.removeClass("cd-is-visible cd-fade-out"),
|
||||
$(this).scrollTop() > 1200 && t.addClass("cd-fade-out");
|
||||
}),
|
||||
t.on("click", function (t) {
|
||||
t.preventDefault(), $("body,html").animate({ scrollTop: 0 }, 0);
|
||||
});
|
||||
}
|
||||
function loader() {
|
||||
$(window).on("load", function () {
|
||||
$("#spinner-area").fadeOut("slow");
|
||||
});
|
||||
}
|
||||
function listenSlick() {
|
||||
$(".slick").on("unslick", function () {
|
||||
var t = setInterval(function () {
|
||||
$(window).width() > 590 && (clearInterval(t), slick());
|
||||
}, 100);
|
||||
});
|
||||
}
|
||||
function slick() {
|
||||
$("#slider").slick({
|
||||
centerMode: !0,
|
||||
centerPadding: "200px",
|
||||
slidesToShow: 3,
|
||||
infinite: !0,
|
||||
arrows: !0,
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 1200,
|
||||
settings: {
|
||||
arrows: !0,
|
||||
centerMode: !0,
|
||||
centerPadding: "100px",
|
||||
slidesToShow: 3,
|
||||
},
|
||||
},
|
||||
{
|
||||
breakpoint: 991,
|
||||
settings: {
|
||||
arrows: !0,
|
||||
centerMode: !0,
|
||||
centerPadding: "200px",
|
||||
slidesToShow: 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
breakpoint: 768,
|
||||
settings: {
|
||||
arrows: !0,
|
||||
centerMode: !0,
|
||||
centerPadding: "150px",
|
||||
slidesToShow: 1,
|
||||
},
|
||||
},
|
||||
{ breakpoint: 590, settings: "unslick" },
|
||||
],
|
||||
});
|
||||
}
|
||||
function popup() {
|
||||
$(".popup-with-form").length &&
|
||||
$(".popup-with-form").magnificPopup({
|
||||
type: "image",
|
||||
preloader: !0,
|
||||
focus: "#name",
|
||||
closeOnBgClick: !0,
|
||||
callbacks: {
|
||||
beforeOpen: function () {
|
||||
$(window).width() < 700
|
||||
? (this.st.focus = !1)
|
||||
: (this.st.focus = "#name");
|
||||
},
|
||||
},
|
||||
}),
|
||||
$(".gallery-item").magnificPopup({
|
||||
delegate: "a",
|
||||
type: "image",
|
||||
tLoading: "Loading image #%curr%...",
|
||||
mainClass: "mfp-img-mobile",
|
||||
gallery: { enabled: !0, navigateByImgClick: !0, preload: [0, 1] },
|
||||
}),
|
||||
$(".image-link").magnificPopup({
|
||||
type: "image",
|
||||
mainClass: "mfp-with-zoom",
|
||||
gallery: { enabled: !0, navigateByImgClick: !0, preload: [0, 1] },
|
||||
image: { titleSrc: "title" },
|
||||
zoom: {
|
||||
enabled: !0,
|
||||
navigateByImgClick: !0,
|
||||
duration: 300,
|
||||
easing: "ease-in-out",
|
||||
opener: function (t) {
|
||||
return t.is("img") ? t : t.find("img");
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
function misc() {
|
||||
$("#myModal").on("shown.bs.modal", function () {
|
||||
$("#myInput").focus();
|
||||
});
|
||||
}
|
||||
setActiveColor(title),
|
||||
$("img.svg").each(function () {
|
||||
var t = jQuery(this),
|
||||
e = t.prop("attributes"),
|
||||
i = t.attr("src");
|
||||
$.get(i, function (i) {
|
||||
var n = $(i).find("svg");
|
||||
(n = n.removeAttr("xmlns:a")),
|
||||
$.each(e, function () {
|
||||
n.attr(this.name, this.value);
|
||||
}),
|
||||
t.replaceWith(n);
|
||||
});
|
||||
}),
|
||||
(function (t) {
|
||||
t(document).ready(function () {
|
||||
t(".styleswitch").click(function () {
|
||||
var e;
|
||||
return (
|
||||
(e = this.getAttribute("data-rel")),
|
||||
t("link[rel*=style][title]").each(function (t) {
|
||||
(this.disabled = !0),
|
||||
this.getAttribute("title") == e && (this.disabled = !1);
|
||||
}),
|
||||
!1
|
||||
);
|
||||
});
|
||||
});
|
||||
})(jQuery),
|
||||
jQuery(function (t) {
|
||||
var e = window.location.href;
|
||||
t("#menu ul li a").each(function () {
|
||||
this.href === e &&
|
||||
(t(this).addClass("active"),
|
||||
t(this).parent().parent().closest("li").addClass("active2"),
|
||||
t(".active2 a:first").addClass("active"));
|
||||
});
|
||||
}),
|
||||
$(".mobile .menu-item").on("click", function () {
|
||||
"none" === $(".sub-menu", this).css("display")
|
||||
? $(".sub-menu", this).css("display", "block")
|
||||
: $(".sub-menu", this).css("display", "none");
|
||||
}),
|
||||
$(document).ready(function () {
|
||||
$(".popup-youtube, .popup-vimeo, .popup-gmaps").magnificPopup({
|
||||
disableOn: 700,
|
||||
type: "iframe",
|
||||
mainClass: "mfp-fade",
|
||||
removalDelay: 160,
|
||||
preloader: !1,
|
||||
fixedContentPos: !1,
|
||||
});
|
||||
});
|
||||
// var mySwiper = new Swiper(".swiper-container", {
|
||||
// direction: "horizontal",
|
||||
// loop: !0,
|
||||
// autoHeight: !0,
|
||||
// grabCursor: !0,
|
||||
// centeredSlides: !0,
|
||||
// autoplay: { delay: 5e3, speed: 1e3, disableOnInteraction: !1 },
|
||||
// pagination: { el: ".swiper-pagination" },
|
||||
// navigation: { nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev" },
|
||||
// scrollbar: { el: ".swiper-scrollbar" },
|
||||
// });
|
||||
function loadTooltips() {
|
||||
$("#element").tooltip("show"),
|
||||
$(function () {
|
||||
$('[data-bs-toggle="tooltip"]').tooltip();
|
||||
});
|
||||
}
|
||||
function initSliderUI() {
|
||||
var t = 0;
|
||||
$(".slider-ui").length &&
|
||||
$(".slider-ui").each(function () {
|
||||
var e = $(this),
|
||||
i = e.find(".slider-line"),
|
||||
n = e.find(".slider-inp"),
|
||||
o = "sliderUI" + t,
|
||||
a = "inputUI" + t,
|
||||
l = parseInt(n.attr("data-start")),
|
||||
s = parseInt(n.attr("data-count-step"));
|
||||
i.attr("id", o), n.attr("id", a), t++, (s = s || 300);
|
||||
var r = document.getElementById(o),
|
||||
c = document.getElementById(a);
|
||||
function d() {
|
||||
return {
|
||||
VPS1: {
|
||||
name: "Service A",
|
||||
disk: "100GB",
|
||||
ram: "1GB",
|
||||
cpu: "1 Core",
|
||||
bandwith: "100GB",
|
||||
setup: "8€",
|
||||
ip: "2 IPs",
|
||||
price: "99.09",
|
||||
priceon: "8.26",
|
||||
orderlink:
|
||||
"http://inebur.com/whmcs/cart.php?a=add&pid=4&carttpl=antler",
|
||||
},
|
||||
VPS2: {
|
||||
name: "Service B",
|
||||
disk: "200GB",
|
||||
ram: "4GB",
|
||||
cpu: "2 Core",
|
||||
setup: "15€",
|
||||
ip: "4 IPs",
|
||||
bandwith: "500GB",
|
||||
price: "155.00",
|
||||
priceon: "12.92",
|
||||
orderlink:
|
||||
"http://inebur.com/whmcs/cart.php?a=add&pid=5&carttpl=antler",
|
||||
},
|
||||
VPS3: {
|
||||
name: "Service C",
|
||||
disk: "300GB",
|
||||
ram: "8GB",
|
||||
cpu: "4 Core",
|
||||
setup: "Free",
|
||||
ip: "8 IPs",
|
||||
bandwith: "2TB",
|
||||
price: "299.99",
|
||||
priceon: "25.00",
|
||||
orderlink:
|
||||
"http://inebur.com/whmcs/cart.php?a=add&pid=6&carttpl=antler",
|
||||
},
|
||||
VPS4: {
|
||||
name: "Service D",
|
||||
disk: "400GB",
|
||||
ram: "12GB",
|
||||
cpu: "4 Core",
|
||||
setup: "Free",
|
||||
ip: "8 IPs",
|
||||
bandwith: "Unlimited",
|
||||
price: "395.22",
|
||||
priceon: "32.94",
|
||||
orderlink:
|
||||
"http://inebur.com/whmcs/cart.php?a=confproduct&i=3&carttpl=antler",
|
||||
},
|
||||
VPS5: {
|
||||
name: "Service E",
|
||||
disk: "500GB",
|
||||
ram: "16GB",
|
||||
cpu: "8 Core",
|
||||
setup: "Free",
|
||||
ip: "12 IPs",
|
||||
bandwith: "Unlimited",
|
||||
price: "545.00",
|
||||
priceon: "45.42",
|
||||
orderlink:
|
||||
"http://inebur.com/whmcs/cart.php?a=confproduct&i=4&carttpl=antler",
|
||||
},
|
||||
};
|
||||
}
|
||||
noUiSlider.create(r, {
|
||||
start: l || 1,
|
||||
step: 1,
|
||||
connect: "lower",
|
||||
tooltips: !0,
|
||||
format: {
|
||||
to: function (t) {
|
||||
return "VPS" + t;
|
||||
},
|
||||
from: function (t) {
|
||||
return t;
|
||||
},
|
||||
},
|
||||
range: { min: 1, max: s },
|
||||
pips: {
|
||||
mode: "values",
|
||||
values: [1, 2, 3, 4, 5],
|
||||
density: 5,
|
||||
stepped: !0,
|
||||
},
|
||||
}),
|
||||
r.noUiSlider.on("change", function (t, e, i, n) {
|
||||
$(this.target)
|
||||
.closest(".sidebar")
|
||||
.find(".circle")
|
||||
.attr("data-percent", (parseInt(i) / s) * 100);
|
||||
}),
|
||||
r.noUiSlider.on("update", function (t, e) {
|
||||
var i, n;
|
||||
(i = t[e]),
|
||||
(n = d()),
|
||||
$("#disk-val").html(n[i].disk),
|
||||
$("#cpu-val").html(n[i].cpu),
|
||||
$("#ram-val").html(n[i].ram),
|
||||
$("#setup-val").html(n[i].setup),
|
||||
$("#ip-val").html(n[i].ip),
|
||||
$("#bw-val").html(n[i].bandwith),
|
||||
$("#price-val").html(n[i].price),
|
||||
$("#priceon-val").html(n[i].priceon),
|
||||
$("#orderlink-val").html(n[i].orderlink),
|
||||
(c.value = t[e]),
|
||||
(function (t) {
|
||||
var e = d();
|
||||
$("#orderlink").attr("href", e[t].orderlink);
|
||||
})(t[e]);
|
||||
}),
|
||||
c.addEventListener("change", function () {
|
||||
r.noUiSlider.set([null, this.value]);
|
||||
}),
|
||||
c.addEventListener("keydown", function (t) {
|
||||
var e = Number(r.noUiSlider.get()),
|
||||
i = r.noUiSlider.steps();
|
||||
switch (((i = i[0]), t.which)) {
|
||||
case 13:
|
||||
r.noUiSlider.set(this.value);
|
||||
break;
|
||||
case 38:
|
||||
r.noUiSlider.set(e + i[1]);
|
||||
break;
|
||||
case 40:
|
||||
r.noUiSlider.set(e - i[0]);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
function loadMenu() {
|
||||
$(".nav-menu .menu-toggle").on("click", function () {
|
||||
$(this).closest(".menu-wrap").toggleClass("active");
|
||||
}),
|
||||
$(".btn-scroll").on("click", function () {
|
||||
return (
|
||||
$("html, body").animate(
|
||||
{ scrollTop: $($.attr(this, "href")).offset().top - 10 },
|
||||
500
|
||||
),
|
||||
!1
|
||||
);
|
||||
});
|
||||
}
|
||||
function izotope() {
|
||||
if ($(".izotope-container").length) {
|
||||
var t = $(".izotope-container");
|
||||
t.isotope({
|
||||
itemSelector: ".item",
|
||||
layoutMode: "masonry",
|
||||
masonry: { columnWidth: ".item" },
|
||||
});
|
||||
}
|
||||
$("#filters").on("click", ".but", function () {
|
||||
$(".izotope-container").each(function () {
|
||||
$(this).find(".item").removeClass("animated");
|
||||
}),
|
||||
$("#filters .but").removeClass("activbut"),
|
||||
$(this).addClass("activbut");
|
||||
var e = $(this).attr("data-filter");
|
||||
t.isotope({ filter: e });
|
||||
});
|
||||
}
|
||||
function loadTabs() {
|
||||
$(".tabs-header").on("click", "li:not(.active)", function () {
|
||||
var t = $(this).index();
|
||||
$(this).addClass("active").siblings().removeClass("active"),
|
||||
$(this)
|
||||
.closest(".tabs")
|
||||
.find(".tabs-item")
|
||||
.removeClass("active")
|
||||
.eq(t)
|
||||
.addClass("active");
|
||||
});
|
||||
}
|
||||
function accordion() {
|
||||
$(".accordion").on("click", ".panel-title", function () {
|
||||
var t = $(this),
|
||||
e = t.parent();
|
||||
e.find(".panel-collapse").slideToggle("200"),
|
||||
t.toggleClass("active"),
|
||||
e.siblings().find(".panel-collapse").slideUp("200"),
|
||||
e.siblings().find(".panel-title").removeClass("active");
|
||||
}),
|
||||
accordHeight();
|
||||
}
|
||||
function accordHeight() {
|
||||
$(".accordion.faq .square").each(function () {
|
||||
$(this).css({
|
||||
height: $(this).parent().outerHeight(!0),
|
||||
"padding-top": $(this).parent().outerHeight(!0) / 2 - 20,
|
||||
});
|
||||
});
|
||||
}
|
||||
function loadSkills() {
|
||||
$(".circle")
|
||||
.not(".animated")
|
||||
.each(function () {
|
||||
$(window).scrollTop() >=
|
||||
$(this).offset().top - 0.7 * $(window).height() &&
|
||||
$(this).addClass("animated").circliful();
|
||||
});
|
||||
}
|
||||
function selectInit() {
|
||||
$(".selectpicker").each(function () {
|
||||
var t = $(this),
|
||||
e = t.attr("data-class");
|
||||
t.selectpicker({ style: "cst-select " + e });
|
||||
});
|
||||
}
|
||||
function loadWindowEvents() {
|
||||
$(window).on("resize", function () {
|
||||
offheight(), accordHeight();
|
||||
}),
|
||||
$(window).on("scroll", function () {
|
||||
loadSkills();
|
||||
}),
|
||||
$(window).on("scroll", function () {
|
||||
$(window).scrollTop() >= 100
|
||||
? $(".menu-wrap").addClass("fixed")
|
||||
: $(".menu-wrap").removeClass("fixed");
|
||||
});
|
||||
}
|
||||
function loadCountdown() {
|
||||
$("#clock").countdown("2022/10/24 00:00", function (t) {
|
||||
$(this).html(
|
||||
t.strftime(
|
||||
'<div>%w <span class="title">Weeks</span></div><div>%d <span class="title">days</span></div><div>%H <span class="title">hours</span></div><div>%S <span class="title">seconds</span></div>'
|
||||
)
|
||||
);
|
||||
});
|
||||
}
|
||||
function speacialCount() {
|
||||
$("#specialclock").countdown("2022/12/6", function (t) {
|
||||
$(this).html(t.strftime("Time left: [ %D days %H:%M:%S ]"));
|
||||
});
|
||||
}
|
||||
function offheight() {
|
||||
if ($(window).width() > 750) {
|
||||
var t = $(".offers").outerHeight(!0);
|
||||
$(".offers.light").css("height", t + 1);
|
||||
}
|
||||
}
|
||||
function loadWindowSettings() {
|
||||
offheight(),
|
||||
$(window).width() < 750 &&
|
||||
$(".nav-menu .main-menu > .menu-item-has-children > a").on(
|
||||
"click",
|
||||
function () {
|
||||
if ("#" !== $(this).attr("href"))
|
||||
return $(this).next().slideToggle(0), !1;
|
||||
}
|
||||
);
|
||||
}
|
||||
function updateSlidesPerView(t, e, i, n) {
|
||||
var o = $(window).width();
|
||||
$(window).height();
|
||||
return o > 1199 ? n : o > 991 ? i : o > 700 ? e : t;
|
||||
}
|
||||
$(function () {
|
||||
$('[data-bs-toggle="tooltip"]').tooltip();
|
||||
});
|
||||
18
static/felcloud/website/js/slick.min.js
vendored
Normal file
18
static/felcloud/website/js/slick.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7050
static/felcloud/website/js/swiper.min.js
vendored
Normal file
7050
static/felcloud/website/js/swiper.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
625
static/felcloud/website/js/typed.js
Normal file
625
static/felcloud/website/js/typed.js
Normal file
@ -0,0 +1,625 @@
|
||||
/*!
|
||||
*
|
||||
* typed.js - A JavaScript Typing Animation Library
|
||||
* Author: Matt Boldt <me@mattboldt.com>
|
||||
* Version: v2.0.11
|
||||
* Url: https://github.com/mattboldt/typed.js
|
||||
* License(s): MIT
|
||||
*
|
||||
*/
|
||||
(function (t, e) {
|
||||
"object" == typeof exports && "object" == typeof module
|
||||
? (module.exports = e())
|
||||
: "function" == typeof define && define.amd
|
||||
? define([], e)
|
||||
: "object" == typeof exports
|
||||
? (exports.Typed = e())
|
||||
: (t.Typed = e());
|
||||
})(this, function () {
|
||||
return (function (t) {
|
||||
function e(n) {
|
||||
if (s[n]) return s[n].exports;
|
||||
var i = (s[n] = { exports: {}, id: n, loaded: !1 });
|
||||
return t[n].call(i.exports, i, i.exports, e), (i.loaded = !0), i.exports;
|
||||
}
|
||||
var s = {};
|
||||
return (e.m = t), (e.c = s), (e.p = ""), e(0);
|
||||
})([
|
||||
function (t, e, s) {
|
||||
"use strict";
|
||||
function n(t, e) {
|
||||
if (!(t instanceof e))
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
Object.defineProperty(e, "__esModule", { value: !0 });
|
||||
var i = (function () {
|
||||
function t(t, e) {
|
||||
for (var s = 0; s < e.length; s++) {
|
||||
var n = e[s];
|
||||
(n.enumerable = n.enumerable || !1),
|
||||
(n.configurable = !0),
|
||||
"value" in n && (n.writable = !0),
|
||||
Object.defineProperty(t, n.key, n);
|
||||
}
|
||||
}
|
||||
return function (e, s, n) {
|
||||
return s && t(e.prototype, s), n && t(e, n), e;
|
||||
};
|
||||
})(),
|
||||
r = s(1),
|
||||
o = s(3),
|
||||
a = (function () {
|
||||
function t(e, s) {
|
||||
n(this, t), r.initializer.load(this, s, e), this.begin();
|
||||
}
|
||||
return (
|
||||
i(t, [
|
||||
{
|
||||
key: "toggle",
|
||||
value: function () {
|
||||
this.pause.status ? this.start() : this.stop();
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "stop",
|
||||
value: function () {
|
||||
this.typingComplete ||
|
||||
this.pause.status ||
|
||||
(this.toggleBlinking(!0),
|
||||
(this.pause.status = !0),
|
||||
this.options.onStop(this.arrayPos, this));
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "start",
|
||||
value: function () {
|
||||
this.typingComplete ||
|
||||
(this.pause.status &&
|
||||
((this.pause.status = !1),
|
||||
this.pause.typewrite
|
||||
? this.typewrite(
|
||||
this.pause.curString,
|
||||
this.pause.curStrPos
|
||||
)
|
||||
: this.backspace(
|
||||
this.pause.curString,
|
||||
this.pause.curStrPos
|
||||
),
|
||||
this.options.onStart(this.arrayPos, this)));
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "destroy",
|
||||
value: function () {
|
||||
this.reset(!1), this.options.onDestroy(this);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "reset",
|
||||
value: function () {
|
||||
var t =
|
||||
arguments.length <= 0 ||
|
||||
void 0 === arguments[0] ||
|
||||
arguments[0];
|
||||
clearInterval(this.timeout),
|
||||
this.replaceText(""),
|
||||
this.cursor &&
|
||||
this.cursor.parentNode &&
|
||||
(this.cursor.parentNode.removeChild(this.cursor),
|
||||
(this.cursor = null)),
|
||||
(this.strPos = 0),
|
||||
(this.arrayPos = 0),
|
||||
(this.curLoop = 0),
|
||||
t &&
|
||||
(this.insertCursor(),
|
||||
this.options.onReset(this),
|
||||
this.begin());
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "begin",
|
||||
value: function () {
|
||||
var t = this;
|
||||
this.options.onBegin(this),
|
||||
(this.typingComplete = !1),
|
||||
this.shuffleStringsIfNeeded(this),
|
||||
this.insertCursor(),
|
||||
this.bindInputFocusEvents && this.bindFocusEvents(),
|
||||
(this.timeout = setTimeout(function () {
|
||||
t.currentElContent && 0 !== t.currentElContent.length
|
||||
? t.backspace(
|
||||
t.currentElContent,
|
||||
t.currentElContent.length
|
||||
)
|
||||
: t.typewrite(
|
||||
t.strings[t.sequence[t.arrayPos]],
|
||||
t.strPos
|
||||
);
|
||||
}, this.startDelay));
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "typewrite",
|
||||
value: function (t, e) {
|
||||
var s = this;
|
||||
this.fadeOut &&
|
||||
this.el.classList.contains(this.fadeOutClass) &&
|
||||
(this.el.classList.remove(this.fadeOutClass),
|
||||
this.cursor &&
|
||||
this.cursor.classList.remove(this.fadeOutClass));
|
||||
var n = this.humanizer(this.typeSpeed),
|
||||
i = 1;
|
||||
return this.pause.status === !0
|
||||
? void this.setPauseStatus(t, e, !0)
|
||||
: void (this.timeout = setTimeout(function () {
|
||||
e = o.htmlParser.typeHtmlChars(t, e, s);
|
||||
var n = 0,
|
||||
r = t.substr(e);
|
||||
if ("^" === r.charAt(0) && /^\^\d+/.test(r)) {
|
||||
var a = 1;
|
||||
(r = /\d+/.exec(r)[0]),
|
||||
(a += r.length),
|
||||
(n = parseInt(r)),
|
||||
(s.temporaryPause = !0),
|
||||
s.options.onTypingPaused(s.arrayPos, s),
|
||||
(t = t.substring(0, e) + t.substring(e + a)),
|
||||
s.toggleBlinking(!0);
|
||||
}
|
||||
if ("`" === r.charAt(0)) {
|
||||
for (
|
||||
;
|
||||
"`" !== t.substr(e + i).charAt(0) &&
|
||||
(i++, !(e + i > t.length));
|
||||
|
||||
);
|
||||
var u = t.substring(0, e),
|
||||
l = t.substring(u.length + 1, e + i),
|
||||
c = t.substring(e + i + 1);
|
||||
(t = u + l + c), i--;
|
||||
}
|
||||
s.timeout = setTimeout(function () {
|
||||
s.toggleBlinking(!1),
|
||||
e >= t.length
|
||||
? s.doneTyping(t, e)
|
||||
: s.keepTyping(t, e, i),
|
||||
s.temporaryPause &&
|
||||
((s.temporaryPause = !1),
|
||||
s.options.onTypingResumed(s.arrayPos, s));
|
||||
}, n);
|
||||
}, n));
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "keepTyping",
|
||||
value: function (t, e, s) {
|
||||
0 === e &&
|
||||
(this.toggleBlinking(!1),
|
||||
this.options.preStringTyped(this.arrayPos, this)),
|
||||
(e += s);
|
||||
var n = t.substr(0, e);
|
||||
this.replaceText(n), this.typewrite(t, e);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "doneTyping",
|
||||
value: function (t, e) {
|
||||
var s = this;
|
||||
this.options.onStringTyped(this.arrayPos, this),
|
||||
this.toggleBlinking(!0),
|
||||
(this.arrayPos === this.strings.length - 1 &&
|
||||
(this.complete(),
|
||||
this.loop === !1 || this.curLoop === this.loopCount)) ||
|
||||
(this.timeout = setTimeout(function () {
|
||||
s.backspace(t, e);
|
||||
}, this.backDelay));
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "backspace",
|
||||
value: function (t, e) {
|
||||
var s = this;
|
||||
if (this.pause.status === !0)
|
||||
return void this.setPauseStatus(t, e, !0);
|
||||
if (this.fadeOut) return this.initFadeOut();
|
||||
this.toggleBlinking(!1);
|
||||
var n = this.humanizer(this.backSpeed);
|
||||
this.timeout = setTimeout(function () {
|
||||
e = o.htmlParser.backSpaceHtmlChars(t, e, s);
|
||||
var n = t.substr(0, e);
|
||||
if ((s.replaceText(n), s.smartBackspace)) {
|
||||
var i = s.strings[s.arrayPos + 1];
|
||||
i && n === i.substr(0, e)
|
||||
? (s.stopNum = e)
|
||||
: (s.stopNum = 0);
|
||||
}
|
||||
e > s.stopNum
|
||||
? (e--, s.backspace(t, e))
|
||||
: e <= s.stopNum &&
|
||||
(s.arrayPos++,
|
||||
s.arrayPos === s.strings.length
|
||||
? ((s.arrayPos = 0),
|
||||
s.options.onLastStringBackspaced(),
|
||||
s.shuffleStringsIfNeeded(),
|
||||
s.begin())
|
||||
: s.typewrite(s.strings[s.sequence[s.arrayPos]], e));
|
||||
}, n);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "complete",
|
||||
value: function () {
|
||||
this.options.onComplete(this),
|
||||
this.loop ? this.curLoop++ : (this.typingComplete = !0);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "setPauseStatus",
|
||||
value: function (t, e, s) {
|
||||
(this.pause.typewrite = s),
|
||||
(this.pause.curString = t),
|
||||
(this.pause.curStrPos = e);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "toggleBlinking",
|
||||
value: function (t) {
|
||||
this.cursor &&
|
||||
(this.pause.status ||
|
||||
(this.cursorBlinking !== t &&
|
||||
((this.cursorBlinking = t),
|
||||
t
|
||||
? this.cursor.classList.add("typed-cursor--blink")
|
||||
: this.cursor.classList.remove(
|
||||
"typed-cursor--blink"
|
||||
))));
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "humanizer",
|
||||
value: function (t) {
|
||||
return Math.round((Math.random() * t) / 2) + t;
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "shuffleStringsIfNeeded",
|
||||
value: function () {
|
||||
this.shuffle &&
|
||||
(this.sequence = this.sequence.sort(function () {
|
||||
return Math.random() - 0.5;
|
||||
}));
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "initFadeOut",
|
||||
value: function () {
|
||||
var t = this;
|
||||
return (
|
||||
(this.el.className += " " + this.fadeOutClass),
|
||||
this.cursor &&
|
||||
(this.cursor.className += " " + this.fadeOutClass),
|
||||
setTimeout(function () {
|
||||
t.arrayPos++,
|
||||
t.replaceText(""),
|
||||
t.strings.length > t.arrayPos
|
||||
? t.typewrite(t.strings[t.sequence[t.arrayPos]], 0)
|
||||
: (t.typewrite(t.strings[0], 0), (t.arrayPos = 0));
|
||||
}, this.fadeOutDelay)
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "replaceText",
|
||||
value: function (t) {
|
||||
this.attr
|
||||
? this.el.setAttribute(this.attr, t)
|
||||
: this.isInput
|
||||
? (this.el.value = t)
|
||||
: "html" === this.contentType
|
||||
? (this.el.innerHTML = t)
|
||||
: (this.el.textContent = t);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "bindFocusEvents",
|
||||
value: function () {
|
||||
var t = this;
|
||||
this.isInput &&
|
||||
(this.el.addEventListener("focus", function (e) {
|
||||
t.stop();
|
||||
}),
|
||||
this.el.addEventListener("blur", function (e) {
|
||||
(t.el.value && 0 !== t.el.value.length) || t.start();
|
||||
}));
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "insertCursor",
|
||||
value: function () {
|
||||
this.showCursor &&
|
||||
(this.cursor ||
|
||||
((this.cursor = document.createElement("span")),
|
||||
(this.cursor.className = "typed-cursor"),
|
||||
(this.cursor.innerHTML = this.cursorChar),
|
||||
this.el.parentNode &&
|
||||
this.el.parentNode.insertBefore(
|
||||
this.cursor,
|
||||
this.el.nextSibling
|
||||
)));
|
||||
},
|
||||
},
|
||||
]),
|
||||
t
|
||||
);
|
||||
})();
|
||||
(e["default"] = a), (t.exports = e["default"]);
|
||||
},
|
||||
function (t, e, s) {
|
||||
"use strict";
|
||||
function n(t) {
|
||||
return t && t.__esModule ? t : { default: t };
|
||||
}
|
||||
function i(t, e) {
|
||||
if (!(t instanceof e))
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
Object.defineProperty(e, "__esModule", { value: !0 });
|
||||
var r =
|
||||
Object.assign ||
|
||||
function (t) {
|
||||
for (var e = 1; e < arguments.length; e++) {
|
||||
var s = arguments[e];
|
||||
for (var n in s)
|
||||
Object.prototype.hasOwnProperty.call(s, n) && (t[n] = s[n]);
|
||||
}
|
||||
return t;
|
||||
},
|
||||
o = (function () {
|
||||
function t(t, e) {
|
||||
for (var s = 0; s < e.length; s++) {
|
||||
var n = e[s];
|
||||
(n.enumerable = n.enumerable || !1),
|
||||
(n.configurable = !0),
|
||||
"value" in n && (n.writable = !0),
|
||||
Object.defineProperty(t, n.key, n);
|
||||
}
|
||||
}
|
||||
return function (e, s, n) {
|
||||
return s && t(e.prototype, s), n && t(e, n), e;
|
||||
};
|
||||
})(),
|
||||
a = s(2),
|
||||
u = n(a),
|
||||
l = (function () {
|
||||
function t() {
|
||||
i(this, t);
|
||||
}
|
||||
return (
|
||||
o(t, [
|
||||
{
|
||||
key: "load",
|
||||
value: function (t, e, s) {
|
||||
if (
|
||||
("string" == typeof s
|
||||
? (t.el = document.querySelector(s))
|
||||
: (t.el = s),
|
||||
(t.options = r({}, u["default"], e)),
|
||||
(t.isInput = "input" === t.el.tagName.toLowerCase()),
|
||||
(t.attr = t.options.attr),
|
||||
(t.bindInputFocusEvents = t.options.bindInputFocusEvents),
|
||||
(t.showCursor = !t.isInput && t.options.showCursor),
|
||||
(t.cursorChar = t.options.cursorChar),
|
||||
(t.cursorBlinking = !0),
|
||||
(t.elContent = t.attr
|
||||
? t.el.getAttribute(t.attr)
|
||||
: t.el.textContent),
|
||||
(t.contentType = t.options.contentType),
|
||||
(t.typeSpeed = t.options.typeSpeed),
|
||||
(t.startDelay = t.options.startDelay),
|
||||
(t.backSpeed = t.options.backSpeed),
|
||||
(t.smartBackspace = t.options.smartBackspace),
|
||||
(t.backDelay = t.options.backDelay),
|
||||
(t.fadeOut = t.options.fadeOut),
|
||||
(t.fadeOutClass = t.options.fadeOutClass),
|
||||
(t.fadeOutDelay = t.options.fadeOutDelay),
|
||||
(t.isPaused = !1),
|
||||
(t.strings = t.options.strings.map(function (t) {
|
||||
return t.trim();
|
||||
})),
|
||||
"string" == typeof t.options.stringsElement
|
||||
? (t.stringsElement = document.querySelector(
|
||||
t.options.stringsElement
|
||||
))
|
||||
: (t.stringsElement = t.options.stringsElement),
|
||||
t.stringsElement)
|
||||
) {
|
||||
(t.strings = []), (t.stringsElement.style.display = "none");
|
||||
var n = Array.prototype.slice.apply(
|
||||
t.stringsElement.children
|
||||
),
|
||||
i = n.length;
|
||||
if (i)
|
||||
for (var o = 0; o < i; o += 1) {
|
||||
var a = n[o];
|
||||
t.strings.push(a.innerHTML.trim());
|
||||
}
|
||||
}
|
||||
(t.strPos = 0),
|
||||
(t.arrayPos = 0),
|
||||
(t.stopNum = 0),
|
||||
(t.loop = t.options.loop),
|
||||
(t.loopCount = t.options.loopCount),
|
||||
(t.curLoop = 0),
|
||||
(t.shuffle = t.options.shuffle),
|
||||
(t.sequence = []),
|
||||
(t.pause = {
|
||||
status: !1,
|
||||
typewrite: !0,
|
||||
curString: "",
|
||||
curStrPos: 0,
|
||||
}),
|
||||
(t.typingComplete = !1);
|
||||
for (var o in t.strings) t.sequence[o] = o;
|
||||
(t.currentElContent = this.getCurrentElContent(t)),
|
||||
(t.autoInsertCss = t.options.autoInsertCss),
|
||||
this.appendAnimationCss(t);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "getCurrentElContent",
|
||||
value: function (t) {
|
||||
var e = "";
|
||||
return (e = t.attr
|
||||
? t.el.getAttribute(t.attr)
|
||||
: t.isInput
|
||||
? t.el.value
|
||||
: "html" === t.contentType
|
||||
? t.el.innerHTML
|
||||
: t.el.textContent);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "appendAnimationCss",
|
||||
value: function (t) {
|
||||
var e = "data-typed-js-css";
|
||||
if (
|
||||
t.autoInsertCss &&
|
||||
(t.showCursor || t.fadeOut) &&
|
||||
!document.querySelector("[" + e + "]")
|
||||
) {
|
||||
var s = document.createElement("style");
|
||||
(s.type = "text/css"), s.setAttribute(e, !0);
|
||||
var n = "";
|
||||
t.showCursor &&
|
||||
(n +=
|
||||
"\n .typed-cursor{\n opacity: 1;\n }\n .typed-cursor.typed-cursor--blink{\n animation: typedjsBlink 0.7s infinite;\n -webkit-animation: typedjsBlink 0.7s infinite;\n animation: typedjsBlink 0.7s infinite;\n }\n @keyframes typedjsBlink{\n 50% { opacity: 0.0; }\n }\n @-webkit-keyframes typedjsBlink{\n 0% { opacity: 1; }\n 50% { opacity: 0.0; }\n 100% { opacity: 1; }\n }\n "),
|
||||
t.fadeOut &&
|
||||
(n +=
|
||||
"\n .typed-fade-out{\n opacity: 0;\n transition: opacity .25s;\n }\n .typed-cursor.typed-cursor--blink.typed-fade-out{\n -webkit-animation: 0;\n animation: 0;\n }\n "),
|
||||
0 !== s.length &&
|
||||
((s.innerHTML = n), document.body.appendChild(s));
|
||||
}
|
||||
},
|
||||
},
|
||||
]),
|
||||
t
|
||||
);
|
||||
})();
|
||||
e["default"] = l;
|
||||
var c = new l();
|
||||
e.initializer = c;
|
||||
},
|
||||
function (t, e) {
|
||||
"use strict";
|
||||
Object.defineProperty(e, "__esModule", { value: !0 });
|
||||
var s = {
|
||||
strings: [
|
||||
"These are the default values...",
|
||||
"You know what you should do?",
|
||||
"Use your own!",
|
||||
"Have a great day!",
|
||||
],
|
||||
stringsElement: null,
|
||||
typeSpeed: 0,
|
||||
startDelay: 0,
|
||||
backSpeed: 0,
|
||||
smartBackspace: !0,
|
||||
shuffle: !1,
|
||||
backDelay: 700,
|
||||
fadeOut: !1,
|
||||
fadeOutClass: "typed-fade-out",
|
||||
fadeOutDelay: 500,
|
||||
loop: !1,
|
||||
loopCount: 1 / 0,
|
||||
showCursor: !0,
|
||||
cursorChar: "|",
|
||||
autoInsertCss: !0,
|
||||
attr: null,
|
||||
bindInputFocusEvents: !1,
|
||||
contentType: "html",
|
||||
onBegin: function (t) {},
|
||||
onComplete: function (t) {},
|
||||
preStringTyped: function (t, e) {},
|
||||
onStringTyped: function (t, e) {},
|
||||
onLastStringBackspaced: function (t) {},
|
||||
onTypingPaused: function (t, e) {},
|
||||
onTypingResumed: function (t, e) {},
|
||||
onReset: function (t) {},
|
||||
onStop: function (t, e) {},
|
||||
onStart: function (t, e) {},
|
||||
onDestroy: function (t) {},
|
||||
};
|
||||
(e["default"] = s), (t.exports = e["default"]);
|
||||
},
|
||||
function (t, e) {
|
||||
"use strict";
|
||||
function s(t, e) {
|
||||
if (!(t instanceof e))
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
Object.defineProperty(e, "__esModule", { value: !0 });
|
||||
var n = (function () {
|
||||
function t(t, e) {
|
||||
for (var s = 0; s < e.length; s++) {
|
||||
var n = e[s];
|
||||
(n.enumerable = n.enumerable || !1),
|
||||
(n.configurable = !0),
|
||||
"value" in n && (n.writable = !0),
|
||||
Object.defineProperty(t, n.key, n);
|
||||
}
|
||||
}
|
||||
return function (e, s, n) {
|
||||
return s && t(e.prototype, s), n && t(e, n), e;
|
||||
};
|
||||
})(),
|
||||
i = (function () {
|
||||
function t() {
|
||||
s(this, t);
|
||||
}
|
||||
return (
|
||||
n(t, [
|
||||
{
|
||||
key: "typeHtmlChars",
|
||||
value: function (t, e, s) {
|
||||
if ("html" !== s.contentType) return e;
|
||||
var n = t.substr(e).charAt(0);
|
||||
if ("<" === n || "&" === n) {
|
||||
var i = "";
|
||||
for (
|
||||
i = "<" === n ? ">" : ";";
|
||||
t.substr(e + 1).charAt(0) !== i &&
|
||||
(e++, !(e + 1 > t.length));
|
||||
|
||||
);
|
||||
e++;
|
||||
}
|
||||
return e;
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "backSpaceHtmlChars",
|
||||
value: function (t, e, s) {
|
||||
if ("html" !== s.contentType) return e;
|
||||
var n = t.substr(e).charAt(0);
|
||||
if (">" === n || ";" === n) {
|
||||
var i = "";
|
||||
for (
|
||||
i = ">" === n ? "<" : "&";
|
||||
t.substr(e - 1).charAt(0) !== i && (e--, !(e < 0));
|
||||
|
||||
);
|
||||
e--;
|
||||
}
|
||||
return e;
|
||||
},
|
||||
},
|
||||
]),
|
||||
t
|
||||
);
|
||||
})();
|
||||
e["default"] = i;
|
||||
var r = new i();
|
||||
e.htmlParser = r;
|
||||
},
|
||||
]);
|
||||
});
|
||||
//# sourceMappingURL=typed.min.js.map
|
||||
448
static/felcloud/website/js/wow.min.js
vendored
Normal file
448
static/felcloud/website/js/wow.min.js
vendored
Normal file
@ -0,0 +1,448 @@
|
||||
/*! WOW - v1.1.3 - 2016-05-06
|
||||
* Copyright (c) 2016 Matthieu Aussaguel;*/ (function () {
|
||||
var a,
|
||||
b,
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f = function (a, b) {
|
||||
return function () {
|
||||
return a.apply(b, arguments);
|
||||
};
|
||||
},
|
||||
g =
|
||||
[].indexOf ||
|
||||
function (a) {
|
||||
for (var b = 0, c = this.length; c > b; b++)
|
||||
if (b in this && this[b] === a) return b;
|
||||
return -1;
|
||||
};
|
||||
(b = (function () {
|
||||
function a() {}
|
||||
return (
|
||||
(a.prototype.extend = function (a, b) {
|
||||
var c, d;
|
||||
for (c in b) (d = b[c]), null == a[c] && (a[c] = d);
|
||||
return a;
|
||||
}),
|
||||
(a.prototype.isMobile = function (a) {
|
||||
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
||||
a
|
||||
);
|
||||
}),
|
||||
(a.prototype.createEvent = function (a, b, c, d) {
|
||||
var e;
|
||||
return (
|
||||
null == b && (b = !1),
|
||||
null == c && (c = !1),
|
||||
null == d && (d = null),
|
||||
null != document.createEvent
|
||||
? ((e = document.createEvent("CustomEvent")),
|
||||
e.initCustomEvent(a, b, c, d))
|
||||
: null != document.createEventObject
|
||||
? ((e = document.createEventObject()), (e.eventType = a))
|
||||
: (e.eventName = a),
|
||||
e
|
||||
);
|
||||
}),
|
||||
(a.prototype.emitEvent = function (a, b) {
|
||||
return null != a.dispatchEvent
|
||||
? a.dispatchEvent(b)
|
||||
: b in (null != a)
|
||||
? a[b]()
|
||||
: "on" + b in (null != a)
|
||||
? a["on" + b]()
|
||||
: void 0;
|
||||
}),
|
||||
(a.prototype.addEvent = function (a, b, c) {
|
||||
return null != a.addEventListener
|
||||
? a.addEventListener(b, c, !1)
|
||||
: null != a.attachEvent
|
||||
? a.attachEvent("on" + b, c)
|
||||
: (a[b] = c);
|
||||
}),
|
||||
(a.prototype.removeEvent = function (a, b, c) {
|
||||
return null != a.removeEventListener
|
||||
? a.removeEventListener(b, c, !1)
|
||||
: null != a.detachEvent
|
||||
? a.detachEvent("on" + b, c)
|
||||
: delete a[b];
|
||||
}),
|
||||
(a.prototype.innerHeight = function () {
|
||||
return "innerHeight" in window
|
||||
? window.innerHeight
|
||||
: document.documentElement.clientHeight;
|
||||
}),
|
||||
a
|
||||
);
|
||||
})()),
|
||||
(c =
|
||||
this.WeakMap ||
|
||||
this.MozWeakMap ||
|
||||
(c = (function () {
|
||||
function a() {
|
||||
(this.keys = []), (this.values = []);
|
||||
}
|
||||
return (
|
||||
(a.prototype.get = function (a) {
|
||||
var b, c, d, e, f;
|
||||
for (f = this.keys, b = d = 0, e = f.length; e > d; b = ++d)
|
||||
if (((c = f[b]), c === a)) return this.values[b];
|
||||
}),
|
||||
(a.prototype.set = function (a, b) {
|
||||
var c, d, e, f, g;
|
||||
for (g = this.keys, c = e = 0, f = g.length; f > e; c = ++e)
|
||||
if (((d = g[c]), d === a)) return void (this.values[c] = b);
|
||||
return this.keys.push(a), this.values.push(b);
|
||||
}),
|
||||
a
|
||||
);
|
||||
})())),
|
||||
(a =
|
||||
this.MutationObserver ||
|
||||
this.WebkitMutationObserver ||
|
||||
this.MozMutationObserver ||
|
||||
(a = (function () {
|
||||
function a() {
|
||||
"undefined" != typeof console &&
|
||||
null !== console &&
|
||||
console.warn("MutationObserver is not supported by your browser."),
|
||||
"undefined" != typeof console &&
|
||||
null !== console &&
|
||||
console.warn(
|
||||
"WOW.js cannot detect dom mutations, please call .sync() after loading new content."
|
||||
);
|
||||
}
|
||||
return (a.notSupported = !0), (a.prototype.observe = function () {}), a;
|
||||
})())),
|
||||
(d =
|
||||
this.getComputedStyle ||
|
||||
function (a, b) {
|
||||
return (
|
||||
(this.getPropertyValue = function (b) {
|
||||
var c;
|
||||
return (
|
||||
"float" === b && (b = "styleFloat"),
|
||||
e.test(b) &&
|
||||
b.replace(e, function (a, b) {
|
||||
return b.toUpperCase();
|
||||
}),
|
||||
(null != (c = a.currentStyle) ? c[b] : void 0) || null
|
||||
);
|
||||
}),
|
||||
this
|
||||
);
|
||||
}),
|
||||
(e = /(\-([a-z]){1})/g),
|
||||
(this.WOW = (function () {
|
||||
function e(a) {
|
||||
null == a && (a = {}),
|
||||
(this.scrollCallback = f(this.scrollCallback, this)),
|
||||
(this.scrollHandler = f(this.scrollHandler, this)),
|
||||
(this.resetAnimation = f(this.resetAnimation, this)),
|
||||
(this.start = f(this.start, this)),
|
||||
(this.scrolled = !0),
|
||||
(this.config = this.util().extend(a, this.defaults)),
|
||||
null != a.scrollContainer &&
|
||||
(this.config.scrollContainer = document.querySelector(
|
||||
a.scrollContainer
|
||||
)),
|
||||
(this.animationNameCache = new c()),
|
||||
(this.wowEvent = this.util().createEvent(this.config.boxClass));
|
||||
}
|
||||
return (
|
||||
(e.prototype.defaults = {
|
||||
boxClass: "wow",
|
||||
animateClass: "animated",
|
||||
offset: 0,
|
||||
mobile: !0,
|
||||
live: !0,
|
||||
callback: null,
|
||||
scrollContainer: null,
|
||||
}),
|
||||
(e.prototype.init = function () {
|
||||
var a;
|
||||
return (
|
||||
(this.element = window.document.documentElement),
|
||||
"interactive" === (a = document.readyState) || "complete" === a
|
||||
? this.start()
|
||||
: this.util().addEvent(document, "DOMContentLoaded", this.start),
|
||||
(this.finished = [])
|
||||
);
|
||||
}),
|
||||
(e.prototype.start = function () {
|
||||
var b, c, d, e;
|
||||
if (
|
||||
((this.stopped = !1),
|
||||
(this.boxes = function () {
|
||||
var a, c, d, e;
|
||||
for (
|
||||
d = this.element.querySelectorAll("." + this.config.boxClass),
|
||||
e = [],
|
||||
a = 0,
|
||||
c = d.length;
|
||||
c > a;
|
||||
a++
|
||||
)
|
||||
(b = d[a]), e.push(b);
|
||||
return e;
|
||||
}.call(this)),
|
||||
(this.all = function () {
|
||||
var a, c, d, e;
|
||||
for (d = this.boxes, e = [], a = 0, c = d.length; c > a; a++)
|
||||
(b = d[a]), e.push(b);
|
||||
return e;
|
||||
}.call(this)),
|
||||
this.boxes.length)
|
||||
)
|
||||
if (this.disabled()) this.resetStyle();
|
||||
else
|
||||
for (e = this.boxes, c = 0, d = e.length; d > c; c++)
|
||||
(b = e[c]), this.applyStyle(b, !0);
|
||||
return (
|
||||
this.disabled() ||
|
||||
(this.util().addEvent(
|
||||
this.config.scrollContainer || window,
|
||||
"scroll",
|
||||
this.scrollHandler
|
||||
),
|
||||
this.util().addEvent(window, "resize", this.scrollHandler),
|
||||
(this.interval = setInterval(this.scrollCallback, 50))),
|
||||
this.config.live
|
||||
? new a(
|
||||
(function (a) {
|
||||
return function (b) {
|
||||
var c, d, e, f, g;
|
||||
for (g = [], c = 0, d = b.length; d > c; c++)
|
||||
(f = b[c]),
|
||||
g.push(
|
||||
function () {
|
||||
var a, b, c, d;
|
||||
for (
|
||||
c = f.addedNodes || [],
|
||||
d = [],
|
||||
a = 0,
|
||||
b = c.length;
|
||||
b > a;
|
||||
a++
|
||||
)
|
||||
(e = c[a]), d.push(this.doSync(e));
|
||||
return d;
|
||||
}.call(a)
|
||||
);
|
||||
return g;
|
||||
};
|
||||
})(this)
|
||||
).observe(document.body, { childList: !0, subtree: !0 })
|
||||
: void 0
|
||||
);
|
||||
}),
|
||||
(e.prototype.stop = function () {
|
||||
return (
|
||||
(this.stopped = !0),
|
||||
this.util().removeEvent(
|
||||
this.config.scrollContainer || window,
|
||||
"scroll",
|
||||
this.scrollHandler
|
||||
),
|
||||
this.util().removeEvent(window, "resize", this.scrollHandler),
|
||||
null != this.interval ? clearInterval(this.interval) : void 0
|
||||
);
|
||||
}),
|
||||
(e.prototype.sync = function (b) {
|
||||
return a.notSupported ? this.doSync(this.element) : void 0;
|
||||
}),
|
||||
(e.prototype.doSync = function (a) {
|
||||
var b, c, d, e, f;
|
||||
if ((null == a && (a = this.element), 1 === a.nodeType)) {
|
||||
for (
|
||||
a = a.parentNode || a,
|
||||
e = a.querySelectorAll("." + this.config.boxClass),
|
||||
f = [],
|
||||
c = 0,
|
||||
d = e.length;
|
||||
d > c;
|
||||
c++
|
||||
)
|
||||
(b = e[c]),
|
||||
g.call(this.all, b) < 0
|
||||
? (this.boxes.push(b),
|
||||
this.all.push(b),
|
||||
this.stopped || this.disabled()
|
||||
? this.resetStyle()
|
||||
: this.applyStyle(b, !0),
|
||||
f.push((this.scrolled = !0)))
|
||||
: f.push(void 0);
|
||||
return f;
|
||||
}
|
||||
}),
|
||||
(e.prototype.show = function (a) {
|
||||
return (
|
||||
this.applyStyle(a),
|
||||
(a.className = a.className + " " + this.config.animateClass),
|
||||
null != this.config.callback && this.config.callback(a),
|
||||
this.util().emitEvent(a, this.wowEvent),
|
||||
this.util().addEvent(a, "animationend", this.resetAnimation),
|
||||
this.util().addEvent(a, "oanimationend", this.resetAnimation),
|
||||
this.util().addEvent(a, "webkitAnimationEnd", this.resetAnimation),
|
||||
this.util().addEvent(a, "MSAnimationEnd", this.resetAnimation),
|
||||
a
|
||||
);
|
||||
}),
|
||||
(e.prototype.applyStyle = function (a, b) {
|
||||
var c, d, e;
|
||||
return (
|
||||
(d = a.getAttribute("data-wow-duration")),
|
||||
(c = a.getAttribute("data-wow-delay")),
|
||||
(e = a.getAttribute("data-wow-iteration")),
|
||||
this.animate(
|
||||
(function (f) {
|
||||
return function () {
|
||||
return f.customStyle(a, b, d, c, e);
|
||||
};
|
||||
})(this)
|
||||
)
|
||||
);
|
||||
}),
|
||||
(e.prototype.animate = (function () {
|
||||
return "requestAnimationFrame" in window
|
||||
? function (a) {
|
||||
return window.requestAnimationFrame(a);
|
||||
}
|
||||
: function (a) {
|
||||
return a();
|
||||
};
|
||||
})()),
|
||||
(e.prototype.resetStyle = function () {
|
||||
var a, b, c, d, e;
|
||||
for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++)
|
||||
(a = d[b]), e.push((a.style.visibility = "visible"));
|
||||
return e;
|
||||
}),
|
||||
(e.prototype.resetAnimation = function (a) {
|
||||
var b;
|
||||
return a.type.toLowerCase().indexOf("animationend") >= 0
|
||||
? ((b = a.target || a.srcElement),
|
||||
(b.className = b.className
|
||||
.replace(this.config.animateClass, "")
|
||||
.trim()))
|
||||
: void 0;
|
||||
}),
|
||||
(e.prototype.customStyle = function (a, b, c, d, e) {
|
||||
return (
|
||||
b && this.cacheAnimationName(a),
|
||||
(a.style.visibility = b ? "hidden" : "visible"),
|
||||
c && this.vendorSet(a.style, { animationDuration: c }),
|
||||
d && this.vendorSet(a.style, { animationDelay: d }),
|
||||
e && this.vendorSet(a.style, { animationIterationCount: e }),
|
||||
this.vendorSet(a.style, {
|
||||
animationName: b ? "none" : this.cachedAnimationName(a),
|
||||
}),
|
||||
a
|
||||
);
|
||||
}),
|
||||
(e.prototype.vendors = ["moz", "webkit"]),
|
||||
(e.prototype.vendorSet = function (a, b) {
|
||||
var c, d, e, f;
|
||||
d = [];
|
||||
for (c in b)
|
||||
(e = b[c]),
|
||||
(a["" + c] = e),
|
||||
d.push(
|
||||
function () {
|
||||
var b, d, g, h;
|
||||
for (
|
||||
g = this.vendors, h = [], b = 0, d = g.length;
|
||||
d > b;
|
||||
b++
|
||||
)
|
||||
(f = g[b]),
|
||||
h.push(
|
||||
(a["" + f + c.charAt(0).toUpperCase() + c.substr(1)] =
|
||||
e)
|
||||
);
|
||||
return h;
|
||||
}.call(this)
|
||||
);
|
||||
return d;
|
||||
}),
|
||||
(e.prototype.vendorCSS = function (a, b) {
|
||||
var c, e, f, g, h, i;
|
||||
for (
|
||||
h = d(a),
|
||||
g = h.getPropertyCSSValue(b),
|
||||
f = this.vendors,
|
||||
c = 0,
|
||||
e = f.length;
|
||||
e > c;
|
||||
c++
|
||||
)
|
||||
(i = f[c]), (g = g || h.getPropertyCSSValue("-" + i + "-" + b));
|
||||
return g;
|
||||
}),
|
||||
(e.prototype.animationName = function (a) {
|
||||
var b;
|
||||
try {
|
||||
b = this.vendorCSS(a, "animation-name").cssText;
|
||||
} catch (c) {
|
||||
b = d(a).getPropertyValue("animation-name");
|
||||
}
|
||||
return "none" === b ? "" : b;
|
||||
}),
|
||||
(e.prototype.cacheAnimationName = function (a) {
|
||||
return this.animationNameCache.set(a, this.animationName(a));
|
||||
}),
|
||||
(e.prototype.cachedAnimationName = function (a) {
|
||||
return this.animationNameCache.get(a);
|
||||
}),
|
||||
(e.prototype.scrollHandler = function () {
|
||||
return (this.scrolled = !0);
|
||||
}),
|
||||
(e.prototype.scrollCallback = function () {
|
||||
var a;
|
||||
return !this.scrolled ||
|
||||
((this.scrolled = !1),
|
||||
(this.boxes = function () {
|
||||
var b, c, d, e;
|
||||
for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++)
|
||||
(a = d[b]), a && (this.isVisible(a) ? this.show(a) : e.push(a));
|
||||
return e;
|
||||
}.call(this)),
|
||||
this.boxes.length || this.config.live)
|
||||
? void 0
|
||||
: this.stop();
|
||||
}),
|
||||
(e.prototype.offsetTop = function (a) {
|
||||
for (var b; void 0 === a.offsetTop; ) a = a.parentNode;
|
||||
for (b = a.offsetTop; (a = a.offsetParent); ) b += a.offsetTop;
|
||||
return b;
|
||||
}),
|
||||
(e.prototype.isVisible = function (a) {
|
||||
var b, c, d, e, f;
|
||||
return (
|
||||
(c = a.getAttribute("data-wow-offset") || this.config.offset),
|
||||
(f =
|
||||
(this.config.scrollContainer &&
|
||||
this.config.scrollContainer.scrollTop) ||
|
||||
window.pageYOffset),
|
||||
(e =
|
||||
f +
|
||||
Math.min(this.element.clientHeight, this.util().innerHeight()) -
|
||||
c),
|
||||
(d = this.offsetTop(a)),
|
||||
(b = d + a.clientHeight),
|
||||
e >= d && b >= f
|
||||
);
|
||||
}),
|
||||
(e.prototype.util = function () {
|
||||
return null != this._util ? this._util : (this._util = new b());
|
||||
}),
|
||||
(e.prototype.disabled = function () {
|
||||
return (
|
||||
!this.config.mobile && this.util().isMobile(navigator.userAgent)
|
||||
);
|
||||
}),
|
||||
e
|
||||
);
|
||||
})());
|
||||
}).call(this);
|
||||
204
static/global/js/Plugin.js
Normal file
204
static/global/js/Plugin.js
Normal file
@ -0,0 +1,204 @@
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define("/Plugin", ["exports", "jquery"], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(exports, require("jquery"));
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {},
|
||||
};
|
||||
factory(mod.exports, global.jQuery);
|
||||
global.Plugin = mod.exports;
|
||||
}
|
||||
})(this, function (_exports, _jquery) {
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(_exports, "__esModule", {
|
||||
value: true,
|
||||
});
|
||||
_exports.getPluginAPI = getPluginAPI;
|
||||
_exports.getPlugin = getPlugin;
|
||||
_exports.getDefaults = getDefaults;
|
||||
_exports.pluginFactory = pluginFactory;
|
||||
_exports.default = _exports.Plugin = void 0;
|
||||
_jquery = babelHelpers.interopRequireDefault(_jquery);
|
||||
var plugins = {};
|
||||
var apis = {};
|
||||
|
||||
var Plugin =
|
||||
/*#__PURE__*/
|
||||
(function () {
|
||||
function Plugin($el) {
|
||||
var options =
|
||||
arguments.length > 1 && arguments[1] !== undefined
|
||||
? arguments[1]
|
||||
: {};
|
||||
babelHelpers.classCallCheck(this, Plugin);
|
||||
this.name = this.getName();
|
||||
this.$el = $el;
|
||||
this.options = options;
|
||||
this.isRendered = false;
|
||||
}
|
||||
|
||||
babelHelpers.createClass(
|
||||
Plugin,
|
||||
[
|
||||
{
|
||||
key: "getName",
|
||||
value: function getName() {
|
||||
return "plugin";
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "render",
|
||||
value: function render() {
|
||||
if (_jquery.default.fn[this.name]) {
|
||||
this.$el[this.name](this.options);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "initialize",
|
||||
value: function initialize() {
|
||||
if (this.isRendered) {
|
||||
return false;
|
||||
}
|
||||
|
||||
this.render();
|
||||
this.isRendered = true;
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
key: "getDefaults",
|
||||
value: function getDefaults() {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "register",
|
||||
value: function register(name, obj) {
|
||||
if (typeof obj === "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
plugins[name] = obj;
|
||||
|
||||
if (typeof obj.api !== "undefined") {
|
||||
Plugin.registerApi(name, obj);
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "registerApi",
|
||||
value: function registerApi(name, obj) {
|
||||
var api = obj.api();
|
||||
|
||||
if (typeof api === "string") {
|
||||
var _api = obj.api().split("|");
|
||||
|
||||
var event = "".concat(_api[0], ".plugin.").concat(name);
|
||||
var func = _api[1] || "render";
|
||||
|
||||
var callback = function callback(e) {
|
||||
var $el = (0, _jquery.default)(this);
|
||||
var plugin = $el.data("pluginInstance");
|
||||
|
||||
if (!plugin) {
|
||||
plugin = new obj(
|
||||
$el,
|
||||
_jquery.default.extend(
|
||||
true,
|
||||
{},
|
||||
getDefaults(name),
|
||||
$el.data()
|
||||
)
|
||||
);
|
||||
plugin.initialize();
|
||||
$el.data("pluginInstance", plugin);
|
||||
}
|
||||
|
||||
plugin[func](e);
|
||||
};
|
||||
|
||||
apis[name] = function (selector, context) {
|
||||
if (context) {
|
||||
(0, _jquery.default)(context).off(event);
|
||||
(0, _jquery.default)(context).on(event, selector, callback);
|
||||
} else {
|
||||
(0, _jquery.default)(selector).on(event, callback);
|
||||
}
|
||||
};
|
||||
} else if (typeof api === "function") {
|
||||
apis[name] = api;
|
||||
}
|
||||
},
|
||||
},
|
||||
]
|
||||
);
|
||||
return Plugin;
|
||||
})();
|
||||
|
||||
_exports.Plugin = Plugin;
|
||||
|
||||
function getPluginAPI(name) {
|
||||
if (typeof name === "undefined") {
|
||||
return apis;
|
||||
}
|
||||
|
||||
return apis[name];
|
||||
}
|
||||
|
||||
function getPlugin(name) {
|
||||
if (typeof plugins[name] !== "undefined") {
|
||||
return plugins[name];
|
||||
}
|
||||
|
||||
console.warn("Plugin:".concat(name, " has no warpped class."));
|
||||
return false;
|
||||
}
|
||||
|
||||
function getDefaults(name) {
|
||||
var PluginClass = getPlugin(name);
|
||||
|
||||
if (PluginClass) {
|
||||
return PluginClass.getDefaults();
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
function pluginFactory(name, $el) {
|
||||
var options =
|
||||
arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||
var PluginClass = getPlugin(name);
|
||||
|
||||
if (PluginClass && typeof PluginClass.api === "undefined") {
|
||||
return new PluginClass(
|
||||
$el,
|
||||
_jquery.default.extend(true, {}, getDefaults(name), options)
|
||||
);
|
||||
} else if (_jquery.default.fn[name]) {
|
||||
var plugin = new Plugin($el, options);
|
||||
|
||||
plugin.getName = function () {
|
||||
return name;
|
||||
};
|
||||
|
||||
plugin.name = name;
|
||||
return plugin;
|
||||
} else if (typeof PluginClass.api !== "undefined") {
|
||||
// console.log('Plugin:' + name + ' use api render.');
|
||||
return false;
|
||||
}
|
||||
|
||||
console.warn("Plugin:".concat(name, " script is not loaded."));
|
||||
return false;
|
||||
}
|
||||
|
||||
var _default = Plugin;
|
||||
_exports.default = _default;
|
||||
});
|
||||
103
static/global/js/Plugin/toastr.js
Normal file
103
static/global/js/Plugin/toastr.js
Normal file
@ -0,0 +1,103 @@
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define("/Plugin/toastr", ["exports", "Plugin"], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(exports, require("Plugin"));
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {},
|
||||
};
|
||||
factory(mod.exports, global.Plugin);
|
||||
global.PluginToastr = mod.exports;
|
||||
}
|
||||
})(this, function (_exports, _Plugin2) {
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(_exports, "__esModule", {
|
||||
value: true,
|
||||
});
|
||||
_exports.default = void 0;
|
||||
_Plugin2 = babelHelpers.interopRequireDefault(_Plugin2);
|
||||
var NAME = "toastr";
|
||||
|
||||
var Toastr =
|
||||
/*#__PURE__*/
|
||||
(function (_Plugin) {
|
||||
babelHelpers.inherits(Toastr, _Plugin);
|
||||
|
||||
function Toastr() {
|
||||
babelHelpers.classCallCheck(this, Toastr);
|
||||
return babelHelpers.possibleConstructorReturn(
|
||||
this,
|
||||
babelHelpers.getPrototypeOf(Toastr).apply(this, arguments)
|
||||
);
|
||||
}
|
||||
|
||||
babelHelpers.createClass(
|
||||
Toastr,
|
||||
[
|
||||
{
|
||||
key: "getName",
|
||||
value: function getName() {
|
||||
return NAME;
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "render",
|
||||
value: function render() {
|
||||
this.$el.data("toastrWrapApi", this);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: "show",
|
||||
value: function show(e) {
|
||||
if (typeof toastr === "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
var options = this.options;
|
||||
var message = options.message || "";
|
||||
var type = options.type || "info";
|
||||
var title = options.title || undefined;
|
||||
|
||||
switch (type) {
|
||||
case "success":
|
||||
toastr.success(message, title, options);
|
||||
break;
|
||||
|
||||
case "warning":
|
||||
toastr.warning(message, title, options);
|
||||
break;
|
||||
|
||||
case "error":
|
||||
toastr.error(message, title, options);
|
||||
break;
|
||||
|
||||
case "info":
|
||||
toastr.info(message, title, options);
|
||||
break;
|
||||
|
||||
default:
|
||||
toastr.info(message, title, options);
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
key: "api",
|
||||
value: function api() {
|
||||
return "click|show";
|
||||
},
|
||||
},
|
||||
]
|
||||
);
|
||||
return Toastr;
|
||||
})(_Plugin2.default);
|
||||
|
||||
_Plugin2.default.register(NAME, Toastr);
|
||||
|
||||
var _default = Toastr;
|
||||
_exports.default = _default;
|
||||
});
|
||||
3076
static/global/js/htmx.min.js
vendored
Normal file
3076
static/global/js/htmx.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1450
static/global/vendor/babel-external-helpers/babel-external-helpers.js
vendored
Normal file
1450
static/global/vendor/babel-external-helpers/babel-external-helpers.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
282
static/global/vendor/toastr/toastr.css
vendored
Normal file
282
static/global/vendor/toastr/toastr.css
vendored
Normal file
@ -0,0 +1,282 @@
|
||||
@charset "UTF-8";
|
||||
.toast-title {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.toast-message {
|
||||
-ms-word-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.toast-message a,
|
||||
.toast-message label {
|
||||
color: #fff;
|
||||
}
|
||||
.toast-message a:hover {
|
||||
color: #ccd5db;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.toast-close-button {
|
||||
position: relative;
|
||||
top: -0.3em;
|
||||
right: -0.3em;
|
||||
float: right;
|
||||
margin-bottom: -0.5em;
|
||||
font-size: 20px;
|
||||
font-weight: 400;
|
||||
color: #fff;
|
||||
-webkit-text-shadow: 0 1px 0 white;
|
||||
text-shadow: 0 1px 0 white;
|
||||
opacity: 0.8;
|
||||
}
|
||||
.toast-close-button:hover,
|
||||
.toast-close-button:focus {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
opacity: 0.4;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/*Additional properties for button version
|
||||
iOS requires the button element instead of an anchor tag.
|
||||
If you want the anchor version, it requires `href="#"`.*/
|
||||
button.toast-close-button {
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
.toast-top-center {
|
||||
top: 12px;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.toast-bottom-center {
|
||||
right: 0;
|
||||
bottom: 12px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.toast-top-full-width {
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.toast-top-full-width .toast {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.toast-bottom-full-width {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.toast-bottom-full-width .toast {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.toast-top-left {
|
||||
top: 12px;
|
||||
left: 12px;
|
||||
}
|
||||
|
||||
.toast-top-right {
|
||||
top: 12px;
|
||||
right: 12px;
|
||||
}
|
||||
|
||||
.toast-bottom-right {
|
||||
right: 12px;
|
||||
bottom: 12px;
|
||||
}
|
||||
|
||||
.toast-bottom-left {
|
||||
bottom: 12px;
|
||||
left: 12px;
|
||||
}
|
||||
|
||||
.toast-example,
|
||||
#toast-container {
|
||||
position: fixed;
|
||||
z-index: 1700;
|
||||
pointer-events: none;
|
||||
/*overrides*/
|
||||
}
|
||||
.toast-example *,
|
||||
#toast-container * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.toast-example > div,
|
||||
#toast-container > div {
|
||||
position: relative;
|
||||
width: 300px;
|
||||
padding: 15px 20px;
|
||||
margin: 0 0 6px;
|
||||
overflow: hidden;
|
||||
color: #a3afb7;
|
||||
pointer-events: auto;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 15px center;
|
||||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||
border-radius: 0.215rem;
|
||||
opacity: 0.95;
|
||||
}
|
||||
.toast-example > .toast-shadow,
|
||||
#toast-container > .toast-shadow {
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.23);
|
||||
}
|
||||
.toast-example > .toast-shadow:hover,
|
||||
#toast-container > .toast-shadow:hover {
|
||||
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.23);
|
||||
}
|
||||
.toast-example > :hover,
|
||||
#toast-container > :hover {
|
||||
cursor: pointer;
|
||||
opacity: 1;
|
||||
}
|
||||
.toast-example > .toast-success:not(.toast-just-text),
|
||||
.toast-example > .toast-info:not(.toast-just-text),
|
||||
.toast-example > .toast-warning:not(.toast-just-text),
|
||||
.toast-example > .toast-error:not(.toast-just-text),
|
||||
#toast-container > .toast-success:not(.toast-just-text),
|
||||
#toast-container > .toast-info:not(.toast-just-text),
|
||||
#toast-container > .toast-warning:not(.toast-just-text),
|
||||
#toast-container > .toast-error:not(.toast-just-text) {
|
||||
padding-left: 50px;
|
||||
}
|
||||
.toast-example > .toast-success:not(.toast-just-text):before,
|
||||
.toast-example > .toast-info:not(.toast-just-text):before,
|
||||
.toast-example > .toast-warning:not(.toast-just-text):before,
|
||||
.toast-example > .toast-error:not(.toast-just-text):before,
|
||||
#toast-container > .toast-success:not(.toast-just-text):before,
|
||||
#toast-container > .toast-info:not(.toast-just-text):before,
|
||||
#toast-container > .toast-warning:not(.toast-just-text):before,
|
||||
#toast-container > .toast-error:not(.toast-just-text):before {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 12px;
|
||||
font-family: "Web Icons";
|
||||
font-size: 30px;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
text-rendering: auto;
|
||||
speak: none;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.toast-example > .toast-success,
|
||||
#toast-container > .toast-success {
|
||||
color: #fff;
|
||||
}
|
||||
.toast-example > .toast-success:not(.toast-just-text):before,
|
||||
#toast-container > .toast-success:not(.toast-just-text):before {
|
||||
content: "";
|
||||
}
|
||||
.toast-example > .toast-info,
|
||||
#toast-container > .toast-info {
|
||||
color: #fff;
|
||||
}
|
||||
.toast-example > .toast-info:not(.toast-just-text):before,
|
||||
#toast-container > .toast-info:not(.toast-just-text):before {
|
||||
content: "";
|
||||
}
|
||||
.toast-example > .toast-warning,
|
||||
#toast-container > .toast-warning {
|
||||
color: #fff;
|
||||
}
|
||||
.toast-example > .toast-warning:not(.toast-just-text):before,
|
||||
#toast-container > .toast-warning:not(.toast-just-text):before {
|
||||
content: "";
|
||||
}
|
||||
.toast-example > .toast-error,
|
||||
#toast-container > .toast-error {
|
||||
color: #fff;
|
||||
}
|
||||
.toast-example > .toast-error:not(.toast-just-text):before,
|
||||
#toast-container > .toast-error:not(.toast-just-text):before {
|
||||
content: "";
|
||||
}
|
||||
.toast-example.toast-top-center > div,
|
||||
.toast-example.toast-bottom-center > div,
|
||||
#toast-container.toast-top-center > div,
|
||||
#toast-container.toast-bottom-center > div {
|
||||
width: 300px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
.toast-example.toast-top-full-width > div,
|
||||
.toast-example.toast-bottom-full-width > div,
|
||||
#toast-container.toast-top-full-width > div,
|
||||
#toast-container.toast-bottom-full-width > div {
|
||||
width: 100%;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.toast {
|
||||
background-color: #e4eaee;
|
||||
}
|
||||
|
||||
.toast-success {
|
||||
background-color: #28d17c;
|
||||
}
|
||||
|
||||
.toast-error {
|
||||
background-color: #ff666b;
|
||||
}
|
||||
|
||||
.toast-info {
|
||||
background-color: #28c0de;
|
||||
}
|
||||
|
||||
.toast-warning {
|
||||
background-color: #f57d1b;
|
||||
}
|
||||
|
||||
.toast-progress {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 4px;
|
||||
background-color: #000;
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
/*Responsive Design*/
|
||||
@media all and (max-width: 240px) {
|
||||
.toast-example > div,
|
||||
#toast-container > div {
|
||||
width: 11em;
|
||||
}
|
||||
.toast-example .toast-close-button,
|
||||
#toast-container .toast-close-button {
|
||||
top: -0.2em;
|
||||
right: -0.2em;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width: 241px) and (max-width: 480px) {
|
||||
.toast-example > div,
|
||||
#toast-container > div {
|
||||
width: 18em;
|
||||
}
|
||||
.toast-example .toast-close-button,
|
||||
#toast-container .toast-close-button {
|
||||
top: -0.2em;
|
||||
right: -0.2em;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 480px) and (max-width: 767.98px) {
|
||||
.toast-example > div,
|
||||
#toast-container > div {
|
||||
width: 25em;
|
||||
}
|
||||
}
|
||||
517
static/global/vendor/toastr/toastr.js
vendored
Normal file
517
static/global/vendor/toastr/toastr.js
vendored
Normal file
@ -0,0 +1,517 @@
|
||||
/*
|
||||
* Toastr
|
||||
* Copyright 2012-2015
|
||||
* Authors: John Papa, Hans Fjällemark, and Tim Ferrell.
|
||||
* All Rights Reserved.
|
||||
* Use, reproduction, distribution, and modification of this code is subject to the terms and
|
||||
* conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* ARIA Support: Greta Krafsig
|
||||
*
|
||||
* Project: https://github.com/CodeSeven/toastr
|
||||
*/
|
||||
/* global define */
|
||||
(function (define) {
|
||||
define(["jquery"], function ($) {
|
||||
return (function () {
|
||||
var $container;
|
||||
var listener;
|
||||
var toastId = 0;
|
||||
var toastType = {
|
||||
error: "error",
|
||||
info: "info",
|
||||
success: "success",
|
||||
warning: "warning",
|
||||
};
|
||||
|
||||
var toastr = {
|
||||
clear: clear,
|
||||
remove: remove,
|
||||
error: error,
|
||||
getContainer: getContainer,
|
||||
info: info,
|
||||
options: {},
|
||||
subscribe: subscribe,
|
||||
success: success,
|
||||
version: "2.1.4",
|
||||
warning: warning,
|
||||
};
|
||||
|
||||
var previousToast;
|
||||
|
||||
return toastr;
|
||||
|
||||
////////////////
|
||||
|
||||
function error(message, title, optionsOverride) {
|
||||
return notify({
|
||||
type: toastType.error,
|
||||
iconClass: getOptions().iconClasses.error,
|
||||
message: message,
|
||||
optionsOverride: optionsOverride,
|
||||
title: title,
|
||||
});
|
||||
}
|
||||
|
||||
function getContainer(options, create) {
|
||||
if (!options) {
|
||||
options = getOptions();
|
||||
}
|
||||
$container = $("#" + options.containerId);
|
||||
if ($container.length) {
|
||||
return $container;
|
||||
}
|
||||
if (create) {
|
||||
$container = createContainer(options);
|
||||
}
|
||||
return $container;
|
||||
}
|
||||
|
||||
function info(message, title, optionsOverride) {
|
||||
return notify({
|
||||
type: toastType.info,
|
||||
iconClass: getOptions().iconClasses.info,
|
||||
message: message,
|
||||
optionsOverride: optionsOverride,
|
||||
title: title,
|
||||
});
|
||||
}
|
||||
|
||||
function subscribe(callback) {
|
||||
listener = callback;
|
||||
}
|
||||
|
||||
function success(message, title, optionsOverride) {
|
||||
return notify({
|
||||
type: toastType.success,
|
||||
iconClass: getOptions().iconClasses.success,
|
||||
message: message,
|
||||
optionsOverride: optionsOverride,
|
||||
title: title,
|
||||
});
|
||||
}
|
||||
|
||||
function warning(message, title, optionsOverride) {
|
||||
return notify({
|
||||
type: toastType.warning,
|
||||
iconClass: getOptions().iconClasses.warning,
|
||||
message: message,
|
||||
optionsOverride: optionsOverride,
|
||||
title: title,
|
||||
});
|
||||
}
|
||||
|
||||
function clear($toastElement, clearOptions) {
|
||||
var options = getOptions();
|
||||
if (!$container) {
|
||||
getContainer(options);
|
||||
}
|
||||
if (!clearToast($toastElement, options, clearOptions)) {
|
||||
clearContainer(options);
|
||||
}
|
||||
}
|
||||
|
||||
function remove($toastElement) {
|
||||
var options = getOptions();
|
||||
if (!$container) {
|
||||
getContainer(options);
|
||||
}
|
||||
if ($toastElement && $(":focus", $toastElement).length === 0) {
|
||||
removeToast($toastElement);
|
||||
return;
|
||||
}
|
||||
if ($container.children().length) {
|
||||
$container.remove();
|
||||
}
|
||||
}
|
||||
|
||||
// internal functions
|
||||
|
||||
function clearContainer(options) {
|
||||
var toastsToClear = $container.children();
|
||||
for (var i = toastsToClear.length - 1; i >= 0; i--) {
|
||||
clearToast($(toastsToClear[i]), options);
|
||||
}
|
||||
}
|
||||
|
||||
function clearToast($toastElement, options, clearOptions) {
|
||||
var force =
|
||||
clearOptions && clearOptions.force ? clearOptions.force : false;
|
||||
if (
|
||||
$toastElement &&
|
||||
(force || $(":focus", $toastElement).length === 0)
|
||||
) {
|
||||
$toastElement[options.hideMethod]({
|
||||
duration: options.hideDuration,
|
||||
easing: options.hideEasing,
|
||||
complete: function () {
|
||||
removeToast($toastElement);
|
||||
},
|
||||
});
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function createContainer(options) {
|
||||
$container = $("<div/>")
|
||||
.attr("id", options.containerId)
|
||||
.addClass(options.positionClass);
|
||||
|
||||
$container.appendTo($(options.target));
|
||||
return $container;
|
||||
}
|
||||
|
||||
function getDefaults() {
|
||||
return {
|
||||
tapToDismiss: true,
|
||||
toastClass: "toast",
|
||||
containerId: "toast-container",
|
||||
debug: false,
|
||||
|
||||
showMethod: "fadeIn", //fadeIn, slideDown, and show are built into jQuery
|
||||
showDuration: 300,
|
||||
showEasing: "swing", //swing and linear are built into jQuery
|
||||
onShown: undefined,
|
||||
hideMethod: "fadeOut",
|
||||
hideDuration: 1000,
|
||||
hideEasing: "swing",
|
||||
onHidden: undefined,
|
||||
closeMethod: false,
|
||||
closeDuration: false,
|
||||
closeEasing: false,
|
||||
closeOnHover: true,
|
||||
|
||||
extendedTimeOut: 1000,
|
||||
iconClasses: {
|
||||
error: "toast-error",
|
||||
info: "toast-info",
|
||||
success: "toast-success",
|
||||
warning: "toast-warning",
|
||||
},
|
||||
iconClass: "toast-info",
|
||||
positionClass: "toast-top-right",
|
||||
timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky
|
||||
titleClass: "toast-title",
|
||||
messageClass: "toast-message",
|
||||
escapeHtml: false,
|
||||
target: "body",
|
||||
closeHtml: '<button type="button">×</button>',
|
||||
closeClass: "toast-close-button",
|
||||
newestOnTop: true,
|
||||
preventDuplicates: false,
|
||||
progressBar: false,
|
||||
progressClass: "toast-progress",
|
||||
rtl: false,
|
||||
};
|
||||
}
|
||||
|
||||
function publish(args) {
|
||||
if (!listener) {
|
||||
return;
|
||||
}
|
||||
listener(args);
|
||||
}
|
||||
|
||||
function notify(map) {
|
||||
var options = getOptions();
|
||||
var iconClass = map.iconClass || options.iconClass;
|
||||
|
||||
if (typeof map.optionsOverride !== "undefined") {
|
||||
options = $.extend(options, map.optionsOverride);
|
||||
iconClass = map.optionsOverride.iconClass || iconClass;
|
||||
}
|
||||
|
||||
if (shouldExit(options, map)) {
|
||||
return;
|
||||
}
|
||||
|
||||
toastId++;
|
||||
|
||||
$container = getContainer(options, true);
|
||||
|
||||
var intervalId = null;
|
||||
var $toastElement = $("<div/>");
|
||||
var $titleElement = $("<div/>");
|
||||
var $messageElement = $("<div/>");
|
||||
var $progressElement = $("<div/>");
|
||||
var $closeElement = $(options.closeHtml);
|
||||
var progressBar = {
|
||||
intervalId: null,
|
||||
hideEta: null,
|
||||
maxHideTime: null,
|
||||
};
|
||||
var response = {
|
||||
toastId: toastId,
|
||||
state: "visible",
|
||||
startTime: new Date(),
|
||||
options: options,
|
||||
map: map,
|
||||
};
|
||||
|
||||
personalizeToast();
|
||||
|
||||
displayToast();
|
||||
|
||||
handleEvents();
|
||||
|
||||
publish(response);
|
||||
|
||||
if (options.debug && console) {
|
||||
console.log(response);
|
||||
}
|
||||
|
||||
return $toastElement;
|
||||
|
||||
function escapeHtml(source) {
|
||||
if (source == null) {
|
||||
source = "";
|
||||
}
|
||||
|
||||
return source
|
||||
.replace(/&/g, "&")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">");
|
||||
}
|
||||
|
||||
function personalizeToast() {
|
||||
setIcon();
|
||||
setTitle();
|
||||
setMessage();
|
||||
setCloseButton();
|
||||
setProgressBar();
|
||||
setRTL();
|
||||
setSequence();
|
||||
setAria();
|
||||
}
|
||||
|
||||
function setAria() {
|
||||
var ariaValue = "";
|
||||
switch (map.iconClass) {
|
||||
case "toast-success":
|
||||
case "toast-info":
|
||||
ariaValue = "polite";
|
||||
break;
|
||||
default:
|
||||
ariaValue = "assertive";
|
||||
}
|
||||
$toastElement.attr("aria-live", ariaValue);
|
||||
}
|
||||
|
||||
function handleEvents() {
|
||||
if (options.closeOnHover) {
|
||||
$toastElement.hover(stickAround, delayedHideToast);
|
||||
}
|
||||
|
||||
if (!options.onclick && options.tapToDismiss) {
|
||||
$toastElement.click(hideToast);
|
||||
}
|
||||
|
||||
if (options.closeButton && $closeElement) {
|
||||
$closeElement.click(function (event) {
|
||||
if (event.stopPropagation) {
|
||||
event.stopPropagation();
|
||||
} else if (
|
||||
event.cancelBubble !== undefined &&
|
||||
event.cancelBubble !== true
|
||||
) {
|
||||
event.cancelBubble = true;
|
||||
}
|
||||
|
||||
if (options.onCloseClick) {
|
||||
options.onCloseClick(event);
|
||||
}
|
||||
|
||||
hideToast(true);
|
||||
});
|
||||
}
|
||||
|
||||
if (options.onclick) {
|
||||
$toastElement.click(function (event) {
|
||||
options.onclick(event);
|
||||
hideToast();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function displayToast() {
|
||||
$toastElement.hide();
|
||||
|
||||
$toastElement[options.showMethod]({
|
||||
duration: options.showDuration,
|
||||
easing: options.showEasing,
|
||||
complete: options.onShown,
|
||||
});
|
||||
|
||||
if (options.timeOut > 0) {
|
||||
intervalId = setTimeout(hideToast, options.timeOut);
|
||||
progressBar.maxHideTime = parseFloat(options.timeOut);
|
||||
progressBar.hideEta =
|
||||
new Date().getTime() + progressBar.maxHideTime;
|
||||
if (options.progressBar) {
|
||||
progressBar.intervalId = setInterval(updateProgress, 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setIcon() {
|
||||
if (map.iconClass) {
|
||||
$toastElement.addClass(options.toastClass).addClass(iconClass);
|
||||
}
|
||||
}
|
||||
|
||||
function setSequence() {
|
||||
if (options.newestOnTop) {
|
||||
$container.prepend($toastElement);
|
||||
} else {
|
||||
$container.append($toastElement);
|
||||
}
|
||||
}
|
||||
|
||||
function setTitle() {
|
||||
if (map.title) {
|
||||
var suffix = map.title;
|
||||
if (options.escapeHtml) {
|
||||
suffix = escapeHtml(map.title);
|
||||
}
|
||||
$titleElement.append(suffix).addClass(options.titleClass);
|
||||
$toastElement.append($titleElement);
|
||||
}
|
||||
}
|
||||
|
||||
function setMessage() {
|
||||
if (map.message) {
|
||||
var suffix = map.message;
|
||||
if (options.escapeHtml) {
|
||||
suffix = escapeHtml(map.message);
|
||||
}
|
||||
$messageElement.append(suffix).addClass(options.messageClass);
|
||||
$toastElement.append($messageElement);
|
||||
}
|
||||
}
|
||||
|
||||
function setCloseButton() {
|
||||
if (options.closeButton) {
|
||||
$closeElement.addClass(options.closeClass).attr("role", "button");
|
||||
$toastElement.prepend($closeElement);
|
||||
}
|
||||
}
|
||||
|
||||
function setProgressBar() {
|
||||
if (options.progressBar) {
|
||||
$progressElement.addClass(options.progressClass);
|
||||
$toastElement.prepend($progressElement);
|
||||
}
|
||||
}
|
||||
|
||||
function setRTL() {
|
||||
if (options.rtl) {
|
||||
$toastElement.addClass("rtl");
|
||||
}
|
||||
}
|
||||
|
||||
function shouldExit(options, map) {
|
||||
if (options.preventDuplicates) {
|
||||
if (map.message === previousToast) {
|
||||
return true;
|
||||
} else {
|
||||
previousToast = map.message;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function hideToast(override) {
|
||||
var method =
|
||||
override && options.closeMethod !== false
|
||||
? options.closeMethod
|
||||
: options.hideMethod;
|
||||
var duration =
|
||||
override && options.closeDuration !== false
|
||||
? options.closeDuration
|
||||
: options.hideDuration;
|
||||
var easing =
|
||||
override && options.closeEasing !== false
|
||||
? options.closeEasing
|
||||
: options.hideEasing;
|
||||
if ($(":focus", $toastElement).length && !override) {
|
||||
return;
|
||||
}
|
||||
clearTimeout(progressBar.intervalId);
|
||||
return $toastElement[method]({
|
||||
duration: duration,
|
||||
easing: easing,
|
||||
complete: function () {
|
||||
removeToast($toastElement);
|
||||
clearTimeout(intervalId);
|
||||
if (options.onHidden && response.state !== "hidden") {
|
||||
options.onHidden();
|
||||
}
|
||||
response.state = "hidden";
|
||||
response.endTime = new Date();
|
||||
publish(response);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function delayedHideToast() {
|
||||
if (options.timeOut > 0 || options.extendedTimeOut > 0) {
|
||||
intervalId = setTimeout(hideToast, options.extendedTimeOut);
|
||||
progressBar.maxHideTime = parseFloat(options.extendedTimeOut);
|
||||
progressBar.hideEta =
|
||||
new Date().getTime() + progressBar.maxHideTime;
|
||||
}
|
||||
}
|
||||
|
||||
function stickAround() {
|
||||
clearTimeout(intervalId);
|
||||
progressBar.hideEta = 0;
|
||||
$toastElement.stop(true, true)[options.showMethod]({
|
||||
duration: options.showDuration,
|
||||
easing: options.showEasing,
|
||||
});
|
||||
}
|
||||
|
||||
function updateProgress() {
|
||||
var percentage =
|
||||
((progressBar.hideEta - new Date().getTime()) /
|
||||
progressBar.maxHideTime) *
|
||||
100;
|
||||
$progressElement.width(percentage + "%");
|
||||
}
|
||||
}
|
||||
|
||||
function getOptions() {
|
||||
return $.extend({}, getDefaults(), toastr.options);
|
||||
}
|
||||
|
||||
function removeToast($toastElement) {
|
||||
if (!$container) {
|
||||
$container = getContainer();
|
||||
}
|
||||
if ($toastElement.is(":visible")) {
|
||||
return;
|
||||
}
|
||||
$toastElement.remove();
|
||||
$toastElement = null;
|
||||
if ($container.children().length === 0) {
|
||||
$container.remove();
|
||||
previousToast = undefined;
|
||||
}
|
||||
}
|
||||
})();
|
||||
});
|
||||
})(
|
||||
typeof define === "function" && define.amd
|
||||
? define
|
||||
: function (deps, factory) {
|
||||
if (typeof module !== "undefined" && module.exports) {
|
||||
//Node
|
||||
module.exports = factory(require("jquery"));
|
||||
} else {
|
||||
window.toastr = factory(window.jQuery);
|
||||
}
|
||||
}
|
||||
);
|
||||
367
templates/base_website.html
Normal file
367
templates/base_website.html
Normal file
@ -0,0 +1,367 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<title>{% block title %}{% endblock %}</title>
|
||||
<link
|
||||
rel="icon"
|
||||
href="/static/felcloud/website/img/felcloud.ico"
|
||||
type="image/x-icon"
|
||||
/>
|
||||
<link
|
||||
href="/static/felcloud/website/fonts/cloudicon/cloudicon.css"
|
||||
rel="stylesheet"
|
||||
onload="if(media!='all')media='all'"
|
||||
/>
|
||||
<link
|
||||
href="/static/felcloud/website/fonts/fontawesome/css/all.css"
|
||||
rel="stylesheet"
|
||||
onload="if(media!='all')media='all'"
|
||||
/>
|
||||
<!-- CSS styles -->
|
||||
<link
|
||||
href="/static/felcloud/website/css/colors/dark.css"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link
|
||||
href="/static/felcloud/website/css/bootstrap.min.css"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link
|
||||
href="/static/felcloud/website/css/swiper.min.css"
|
||||
rel="stylesheet"
|
||||
onload="if(media!='all')media='all'"
|
||||
/>
|
||||
<link
|
||||
href="/static/felcloud/website/css/animate.min.css"
|
||||
rel="stylesheet"
|
||||
onload="if(media!='all')media='all'"
|
||||
/>
|
||||
<link href="/static/felcloud/website/css/filter.css" rel="stylesheet" />
|
||||
<link href="/static/felcloud/website/css/custom.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="/static/global/vendor/toastr/toastr.css" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/static/base/assets/examples/css/advanced/toastr.css"
|
||||
/>
|
||||
<link href="/static/felcloud/website/hardware.css" rel="stylesheet" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/static/base/assets/examples/css/uikit/modals.css"
|
||||
/>
|
||||
<link href="/static/felcloud/website/css/style.min.css" rel="stylesheet" />
|
||||
|
||||
<script>
|
||||
var products = "{{ products }}";
|
||||
var order_id = "{{order_id}}";
|
||||
</script>
|
||||
</head>
|
||||
<body style="background-color: white">
|
||||
<!-- ***** NEWS ***** -->
|
||||
|
||||
<!-- ***** NAV MENU DESKTOP ****** -->
|
||||
<div
|
||||
class="menu-wrap"
|
||||
style="
|
||||
border: 1px solid black;
|
||||
padding: 20px 0 !important;
|
||||
background-color: #33003b;
|
||||
"
|
||||
>
|
||||
<div class="nav-menu">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-2 col-md-2">
|
||||
<a
|
||||
hx-post="/index"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
style="cursor: pointer"
|
||||
>
|
||||
<img
|
||||
class="logo"
|
||||
src="/static/felcloud/website/img/felcloud.ico"
|
||||
alt="logo"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<nav id="menu" class="col-10 col-md-10">
|
||||
<div class="navigation float-end">
|
||||
<button class="menu-toggle">
|
||||
<span class="icon"></span>
|
||||
<span class="icon"></span>
|
||||
<span class="icon"></span>
|
||||
</button>
|
||||
<ul class="main-menu nav navbar-nav navbar-right navHome">
|
||||
<li class="menu-item menu-item-has-children me-2">
|
||||
<a
|
||||
class="pe-1"
|
||||
hx-post="/index"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
>
|
||||
Home
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="menu-item">
|
||||
<a
|
||||
hx-post="/servers"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
>Servers
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ***** NAV MENU MOBILE ****** -->
|
||||
<div class="menu-wrap mobile">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-6">
|
||||
<a
|
||||
hx-post="/index"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
><img
|
||||
class="svg logo-menu d-block"
|
||||
src="./assets/img/logo.svg"
|
||||
alt="logo Antler"
|
||||
/></a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<nav class="nav-menu float-end d-flex">
|
||||
<div class="tech-box">
|
||||
<img
|
||||
class="svg"
|
||||
src="./assets/img/menu.svg"
|
||||
alt=""
|
||||
data-bs-toggle="offcanvas"
|
||||
data-bs-target="#offcanvasWithBackdrop"
|
||||
aria-controls="offcanvasWithBackdrop"
|
||||
/>
|
||||
</div>
|
||||
<button id="nav-toggle" class="menu-toggle">
|
||||
<span class="icon"></span>
|
||||
<span class="icon"></span>
|
||||
<span class="icon"></span>
|
||||
</button>
|
||||
<div class="main-menu bg-seccolorstyle">
|
||||
<div class="menu-item">
|
||||
<a
|
||||
class="mergecolor"
|
||||
hx-post="/index"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
data-bs-toggle="dropdown"
|
||||
>Home
|
||||
<div class="badge bg-purple">NEW</div></a
|
||||
>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a
|
||||
class="mergecolor"
|
||||
hx-post="/servers"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
data-bs-toggle="dropdown"
|
||||
>Servers
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
id="spinner3"
|
||||
class="htmx-indicator"
|
||||
src="/static/global/vendor/blueimp-file-upload/loading.gif"
|
||||
style="
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 44%;
|
||||
z-index: 9999;
|
||||
"
|
||||
alt="Loading"
|
||||
/>
|
||||
<div id="bodyTarget" class="fade-me-in">{% include '/index.html' %}</div>
|
||||
<footer class="footer" style="background-color: #33003b; bottom: 0">
|
||||
<div>
|
||||
<div class="footer-top">
|
||||
<div class="row" style="justify-content: space-around">
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<div class="heading">
|
||||
<img
|
||||
src="/static/felcloud/website/img/felcloud.ico"
|
||||
alt="logo"
|
||||
class="logo"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="subheading text-justify footParagraph">
|
||||
with our best efforts, we are committed to providing you with
|
||||
the best service and support. We are always here to help you
|
||||
with any questions or concerns you may have. Thank you for
|
||||
choosing us as your trusted partner in your journey towards
|
||||
success.
|
||||
</div>
|
||||
<br />
|
||||
<div class="soc-icons soc-iconsDiv">
|
||||
<a href="#" target="_blank"
|
||||
><i class="fab fa-facebook-f"></i
|
||||
></a>
|
||||
<a href="#" target="_blank"><i class="fab fa-linkedin"></i></a>
|
||||
<a href="#" target="_blank"><i class="fab fa-twitter"></i></a>
|
||||
<a href="#" target="_blank"><i class="fab fa-instagram"></i></a>
|
||||
</div>
|
||||
<div>
|
||||
<a
|
||||
href="/terms"
|
||||
target="_blank"
|
||||
style="color: white; text-decoration: underline"
|
||||
><span data-i18n="[html]header.termsCond"></span
|
||||
></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3 contact">
|
||||
<div class="heading contactTitle">
|
||||
<span data-i18n="[html]header.contact"></span>
|
||||
</div>
|
||||
<ul class="footer-menu">
|
||||
<li class="menu-item">
|
||||
<a>
|
||||
<img
|
||||
class="footer-icon"
|
||||
src="/static/felcloud/website/newTheme/tel.svg"
|
||||
/>
|
||||
+33 6 83 38 88 96</a
|
||||
>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a>
|
||||
<img
|
||||
class="footer-icon"
|
||||
src="/static/felcloud/website/newTheme/envolop.svg"
|
||||
/>
|
||||
contact@felcloud.io</a
|
||||
>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a
|
||||
><img
|
||||
class="footer-icon"
|
||||
src="/static/felcloud/website/newTheme/local.svg"
|
||||
/>
|
||||
<span>
|
||||
<span data-i18n="[html]header.felAdd"></span>
|
||||
</span>
|
||||
<span>
|
||||
<span data-i18n="[html]header.felPost"></span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="d-flex justify-content-center">
|
||||
<ul class="payment-list" style="padding-left: 0">
|
||||
<li><p data-i18n="[html]header.paymentsWeAccept"></p></li>
|
||||
<li><i class="fab fa-cc-visa"></i></li>
|
||||
<li><i class="fab fa-cc-mastercard"></i></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="year" class="copyrigh text-center"></div>
|
||||
<span
|
||||
><div class="crafted">
|
||||
Crafted with
|
||||
<i class="fas fa-heart" style="color: red"></i> by
|
||||
<a href="https://{{console_host}}">Cloudnet</a>
|
||||
</div></span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<!-- ***** BUTTON GO TOP ***** -->
|
||||
<a href="#0" class="cd-top"> <i class="fas fa-angle-up"></i> </a>
|
||||
<!-- Javascript -->
|
||||
<script src="/static/global/js/htmx.min.js"></script>
|
||||
<script src="/static/global/vendor/babel-external-helpers/babel-external-helpers.js"></script>
|
||||
<script src="/static/felcloud/website/js/jquery.min.js"></script>
|
||||
<script defer src="/static/felcloud/website/js/popper.min.js"></script>
|
||||
<script defer src="/static/felcloud/website/js/bootstrap.min.js"></script>
|
||||
<script
|
||||
defer
|
||||
src="/static/felcloud/website/js/jquery.countdown.js"
|
||||
></script>
|
||||
<script
|
||||
defer
|
||||
src="/static/felcloud/website/js/jquery.magnific-popup.min.js"
|
||||
></script>
|
||||
<script defer src="/static/felcloud/website/js/slick.min.js"></script>
|
||||
<script defer src="/static/felcloud/website/js/isotope.min.js"></script>
|
||||
<script
|
||||
defer
|
||||
src="/static/felcloud/website/js/jquery.scrollme.min.js"
|
||||
></script>
|
||||
<script defer src="/static/felcloud/website/js/swiper.min.js"></script>
|
||||
<script async src="/static/felcloud/website/js/lazysizes.min.js"></script>
|
||||
<script
|
||||
defer
|
||||
src="/static/felcloud/website/js/owl.carousel.min.js"
|
||||
></script>
|
||||
<script defer src="/static/felcloud/website/js/scripts.min.js"></script>
|
||||
<script src="/static/global/js/Plugin.js"></script>
|
||||
|
||||
<script src="/static/felcloud/website/js/typed.js"></script>
|
||||
<script src="/static/felcloud/website/js/wow.min.js"></script>
|
||||
<script>
|
||||
new WOW().init();
|
||||
</script>
|
||||
|
||||
<script src="/static/global/js/Plugin/toastr.js"></script>
|
||||
<script src="/static/global/vendor/toastr/toastr.js"></script>
|
||||
|
||||
<script>
|
||||
htmx.on("htmx:afterSettle", function (event) {
|
||||
if (event.detail.xhr.responseURL.includes("/show_order")) {
|
||||
$("#modalOrder").modal("show");
|
||||
}
|
||||
if (event.detail.xhr.responseURL.includes("/save_config_selection")) {
|
||||
try {
|
||||
const serverResponse = JSON.parse(event.detail.xhr.responseText);
|
||||
const message = `<i class="fas fa-exclamation-triangle"></i> ${serverResponse.message}`;
|
||||
const status = serverResponse.status;
|
||||
if (status === "ko") {
|
||||
toastr.error("", message, { timeOut: 3000 });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error parsing server response:");
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
$("#nav-toggle").click(function () {
|
||||
$(".menu-wrap.mobile, .menu-toggle").toggleClass("active");
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
100
templates/cart.html
Normal file
100
templates/cart.html
Normal file
@ -0,0 +1,100 @@
|
||||
{% extends "/base_website.html" %} {% block title %}New Website{% endblock %} {%
|
||||
block html_head %}
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Antler - Hosting Provider & WHMCS Template</title>
|
||||
<meta name="description" content="" />
|
||||
|
||||
<script>
|
||||
// var details_list = "{{details_list }}";
|
||||
// var server_highlights_detail = "{{server_highlights_detail }}";
|
||||
// var products = "{{products }}";
|
||||
</script>
|
||||
|
||||
{% endblock %} {% block page %}
|
||||
<div class="box-container limit-width">
|
||||
<!-- ***** SETTINGS ****** -->
|
||||
<!-- ***** LOADING PAGE ****** -->
|
||||
<!-- ***** SLIDER ***** -->
|
||||
<!-- ***** BANNER ***** -->
|
||||
<div class="top-header item7 overlay scrollme">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div
|
||||
class="wrapper animateme"
|
||||
data-when="span"
|
||||
data-from="0"
|
||||
data-to="0.75"
|
||||
data-opacity="1"
|
||||
data-translatey="-50"
|
||||
>
|
||||
<h1 class="heading">Cart</h1>
|
||||
<h3 class="subheading">Please Complete Your Order Bekiw</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ***** KNOWLEDGEBASE ***** -->
|
||||
<section
|
||||
class="config cd-main-content pb-80 blog sec-bg2 motpath notoppadding bg-seccolorstyle"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-lg-8 pt-80">
|
||||
<div id="sidebar_content" class="wrap-blog">
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-lg-12">
|
||||
<div
|
||||
class="wrapper targetDiv sec-grad-white-to-green noshadow bg-colorstyle"
|
||||
>
|
||||
<h1 class="mergecolor">Review & Checkout</h1>
|
||||
<p class="mergecolor">
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit
|
||||
</p>
|
||||
<div class="row">
|
||||
<div class="col-md-12 pt-4">
|
||||
<div class="table-responsive-lg">
|
||||
<table class="table compare">
|
||||
<thead>
|
||||
<tr class="seccolor">
|
||||
<td>test</td>
|
||||
<td>test</td>
|
||||
<td>test</td>
|
||||
<td>test</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="seccolor">
|
||||
<td>test</td>
|
||||
<td>test</td>
|
||||
<td>test</td>
|
||||
<td>test</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- ***** SLIDER ***** -->
|
||||
|
||||
<!-- ***** UPLOADED FOOTER FROM FOOTER.HTML ***** -->
|
||||
<!-- ***** BUTTON GO TOP ***** -->
|
||||
<a href="#0" class="cd-top"> <i class="fas fa-angle-up"></i> </a>
|
||||
|
||||
{% endblock %} {% block footerjs %}
|
||||
|
||||
<!-- Javascript -->
|
||||
|
||||
{% endblock %}
|
||||
</div>
|
||||
110
templates/category.html
Normal file
110
templates/category.html
Normal file
@ -0,0 +1,110 @@
|
||||
<div class="box-container limit-width fade-me-in">
|
||||
<!-- ***** SETTINGS ****** -->
|
||||
<div class="indexBg top-header item8 overlay"></div>
|
||||
<!-- ***** SLIDER ***** -->
|
||||
<div class="motpath">
|
||||
<div class="container" style="background-color: #f9f9f9; padding: 50px">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h1
|
||||
class="section-heading mergecolor"
|
||||
style="color: black; font-size: 50px !important"
|
||||
>
|
||||
<span style="color: red">{{server_category.name}}</span>
|
||||
{{server_category.category}}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<img
|
||||
src="{{server_category.category_image}}"
|
||||
alt="{{server_category.category_image}}"
|
||||
/>
|
||||
</div>
|
||||
<div class="included col-12" style="color: black">
|
||||
<h4 class="mb-5">{{server_category.server_title}}</h4>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
{% for p in details_list %}
|
||||
<p>{{p}}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if server_category.server_highlights %}
|
||||
<div class="col-12 mb-2">
|
||||
<h5 class="mb-2">{{ server_category.server_highlights }}</h5>
|
||||
<h6>Supports:</h6>
|
||||
<ul>
|
||||
{% for detail in server_highlights_detail %}
|
||||
<li>{{ detail }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-12 mb-2">
|
||||
<h4 style="color: black">
|
||||
Configure & <span style="color: red"> Buy </span> :
|
||||
</h4>
|
||||
<br />
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="col-12 row" style="padding: 15px">
|
||||
<div class="col-2" style="padding: 10px">
|
||||
<i class="fas fa-filter" aria-hidden="true"></i> Filter
|
||||
</div>
|
||||
<div class="col-1 filter">CPU</div>
|
||||
<div class="col-1 filter">CPU</div>
|
||||
<div class="col-1 filter">CPU</div>
|
||||
<div class="col-1 filter">CPU</div>
|
||||
<div class="col-1 filter">CPU</div>
|
||||
<div class="col-1 filter">CPU</div>
|
||||
<div class="col-1 filter">CPU</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
{% for product in products %}
|
||||
<div class="col-md-4 mb-2">
|
||||
<div
|
||||
style="
|
||||
background-color: white;
|
||||
padding: 25px;
|
||||
padding-top: 35px;
|
||||
border-radius: 10px;
|
||||
height: 480px;
|
||||
min-height: fit-content;
|
||||
"
|
||||
>
|
||||
<div class="text-center mb-4" style="height: 120px">
|
||||
<img
|
||||
src="{{product.image_url}}"
|
||||
alt="{{product.image_url}}"
|
||||
/>
|
||||
</div>
|
||||
<h4>{{ product.product_name}}</h4>
|
||||
<ul>
|
||||
{% for detail in product.details %}
|
||||
<li>{{detail}}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<button
|
||||
hx-post="/product/{{server_category.category}}/{{ product.product_name}}"
|
||||
class="btn btn-outline btn-default-yellow-fill mb-2"
|
||||
style="scale: 0.8; border-radius: 5px"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
>
|
||||
Configure Now !
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ***** SLIDER ***** -->
|
||||
</div>
|
||||
102
templates/config.html
Normal file
102
templates/config.html
Normal file
@ -0,0 +1,102 @@
|
||||
<form class="fade-me-in">
|
||||
<div id="target-row" class="row">
|
||||
<div class="col-md-12 sc-config-header">
|
||||
<div class="sc-line sc-line-left"></div>
|
||||
<h6 class="sc-category-title">{{ config_data.category.name }}</h6>
|
||||
<div class="sc-line sc-line-right"></div>
|
||||
|
||||
{% if config_data.category.max_quantity is not none %}
|
||||
<span class="sc-max-quantity">
|
||||
Max Quantity: {{ config_data.category.max_quantity }}
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-12 row">
|
||||
<img
|
||||
src="{{ config_data.category.category_img }}"
|
||||
alt="{{ config_data.category.name }}"
|
||||
class="col-md-2"
|
||||
style="height: 60px"
|
||||
/>
|
||||
|
||||
<div class="col-md-10" style="max-height: 550px; overflow-y: auto">
|
||||
<!-- Handle configurations -->
|
||||
{% if config_data.category.sub_category %}
|
||||
<!-- Case 1: Category has subcategories -->
|
||||
{% for sub_category in config_data.category.sub_category %} {% set
|
||||
outer_index = loop.index0 %}
|
||||
<h6 style="font-weight: bold" class="sc-subcategory-title">
|
||||
{{ sub_category.name }}
|
||||
</h6>
|
||||
<ul class="config-list" style="list-style: none">
|
||||
{% for item in sub_category.config %}
|
||||
<li>
|
||||
<input type="{{ config_data.category.config_choice_type }}" name="{%
|
||||
if config_data.category.config_choice_type == 'radio' %}config-{{
|
||||
config_data.category.name }}{% else %}config-{{ loop.index0 }}-{{
|
||||
outer_index }}-{{ sub_category.name }}{% endif %}" value="{{ item
|
||||
}}" id="{{ config_data.category.name }}_{{ item }}"
|
||||
hx-post="/save_config_selection" hx-trigger="change" hx-vals='{% if
|
||||
config_data.category.config_choice_type == "radio"
|
||||
%}{"product_name": "{{product.product_name}}", "category":
|
||||
"{{config_data.category.name}}", "max_quantity":
|
||||
"{{config_data.category.max_quantity}}", "config_choice_type":
|
||||
"{{config_data.category.config_choice_type}}"}{% else
|
||||
%}{"product_name": "{{product.product_name}}", "category":
|
||||
"{{config_data.category.name}}", "sub_category":
|
||||
"{{sub_category.name}}", "max_quantity":
|
||||
"{{config_data.category.max_quantity}}", "config_choice_type":
|
||||
"{{config_data.category.config_choice_type}}"}{% endif %}' {% if
|
||||
config_data.category.config_choice_type == 'radio' and
|
||||
saved_selections.get(config_data.category.name, {}).get('selection')
|
||||
== item %}checked{% elif config_data.category.config_choice_type !=
|
||||
'radio' and item in (saved_selections.get(config_data.category.name,
|
||||
{}).get('subcategories', {}).get(sub_category.name, [])) %}checked{%
|
||||
endif %} />
|
||||
<label
|
||||
class="d-inline"
|
||||
for="{{ config_data.category.name }}_{{ item }}"
|
||||
>{{ item }}</label
|
||||
>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %} {% else %}
|
||||
<!-- Case 2: Category has no subcategories -->
|
||||
<ul class="config-list" style="list-style: none">
|
||||
{% for item in config_data.category.config %}
|
||||
<li>
|
||||
<input type="{{ config_data.category.config_choice_type }}" name="{%
|
||||
if config_data.category.config_choice_type == 'radio' %}config-{{
|
||||
config_data.category.name }}{% else %}config-{{ loop.index0 }}-{{
|
||||
config_data.category.name }}{% endif %}" value="{{ item }}" id="{{
|
||||
config_data.category.name }}_{{ item }}"
|
||||
hx-post="/save_config_selection" hx-trigger="change" hx-vals='{% if
|
||||
config_data.category.config_choice_type == "radio"
|
||||
%}{"product_name": "{{product.product_name}}", "category":
|
||||
"{{config_data.category.name}}", "max_quantity":
|
||||
"{{config_data.category.max_quantity}}", "config_choice_type":
|
||||
"{{config_data.category.config_choice_type}}"}{% else
|
||||
%}{"product_name": "{{product.product_name}}", "category":
|
||||
"{{config_data.category.name}}", "max_quantity":
|
||||
"{{config_data.category.max_quantity}}", "config_choice_type":
|
||||
"{{config_data.category.config_choice_type}}"}{% endif %}' {% if
|
||||
config_data.category.config_choice_type == 'radio' and
|
||||
saved_selections.get(config_data.category.name, {}).get('selection')
|
||||
== item %}checked{% elif config_data.category.config_choice_type !=
|
||||
'radio' and item in (saved_selections.get(config_data.category.name,
|
||||
{}).get('subcategories', {}).get(config_data.category.name, []))
|
||||
%}checked{% endif %} />
|
||||
<label
|
||||
class="d-inline"
|
||||
for="{{ config_data.category.name }}_{{ item }}"
|
||||
>{{ item }}</label
|
||||
>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
30
templates/htmx_elements/options.html
Normal file
30
templates/htmx_elements/options.html
Normal file
@ -0,0 +1,30 @@
|
||||
<div id="options">
|
||||
{% if options %}
|
||||
<table style="width: 100%; border-collapse: collapse">
|
||||
<thead>
|
||||
<tr style="background-color: #f4f4f4; border-bottom: 2px solid #ccc">
|
||||
<th style="padding: 10px; text-align: left">Option Name</th>
|
||||
<th style="padding: 10px; text-align: right">Price (€)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for option in options %}
|
||||
<tr
|
||||
style="border-bottom: 1px solid #ddd; transition: background-color 0.3s"
|
||||
onmouseover="this.style.backgroundColor='#f0f8ff';"
|
||||
onmouseout="this.style.backgroundColor='white';"
|
||||
>
|
||||
<td style="padding: 10px">{{ option.option_name }}</td>
|
||||
<td style="padding: 10px; text-align: right">
|
||||
{{ option.option_price }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% else %}
|
||||
<p style="padding: 10px; color: #ff0000">
|
||||
No options available for this configuration.
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
27
templates/htmx_elements/server_card.html
Normal file
27
templates/htmx_elements/server_card.html
Normal file
@ -0,0 +1,27 @@
|
||||
<div class="col-lg-8 row" id="servers">
|
||||
{% for product in products_by_category %}
|
||||
<div class="col-sm-6 col-md-6">
|
||||
<div class="wrapper">
|
||||
<div class="img-section"></div>
|
||||
<div class="team-info bg-seccolorstyle noshadow" style="padding-top: 5px">
|
||||
<img
|
||||
class="svg"
|
||||
src="{{product.image}}"
|
||||
alt="{{product.image}}"
|
||||
style="max-width: 70%; margin-bottom: 0"
|
||||
/>
|
||||
<h3 style="margin-bottom: 1.1em; font-size: 1.2rem">
|
||||
{{ product.name }}
|
||||
</h3>
|
||||
|
||||
<a
|
||||
href="/product?product_id={{ product.id }}"
|
||||
class="btn btn-default-yellow-fill mt-4"
|
||||
style="scale: 0.7"
|
||||
>See now !</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
243
templates/index.html
Normal file
243
templates/index.html
Normal file
@ -0,0 +1,243 @@
|
||||
<div class="box-container limit-width fade-me-in">
|
||||
<!-- ***** FRAME MODE ****** -->
|
||||
<div class="body-borders" data-border="20">
|
||||
<div class="top-border bg-white"></div>
|
||||
<div class="right-border bg-white"></div>
|
||||
<div class="bottom-border bg-white"></div>
|
||||
<div class="left-border bg-white"></div>
|
||||
</div>
|
||||
<!-- ***** SLIDER ***** -->
|
||||
<div class="indexBg top-header item8 overlay">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="wrapper">
|
||||
<h1 class="heading">About Us</h1>
|
||||
<div class="included">
|
||||
<h4 class="mb-3">Why Choose Us?</h4>
|
||||
<ul>
|
||||
<li>
|
||||
<i class="fas fa-check-circle"></i> Best hosting provider
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>
|
||||
<i class="fas fa-check-circle"></i> Award cloud infrastructure
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>
|
||||
<i class="fas fa-check-circle"></i> Awesome control panels
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>
|
||||
<i class="fas fa-check-circle"></i> Reference Domain solutions
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>
|
||||
<i class="fas fa-check-circle"></i> Support Premium 24/7/365
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ***** CLIENT STATS ***** -->
|
||||
<section
|
||||
id="clientstats"
|
||||
class="pricing special sec-uping scrollme bg-colorstyle specialposition"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row justify-content-end pb-80" style="height: 430px">
|
||||
<div
|
||||
class="col-sm-12 col-md-6 col-lg-4 animateme"
|
||||
data-when="enter"
|
||||
data-from="0"
|
||||
data-to="1"
|
||||
data-opacity="1"
|
||||
data-translatey="-20"
|
||||
>
|
||||
<div
|
||||
class="wrapper price-container text-start bg-seccolorstyle noshadow"
|
||||
>
|
||||
<div class="top-content pb-5">
|
||||
<img
|
||||
class="svg mb-3"
|
||||
src="/static/felcloud/website/fonts/svg/servers.svg"
|
||||
height="65"
|
||||
alt=""
|
||||
/>
|
||||
<div class="title mergecolor">1000+ Servers Available</div>
|
||||
<div class="fromer pt-3 seccolor">
|
||||
We have a wide range of servers to choose from, so you can find
|
||||
the perfect one for your needs.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="col-sm-12 col-md-6 col-lg-4 animateme"
|
||||
data-when="span"
|
||||
data-from="0"
|
||||
data-to="1"
|
||||
data-opacity="1"
|
||||
data-translatey="50"
|
||||
>
|
||||
<div
|
||||
class="wrapper price-container text-start bg-seccolorstyle noshadow"
|
||||
>
|
||||
<div class="plans badge feat bg-grey">top</div>
|
||||
<div class="top-content pb-5">
|
||||
<img
|
||||
class="svg mb-3"
|
||||
src="/static/felcloud/website/fonts/svg/rack.svg"
|
||||
height="65"
|
||||
alt=""
|
||||
/>
|
||||
<div class="title mergecolor">+1500 Componants Avaialble</div>
|
||||
<div class="fromer pt-3 seccolor">
|
||||
We have a huge selection of components to choose from.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- ***** TEAM ***** -->
|
||||
<section
|
||||
class="sec-bg2 bg-colorstyle tophalfpadding nobottompadding motpath"
|
||||
style="padding: 2em"
|
||||
>
|
||||
<div class="team">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 text-center">
|
||||
<h2 class="section-heading mergecolor">Our Best Selling Servers</h2>
|
||||
<p class="section-subheading mergecolor">
|
||||
Discover our best servers with unbeatable performance and top-tier
|
||||
reliability, all at the best prices! Whether you're launching a
|
||||
website, gaming, or running apps, we've got the perfect solution.
|
||||
Get started today with power, speed, and support!
|
||||
</p>
|
||||
</div>
|
||||
{% for category in categories[:3] %}
|
||||
<div class="col-lg-4 col-sm-6 mb-2">
|
||||
<div
|
||||
style="
|
||||
background-color: white;
|
||||
padding: 25px;
|
||||
padding-top: 35px;
|
||||
border-radius: 10px;
|
||||
height: 480px;
|
||||
width: fit-content;
|
||||
min-height: fit-content;
|
||||
"
|
||||
>
|
||||
<div class="text-center mb-4" style="height: 120px">
|
||||
<img
|
||||
src="{{category['products'][0].image_url}}"
|
||||
alt="{{category['products'][0].image_url}}"
|
||||
/>
|
||||
</div>
|
||||
<h4>{{ category['products'][0].product_name }}</h4>
|
||||
<ul>
|
||||
{% for detail in category['products'][0].details %}
|
||||
<li>{{detail}}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<a
|
||||
hx-post="/product/{{ category.category }}/{{ category['products'][0].product_name}}"
|
||||
class="btn btn-outline btn-default-yellow-fill mb-2"
|
||||
style="scale: 0.8; border-radius: 5px"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
>
|
||||
Configure Now !
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor%}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- ***** MAP ***** -->
|
||||
<section
|
||||
class="services maping sec-grad-grey-to-grey bottompadding"
|
||||
style="padding: 2em; margin-bottom: 0"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="service-wrap">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 text-center">
|
||||
<h2 class="section-heading text-white mergecolor">
|
||||
Check out Our best selling components
|
||||
</h2>
|
||||
<p
|
||||
class="section-subheading mergecolor"
|
||||
style="color: white; font-weight: bold"
|
||||
>
|
||||
checkout our best selling components and services, and get the
|
||||
best deals on the market. Our components are designed to provide
|
||||
you with the best performance and reliability, so you can focus on
|
||||
what matters most - your business.
|
||||
</p>
|
||||
</div>
|
||||
<div class="team">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{% for category in categories[3:6] %} {% if category['products']
|
||||
%}
|
||||
|
||||
<div class="col-lg-4 col-sm-6 mb-2">
|
||||
<div
|
||||
style="
|
||||
background-color: white;
|
||||
padding: 25px;
|
||||
padding-top: 35px;
|
||||
border-radius: 10px;
|
||||
height: 480px;
|
||||
width: fit-content;
|
||||
min-height: fit-content;
|
||||
"
|
||||
>
|
||||
<div class="text-center mb-4" style="height: 120px">
|
||||
<img
|
||||
src="{{category['products'][0].image_url}}"
|
||||
alt="{{category['products'][0].image_url}}"
|
||||
/>
|
||||
</div>
|
||||
<h4>{{ category['products'][0].product_name }}</h4>
|
||||
<ul>
|
||||
{% for detail in category['products'][0].details %}
|
||||
<li>{{detail}}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<a
|
||||
hx-post="/product/{{ category.category }}/{{ category['products'][0].product_name}}"
|
||||
class="btn btn-outline btn-default-yellow-fill mb-2"
|
||||
style="scale: 0.8; border-radius: 5px"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
>
|
||||
Configure Now !
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endif %} {% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
84
templates/order.html
Normal file
84
templates/order.html
Normal file
@ -0,0 +1,84 @@
|
||||
<div
|
||||
class="modal fade modal-info"
|
||||
id="modalOrder"
|
||||
aria-hidden="true"
|
||||
aria-labelledby="modalOrder"
|
||||
role="dialog"
|
||||
tabindex="-1"
|
||||
>
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content" style="padding: 20px">
|
||||
<div id="confirm_order" class="container fade-me-in">
|
||||
{% if config_selection %}
|
||||
<h3 class="mb-5 text-center" style="font-weight: bold">Your Order</h3>
|
||||
{% for product_name, categories in config_selection.items() %}
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<h4 class="mb-0 font-bold">Product: {{ product_name }}</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% for category_name, category_data in categories.items() %}
|
||||
<div class="mb-2">
|
||||
<h5 class="mb-3"><strong>{{ category_name }}</strong></h5>
|
||||
{% if category_data.get('selection') %}
|
||||
<!-- Handle radio input selections -->
|
||||
<ul class="list-group">
|
||||
<li class="mb-4">
|
||||
<ul style="list-style-type: disc">
|
||||
<li>{{ category_data.selection }}</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
{% elif category_data.get('subcategories') %}
|
||||
<!-- Handle checkbox input subcategories -->
|
||||
<ul class="list-group">
|
||||
{% for subcategory_name, items in
|
||||
category_data.subcategories.items() %}
|
||||
<li class="mb-4">
|
||||
{% if category_name != subcategory_name %}
|
||||
<strong>{{ subcategory_name }}:</strong>
|
||||
{% endif %}
|
||||
<ul style="list-style-type: disc">
|
||||
{% for item in items %}
|
||||
<li>{{ item }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>No items selected in this category.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-success"
|
||||
hx-post="/confirm_order"
|
||||
hx-target="#confirm_order"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
style="
|
||||
background-color: #198754;
|
||||
color: white;
|
||||
border-radius: 5px;
|
||||
padding: 15px;
|
||||
font-size: 14px;
|
||||
float: right;
|
||||
"
|
||||
hx-indicator="#spinner3"
|
||||
>
|
||||
Confirm Order
|
||||
</button>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="alert alert-info" role="alert" style="margin-bottom: 0">
|
||||
{{no_order_message}}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
163
templates/product.html
Normal file
163
templates/product.html
Normal file
@ -0,0 +1,163 @@
|
||||
<div class="box-container limit-width fade-me-in">
|
||||
<div class="indexBg top-header item8 overlay"></div>
|
||||
<!-- ***** SLIDER ***** -->
|
||||
<div class="motpath">
|
||||
<div class="container" style="background-color: #f9f9f9; padding: 40px">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div
|
||||
class="row"
|
||||
style="
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: white;
|
||||
padding: 50px;
|
||||
"
|
||||
>
|
||||
<div
|
||||
style="height: 109px;background-image:url('{{product.image_url}}');background-repeat: no-repeat;background-size: contain;"
|
||||
class="col-4"
|
||||
></div>
|
||||
<div class="col-6">
|
||||
<h1
|
||||
class="section-heading mergecolor"
|
||||
style="
|
||||
color: black;
|
||||
font-size: 30px !important;
|
||||
font-weight: bold;
|
||||
"
|
||||
>
|
||||
{{category_data.category}} {{product.product_name}}
|
||||
</h1>
|
||||
<p>{{product.product_data.description}}</p>
|
||||
{% if product.product_data.use_cases %}
|
||||
<h5 style="font-weight: bold">
|
||||
Ideal {{category_data.category}} Use Cases
|
||||
</h5>
|
||||
<ul>
|
||||
{% for cases in product.product_data.use_cases %}
|
||||
<li>{{cases}}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
{% if product.product_data.specifications %}
|
||||
<h4 class="mb-5" style="font-weight: bold">Specifications:</h4>
|
||||
|
||||
<table
|
||||
style="background-color: white; padding: 10px"
|
||||
class="table table-bordered datable table-hover mb-5"
|
||||
>
|
||||
<tbody>
|
||||
{% for key, value in
|
||||
product.product_data.specifications.items() %}
|
||||
<tr>
|
||||
<td style="width: 200px; padding: 15px; font-weight: bold">
|
||||
{{key}}
|
||||
</td>
|
||||
<td style="width: 200px; padding: 15px">{{value}}</td>
|
||||
</tr>
|
||||
{% endfor%}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %} {% if product.product_data.industries %}
|
||||
<div class="mb-5">
|
||||
<h5 style="font-weight: bold">Industries :</h5>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="industries row mb-5">
|
||||
{% for industry in product.product_data.industries %}
|
||||
<div
|
||||
class="industry-item col-md-3 mb-5"
|
||||
style="font-size: 17px"
|
||||
>
|
||||
<i
|
||||
class="fas {% if industry == 'Energy' %}fa-bolt {% elif industry == 'Engineering' %}fa-cogs {% elif industry == 'Financial Services' %}fa-wallet {% elif industry == 'Aerospace / Defense' %}fa-fighter-jet {% elif industry == 'Cloud Services' %}fa-cloud {% elif industry == 'Life Sciences' %}fa-dna {% endif %}"
|
||||
></i>
|
||||
<span>{{ industry }}</span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="row" style="align-items: center">
|
||||
<div class="col-lg-8">
|
||||
<h5 style="font-weight: bold">Configurator :</h5>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<button
|
||||
class="btn btn-success"
|
||||
hx-post="/show_order"
|
||||
hx-target="#target-order"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
style="
|
||||
background-color: #198754;
|
||||
color: white;
|
||||
border-radius: 5px;
|
||||
padding: 15px;
|
||||
font-size: 14px;
|
||||
float: right;
|
||||
"
|
||||
>
|
||||
Show full order
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="system-config" class="row">
|
||||
<div
|
||||
class="col-md-3 row mb-2"
|
||||
style="
|
||||
max-height: 600px;
|
||||
overflow-y: auto;
|
||||
padding: 20px;
|
||||
background-color: white;
|
||||
box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;
|
||||
"
|
||||
>
|
||||
{% for config in product.product_data.config %}
|
||||
<a
|
||||
class="btn btn-outline mb-2 col-md-12 {% if loop.first %}btn-default-yellow-fill{% endif %}"
|
||||
style="
|
||||
border-radius: 5px;
|
||||
padding: 15px;
|
||||
background-color: #35173a;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
"
|
||||
hx-post="/configurator/{{category_data.category}}/{{product.product_name}}/{{config.category.name}}"
|
||||
hx-target="#target-config"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
hx-on="click: this.closest('#system-config').querySelectorAll('.btn').forEach(btn => btn.classList.remove('btn-default-yellow-fill')); this.classList.add('btn-default-yellow-fill');"
|
||||
>
|
||||
{{config.category.name}}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div
|
||||
id="target-config"
|
||||
class="col-md-9 fade-me-in"
|
||||
style="padding: 20px"
|
||||
>
|
||||
{% include '/config.html' %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<img
|
||||
id="spinner2"
|
||||
class="htmx-indicator"
|
||||
src="/static/global/vendor/blueimp-file-upload/loading.gif"
|
||||
style="width: 30px; height: 30px"
|
||||
alt="Loading"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style="clear: both" id="target-order"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
137
templates/servers.html
Normal file
137
templates/servers.html
Normal file
@ -0,0 +1,137 @@
|
||||
<div class="box-container limit-width fade-me-in">
|
||||
<!-- ***** SLIDER ***** -->
|
||||
<div class="serversBg top-header item8 overlay">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="wrapper wrappers text-center">
|
||||
<h1 style="font-size: 50px !important" class="heading">
|
||||
FelCloud sets the standard for server excellence.
|
||||
</h1>
|
||||
<div class="included text-center">
|
||||
<h4 class="mb-5">
|
||||
Our commitment to precision engineering, reliability, and
|
||||
personalized support ensures each system delivers the power,
|
||||
scalability, and dependability to drive your goals forward.
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="wrapper wrappers wrapperBg">
|
||||
<h6 style="color: white">
|
||||
<i class="fas fa-certificate" aria-hidden="true"></i>
|
||||
Server Excellence Standard
|
||||
</h6>
|
||||
<div class="included text-center">
|
||||
<h6 class="mb-3">
|
||||
FelCloud sets the benchmark for exceptional server performance,
|
||||
providing unmatched reliability and top-tier solutions for your
|
||||
business needs.
|
||||
</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="wrapper wrappers wrapperBg">
|
||||
<h6 style="color: white">
|
||||
<i class="fas fa-trophy" aria-hidden="true"></i>
|
||||
Three-Year Warranty
|
||||
</h6>
|
||||
<div class="included text-center">
|
||||
<h6 class="mb-3">
|
||||
Our Three-Year Warranty ensures long-lasting reliability,
|
||||
offering full protection, expert service, and advanced parts
|
||||
replacement for complete peace of mind.
|
||||
</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="wrapper wrappers wrapperBg">
|
||||
<h6 style="color: white">
|
||||
<i class="fas fa-headset" aria-hidden="true"></i>
|
||||
Real People, Real Support
|
||||
</h6>
|
||||
<div class="included text-center">
|
||||
<h6 class="mb-3">
|
||||
Our customer service team provides personalized, real-time
|
||||
support, ensuring that all concerns are addressed quickly and
|
||||
efficiently with no automated systems.
|
||||
</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="wrapper wrappers wrapperBg">
|
||||
<h6 style="color: white">
|
||||
<i class="fas fa-rocket" aria-hidden="true"></i>
|
||||
Outperforming Giants
|
||||
</h6>
|
||||
<div class="included text-center">
|
||||
<h6 class="mb-3">
|
||||
We excel by fostering direct supplier relationships, ensuring
|
||||
competitive pricing, and offering fully customized systems that
|
||||
guarantee superior performance.
|
||||
</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ***** TEAM ***** -->
|
||||
<section
|
||||
class="sec-bg2 bg-colorstyle tophalfpadding nobottompadding motpath"
|
||||
style="padding: 2em"
|
||||
>
|
||||
<div class="team">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 text-center">
|
||||
<h2 class="section-heading mergecolor">Our Servers Types</h2>
|
||||
<p class="section-subheading mergecolor">
|
||||
Explore our diverse range of server types, each designed to meet
|
||||
specific needs and deliver optimal performance for your
|
||||
applications.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row serversCategories">
|
||||
{% for category in servers %}
|
||||
<div class="col-md-4 mb-2">
|
||||
<div
|
||||
style="
|
||||
background-color: white;
|
||||
padding: 25px;
|
||||
padding-top: 35px;
|
||||
border-radius: 10px;
|
||||
height: 340px;
|
||||
"
|
||||
>
|
||||
<div class="text-center mb-4" style="height: 120px">
|
||||
<img src="{{category.category_image}}" alt="{{nav_image}}" />
|
||||
</div>
|
||||
<button
|
||||
hx-post="/servers/{{category.category}}"
|
||||
class="btn btn-outline btn-default-yellow-fill mb-2"
|
||||
style="scale: 0.8; border-radius: 5px"
|
||||
hx-target="#bodyTarget"
|
||||
hx-swap="innerHTML swap:.3s"
|
||||
hx-indicator="#spinner3"
|
||||
>
|
||||
{{category.category}}
|
||||
</button>
|
||||
<p>{{category.description}}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- ***** SLIDER ***** -->
|
||||
</div>
|
||||
Loading…
x
Reference in New Issue
Block a user