refactor(主题初始化): code init
1
.gitignore
vendored
Executable file
@ -0,0 +1 @@
|
||||
.idea
|
||||
19
README.md
@ -1,2 +1,17 @@
|
||||
# theme-moderna
|
||||
基于bootstrapmade-Moderna 设计的Halo主题
|
||||
# ModerNa 主题使用与限制
|
||||
|
||||
基于Halo2.0开发,将当前目录压缩为zip包后安装
|
||||
|
||||
基于 [Moderna](https://bootstrapmade.com/free-bootstrap-template-corporate-moderna/) 模版进行开发
|
||||
|
||||
感谢 [bootstrapmade](https://bootstrapmade.com) 提供免费好用的HTML模版
|
||||
|
||||
设置步骤
|
||||
|
||||
- [x] 设置自定义页面(配置关于/服务/团队/联系我们/博客的自定义页面,菜单中显示的名称对应自定义页面的标题,访问路径对应/别名)
|
||||
- [x] 在主题中对应的菜单下选择固定模版对应的自定义页面才会对下面的设置有效
|
||||
- [x] 修改对应需要显示的块数据与编辑需要展示的数据
|
||||
- [x] 如果需要展示博客内容 需要在文章中添加文章/标签/分类,然后在主题中设置需要展示的内容/分页数量等
|
||||
- [x] 查看内容。本主题默认自带了模拟数据
|
||||
|
||||
主题开发参考 [Halo官方文档](https://docs.halo.run)
|
||||
|
||||
14
build.gradle
Normal file
@ -0,0 +1,14 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
}
|
||||
|
||||
group 'run.halo'
|
||||
version '1.0'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation('org.thymeleaf:thymeleaf:3.0.12.RELEASE')
|
||||
}
|
||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
5
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
234
gradlew
vendored
Normal file
@ -0,0 +1,234 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=${0##*/}
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command;
|
||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
||||
# shell script including quotes and variable substitutions, so put them in
|
||||
# double quotes to make sure that they get re-expanded; and
|
||||
# * put everything else in single quotes, so that it's not re-expanded.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
89
gradlew.bat
vendored
Normal file
@ -0,0 +1,89 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
1
settings.gradle
Normal file
@ -0,0 +1 @@
|
||||
rootProject.name = 'theme-moderna'
|
||||
893
settings.yaml
Normal file
@ -0,0 +1,893 @@
|
||||
apiVersion: v1alpha1
|
||||
kind: Setting
|
||||
metadata:
|
||||
name: theme-moderna-setting
|
||||
spec:
|
||||
forms:
|
||||
- group: home
|
||||
label: 首页
|
||||
formSchema:
|
||||
- $formkit: repeater
|
||||
name: carousel
|
||||
label: 轮播块
|
||||
value:
|
||||
- title: MeterSphere
|
||||
desc: MeterSphere 是一站式的开源持续测试平台,遵循 GPL v3 开源许可协议,涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准,有效助力开发和测试团队充分利用云弹性进行高度可扩展的自动化测试,加速高质量的软件交付。
|
||||
url: https://metersphere.io
|
||||
- title: DataEase
|
||||
desc: DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。DataEase 支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,并可以方便地与他人分享。
|
||||
url: https://dataease.io
|
||||
- title: JumpServer
|
||||
desc: JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。改变世界,从一点点开始。
|
||||
url: https://www.jumpserver.org
|
||||
- title: KubeOperator
|
||||
desc: KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划、部署和运营生产级别的 Kubernetes 集群。
|
||||
url: https://kubeoperator.io
|
||||
- title: Halo
|
||||
desc: 好用又强大的开源建站工具。
|
||||
url: https://halo.run
|
||||
children:
|
||||
- $formkit: text
|
||||
name: title
|
||||
label: 标题
|
||||
value:
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value:
|
||||
- $formkit: url
|
||||
name: url
|
||||
label: 跳转地址
|
||||
value:
|
||||
- $formkit: attachment
|
||||
name: carousel_bg_img
|
||||
label: 轮播块背景图片
|
||||
value: /themes/moderna-template/assets/img/hero-bg.jpg
|
||||
- $formkit: radio
|
||||
name: show_card
|
||||
id: show_home_card
|
||||
key: show_home_card
|
||||
label: 显示卡片块
|
||||
value: true
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
- $formkit: repeater
|
||||
if: "$get(show_home_card).value"
|
||||
name: service
|
||||
label: 企业文化
|
||||
help: 必须是四个的排版 目前不支持其他的
|
||||
value:
|
||||
- icon: bxl-dribbble
|
||||
title: 平等
|
||||
desc: 公司是我们共同的老板
|
||||
- icon: bx-file
|
||||
title: 价值
|
||||
desc: 软件用起来才有价值,才有改进的机会
|
||||
- icon: bx-tachometer
|
||||
title: 求真
|
||||
desc: 不断求真,坚持有所不为有所为
|
||||
- icon: bx-world
|
||||
title: 担当
|
||||
desc: 做问题的终结者,而不是转发者和抱怨者
|
||||
children:
|
||||
- $formkit: text
|
||||
name: icon
|
||||
label: 图标
|
||||
value:
|
||||
help: 选择boxicons的icon样式
|
||||
- $formkit: text
|
||||
name: title
|
||||
label: 标题
|
||||
value:
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value:
|
||||
- $formkit: radio
|
||||
name: show_why_us
|
||||
id: show_home_why_us
|
||||
key: show_home_why_us
|
||||
label: 显示介绍块
|
||||
value: true
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
- $formkit: attachment
|
||||
if: "$get(show_home_why_us).value"
|
||||
name: why_bg_img
|
||||
label: 介绍公司背景图片
|
||||
value: /themes/moderna-template/assets/img/why-us.jpg
|
||||
- $formkit: url
|
||||
if: "$get(show_home_why_us).value"
|
||||
name: why_video_url
|
||||
label: 视频地址
|
||||
value:
|
||||
- $formkit: repeater
|
||||
if: "$get(show_home_why_us).value"
|
||||
name: why_us_items
|
||||
label: 介绍条目
|
||||
value:
|
||||
- icon: bx-fingerprint
|
||||
title: 核心价值观
|
||||
desc: 软件用起来才有价值,才有改进的机会!
|
||||
- icon: bx-world
|
||||
title: 加入我们
|
||||
desc: 为数字经济时代创造好软件,一起改变世界!
|
||||
children:
|
||||
- $formkit: text
|
||||
name: icon
|
||||
label: 图标
|
||||
value:
|
||||
help: 选择boxicons的icon样式
|
||||
- $formkit: text
|
||||
name: title
|
||||
label: 标题
|
||||
value:
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value:
|
||||
- $formkit: radio
|
||||
name: show_features
|
||||
id: show_home_features
|
||||
key: show_home_features
|
||||
label: 显示特点块
|
||||
value: true
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
- $formkit: text
|
||||
if: "$get(show_home_features).value"
|
||||
name: features_title
|
||||
label: 标题
|
||||
value: 优势
|
||||
- $formkit: text
|
||||
if: "$get(show_home_features).value"
|
||||
name: features_desc
|
||||
label: 描述
|
||||
value: 我们有最强的团队、非凡的执行力和团结的凝聚力,我们也必将成为世界一流的软件服务公司。
|
||||
- $formkit: repeater
|
||||
if: "$get(show_home_features).value"
|
||||
name: features_items
|
||||
label: 优势条目
|
||||
value:
|
||||
- img: /themes/moderna-template/assets/img/features-1.svg
|
||||
title: 努力成为世界第一
|
||||
desc: 我们坚信我们将超越世界上所有的公司
|
||||
items:
|
||||
- desc: 服务第一
|
||||
- desc: 质量第一
|
||||
- desc: 福利第一
|
||||
- img: /themes/moderna-template/assets/img/features-2.svg
|
||||
title: 努力成为世界第一
|
||||
desc: 我们坚信我们将超越世界上所有的公司
|
||||
items:
|
||||
- desc: 服务第一
|
||||
- desc: 质量第一
|
||||
- desc: 福利第一
|
||||
- img: /themes/moderna-template/assets/img/features-3.svg
|
||||
title: 努力成为世界第一
|
||||
desc: 我们坚信我们将超越世界上所有的公司
|
||||
items:
|
||||
- desc: 服务第一
|
||||
- desc: 质量第一
|
||||
- desc: 福利第一
|
||||
- img: /themes/moderna-template/assets/img/features-4.svg
|
||||
title: 努力成为世界第一
|
||||
desc: 我们坚信我们将超越世界上所有的公司
|
||||
items:
|
||||
- desc: 服务第一
|
||||
- desc: 质量第一
|
||||
- desc: 福利第一
|
||||
children:
|
||||
- $formkit: attachment
|
||||
name: img
|
||||
label: 图片
|
||||
value:
|
||||
- $formkit: text
|
||||
name: title
|
||||
label: 标题
|
||||
value:
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value:
|
||||
- $formkit: repeater
|
||||
name: items
|
||||
label: 描述条目
|
||||
value: []
|
||||
children:
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value: ""
|
||||
- group: about
|
||||
label: 关于我们
|
||||
formSchema:
|
||||
- $formkit: radio
|
||||
help: 这个主要是用关于我们那个自定义模版下面的配置注意啦
|
||||
name: show
|
||||
id: show_about
|
||||
key: show_about
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
label: 是否显示
|
||||
value: false
|
||||
- $formkit: singlePageSelect
|
||||
if: "$get(show_about).value"
|
||||
name: page
|
||||
label: 选择自定义界面
|
||||
validation: "required"
|
||||
value:
|
||||
help: 必须选择关于我们模版的自定义页面,否则下面的配置将会失效。
|
||||
- $formkit: attachment
|
||||
if: "$get(show_about).value"
|
||||
name: header_img
|
||||
label: 顶部图片
|
||||
value: /themes/moderna-template/assets/img/about.jpg
|
||||
- $formkit: text
|
||||
if: "$get(show_about).value"
|
||||
name: header_title
|
||||
label: 顶部标题
|
||||
value: 软件用起来才有价值
|
||||
- $formkit: text
|
||||
if: "$get(show_about).value"
|
||||
name: header_desc
|
||||
label: 顶部描述
|
||||
value: 愿所有用户都能将我们的软件使用起来,一起将软件功能进行完善,为了成熟的软件生态而自强不息!
|
||||
- $formkit: repeater
|
||||
if: "$get(show_about).value"
|
||||
name: header_desc_items
|
||||
label: 顶部描述条目
|
||||
value:
|
||||
- desc: 通过开源形态构建软件版本迭代体系发展。
|
||||
- desc: 用户反馈需求进行快速迭代更新。
|
||||
- desc: 提供企业级用户服务支持体系,帮助用户快速使用并与我们一起成长。
|
||||
children:
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value:
|
||||
- $formkit: text
|
||||
if: "$get(show_about).value"
|
||||
name: header_summary
|
||||
label: 顶部总结
|
||||
value: 我们的愿景是成为世界一流的Saas软件服务提供商,与用户一起热爱一起成长!
|
||||
- $formkit: repeater
|
||||
if: "$get(show_about).value"
|
||||
name: header_num_items
|
||||
label: 数字展示条目
|
||||
help: 支持被12整除的数量,移动端每行只显示2个,所以最好的数量是2/4
|
||||
value:
|
||||
- name: 产品
|
||||
num: 6
|
||||
- name: 成员人数
|
||||
num: 360
|
||||
- name: 办公地址
|
||||
num: 18
|
||||
- name: 客户数量
|
||||
num: 10000
|
||||
children:
|
||||
- $formkit: text
|
||||
name: name
|
||||
label: 名称
|
||||
value:
|
||||
- $formkit: text
|
||||
name: num
|
||||
label: 数量
|
||||
value:
|
||||
- $formkit: text
|
||||
if: "$get(show_about).value"
|
||||
name: bar_chart_title
|
||||
label: 柱形图标题
|
||||
value: 我们的优势
|
||||
- $formkit: text
|
||||
if: "$get(show_about).value"
|
||||
name: bar_chart_desc
|
||||
label: 柱形图描述
|
||||
value: 我们在不同软件服务领域的市场占有率
|
||||
- $formkit: repeater
|
||||
if: "$get(show_about).value"
|
||||
name: bar_chart_items
|
||||
label: 柱形图条目
|
||||
value:
|
||||
- name: 云服务
|
||||
percent: 30
|
||||
color: '#8e2abd'
|
||||
- name: 安全运维审计
|
||||
percent: 75
|
||||
color: '#4f9a57'
|
||||
- name: 数据可视化
|
||||
percent: 36
|
||||
color: '#c02756'
|
||||
- name: 自动化测试
|
||||
percent: 88
|
||||
color: '#c05c27'
|
||||
- name: 零代码建站
|
||||
percent: 100
|
||||
color: '#1717dc'
|
||||
children:
|
||||
- $formkit: text
|
||||
name: name
|
||||
label: 名称
|
||||
- $formkit: text
|
||||
name: percent
|
||||
label: 百分比
|
||||
help: 不能超过100
|
||||
- $formkit: color
|
||||
name: color
|
||||
label: 颜色
|
||||
- $formkit: text
|
||||
if: "$get(show_about).value"
|
||||
name: carousel_title
|
||||
label: 轮播标题
|
||||
value: 用户评价
|
||||
- $formkit: text
|
||||
if: "$get(show_about).value"
|
||||
name: carousel_desc
|
||||
label: 轮播描述
|
||||
value: 感谢广大用户给我们提出的宝贵建议与高度认可。
|
||||
- $formkit: repeater
|
||||
if: "$get(show_about).value"
|
||||
name: carousel_items
|
||||
label: 轮播条目
|
||||
value:
|
||||
- avatar: /themes/moderna-template/assets/img/team/team-2.jpg
|
||||
name: 马某
|
||||
location: 某五百强首席执行官
|
||||
content: 感谢为世界软件事业发展做出的重大贡献。
|
||||
- avatar: /themes/moderna-template/assets/img/team/team-2.jpg
|
||||
name: 李某
|
||||
location: 金牌合作伙伴
|
||||
content: 很开心能与贵司合作达成双赢。
|
||||
- avatar: /themes/moderna-template/assets/img/team/team-2.jpg
|
||||
name: 马某
|
||||
location: 首席产品经理
|
||||
content: 产品不错,给用户很好的使用体检。继续加油!
|
||||
- avatar: /themes/moderna-template/assets/img/team/team-2.jpg
|
||||
name: 王某
|
||||
location: 首席铲屎官
|
||||
content: 我是世界第一帅,你们是世界第一棒!
|
||||
children:
|
||||
- $formkit: attachment
|
||||
name: avatar
|
||||
label: 头像
|
||||
- $formkit: text
|
||||
name: name
|
||||
label: 名称
|
||||
- $formkit: text
|
||||
name: location
|
||||
label: 职位
|
||||
- $formkit: text
|
||||
name: content
|
||||
label: 内容
|
||||
- group: service
|
||||
label: 服务
|
||||
formSchema:
|
||||
- $formkit: radio
|
||||
help: 这个主要是用服务那个自定义模版下面的配置注意啦
|
||||
name: show
|
||||
id: show_service
|
||||
key: show_service
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
label: 是否显示
|
||||
value: false
|
||||
- $formkit: singlePageSelect
|
||||
if: "$get(show_service).value"
|
||||
name: page
|
||||
label: 选择自定义界面
|
||||
validation: "required"
|
||||
value:
|
||||
help: 必须选择服务模版的自定义页面,否则下面的配置将会失效。
|
||||
- $formkit: radio
|
||||
if: "$get(show_service).value"
|
||||
name: show_service
|
||||
id: show_service_key
|
||||
key: show_service_key
|
||||
label: 显示文化
|
||||
value: true
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
- $formkit: repeater
|
||||
if: "$get(show_service).value && $get(show_service_key).value"
|
||||
name: service_items
|
||||
id: service_items
|
||||
key: service_items
|
||||
label: 企业文化
|
||||
help: 建议2/4个数据否则会导致排版出现问题
|
||||
value:
|
||||
- icon: bxl-dribbble
|
||||
title: 平等
|
||||
desc: 公司是我们共同的老板
|
||||
- icon: bx-file
|
||||
title: 价值
|
||||
desc: 软件用起来才有价值,才有改进的机会
|
||||
- icon: bx-tachometer
|
||||
title: 求真
|
||||
desc: 不断求真,坚持有所不为有所为
|
||||
- icon: bx-world
|
||||
title: 担当
|
||||
desc: 做问题的终结者,而不是转发者和抱怨者
|
||||
children:
|
||||
- $formkit: text
|
||||
name: icon
|
||||
label: 图标
|
||||
help: 选择boxicons的icon样式
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: title
|
||||
label: 标题
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value: ""
|
||||
- $formkit: radio
|
||||
if: "$get(show_service).value"
|
||||
name: show_why_us
|
||||
id: show_service_why_us
|
||||
key: show_service_why_us
|
||||
label: 显示介绍
|
||||
value: true
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
- $formkit: attachment
|
||||
if: "$get(show_service).value && $get(show_service_why_us).value"
|
||||
name: why_bg_img
|
||||
label: 介绍背景图片
|
||||
value: /themes/moderna-template/assets/img/why-us.jpg
|
||||
- $formkit: url
|
||||
if: "$get(show_service).value && $get(show_service_why_us).value"
|
||||
name: why_video_url
|
||||
label: 视频地址
|
||||
value:
|
||||
- $formkit: repeater
|
||||
if: "$get(show_service).value && $get(show_service_why_us).value"
|
||||
name: why_us_items
|
||||
label: 介绍条目
|
||||
value:
|
||||
- icon: bx-fingerprint
|
||||
title: 核心价值观
|
||||
desc: 软件用起来才有价值,才有改进的机会!
|
||||
- icon: bx-world
|
||||
title: 加入我们
|
||||
desc: 为数字经济时代创造好软件,一起改变世界!
|
||||
children:
|
||||
- $formkit: text
|
||||
name: icon
|
||||
label: 图标
|
||||
value:
|
||||
help: 选择boxicons的icon样式
|
||||
- $formkit: text
|
||||
name: title
|
||||
label: 标题
|
||||
value:
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value:
|
||||
- $formkit: radio
|
||||
if: "$get(show_service).value"
|
||||
name: show_card
|
||||
id: show_service_card
|
||||
key: show_service_card
|
||||
label: 显示卡片
|
||||
value: true
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
- $formkit: repeater
|
||||
if: "$get(show_service).value && $get(show_service_card).value"
|
||||
name: card_itmes
|
||||
id: card_itmes
|
||||
key: card_itmes
|
||||
label: 卡片信息
|
||||
value:
|
||||
- img: /themes/moderna-template/assets/img/card-1.jpg
|
||||
title: MeterSphere
|
||||
desc: MeterSphere 是一站式的开源持续测试平台,遵循 GPL v3 开源许可协议,涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准,有效助力开发和测试团队充分利用云弹性进行高度可扩展的自动化测试,加速高质量的软件交付。
|
||||
url: https://metersphere.io
|
||||
- img: /themes/moderna-template/assets/img/card-2.jpg
|
||||
title: DataEase
|
||||
desc: DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。DataEase 支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,并可以方便地与他人分享。
|
||||
url: https://dataease.io
|
||||
- img: /themes/moderna-template/assets/img/card-3.jpg
|
||||
title: JumpServer
|
||||
desc: JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。改变世界,从一点点开始。
|
||||
url: https://www.jumpserver.org
|
||||
- img: /themes/moderna-template/assets/img/card-4.jpg
|
||||
title: KubeOperator
|
||||
desc: KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划、部署和运营生产级别的 Kubernetes 集群。
|
||||
url: https://kubeoperator.io
|
||||
children:
|
||||
- $formkit: attachment
|
||||
name: img
|
||||
label: 图片
|
||||
value:
|
||||
- $formkit: text
|
||||
name: title
|
||||
label: 标题
|
||||
value:
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value:
|
||||
- $formkit: url
|
||||
name: url
|
||||
label: 跳转地址
|
||||
value:
|
||||
- $formkit: radio
|
||||
if: "$get(show_service).value"
|
||||
name: show_price
|
||||
id: show_service_price
|
||||
key: show_service_price
|
||||
label: 显示价格
|
||||
value: true
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
- $formkit: text
|
||||
if: "$get(show_service).value && $get(show_service_price).value"
|
||||
name: price_desc
|
||||
label: 价格描述
|
||||
value: 诚信经营,童叟无欺!
|
||||
- $formkit: repeater
|
||||
if: "$get(show_service).value && $get(show_service_price).value"
|
||||
name: price_items
|
||||
label: 价格条目
|
||||
help: 默认只能三个
|
||||
value:
|
||||
- name: 免费版
|
||||
num: ¥0 /月
|
||||
desc: '<li><i class="bx bx-check"></i> 基本功能 </li>
|
||||
<li><i class="bx bx-check"></i> 多租户管理 </li>
|
||||
<li><i class="bx bx-check"></i> 工作台 </li>
|
||||
<li class="na"><i class="bx bx-x"></i> <span>企业认证集成</span></li>
|
||||
<li class="na"><i class="bx bx-x"></i> <span>商业功能</span></li>'
|
||||
btn_name: 免费试用
|
||||
btn_url: /
|
||||
- name: 商业版
|
||||
num: ¥800 /月
|
||||
desc: '<li><i class="bx bx-check"></i> 基本功能</li>
|
||||
<li><i class="bx bx-check"></i> 多租户管理</li>
|
||||
<li><i class="bx bx-check"></i> 工作台</li>
|
||||
<li><i class="bx bx-check"></i> 企业认证集成</li>
|
||||
<li><i class="bx bx-check"></i> 商业功能</li>'
|
||||
btn_name: 立即购买
|
||||
btn_url: /
|
||||
- name: 旗舰版
|
||||
num: ¥1200 /月
|
||||
desc: '<li><i class="bx bx-check"></i> 基本功能</li>
|
||||
<li><i class="bx bx-check"></i> 多租户管理</li>
|
||||
<li><i class="bx bx-check"></i> 工作台</li>
|
||||
<li><i class="bx bx-check"></i> 企业认证集成</li>
|
||||
<li><i class="bx bx-check"></i> 商业功能</li>
|
||||
<li><i class="bx bx-check"></i> 专属客服支持</li>'
|
||||
btn_name: 立即购买
|
||||
btn_url: /
|
||||
children:
|
||||
- $formkit: text
|
||||
name: name
|
||||
label: 名称
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: num
|
||||
label: 价格
|
||||
help: 如 ¥1200 /月
|
||||
value: ""
|
||||
- $formkit: code
|
||||
name: desc
|
||||
label: 描述
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: btn_name
|
||||
label: 按钮名称
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: btn_url
|
||||
label: 跳转地址
|
||||
value: ""
|
||||
- group: team
|
||||
label: 团队
|
||||
formSchema:
|
||||
- $formkit: radio
|
||||
help: 这个主要是用团队那个自定义模版下面的配置注意啦
|
||||
name: show
|
||||
id: show_team
|
||||
key: show_team
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
label: 是否显示
|
||||
value: false
|
||||
- $formkit: singlePageSelect
|
||||
if: "$get(show_team).value"
|
||||
name: page
|
||||
label: 选择自定义界面
|
||||
validation: "required"
|
||||
value:
|
||||
help: 必须选择团队模版的自定义页面,否则下面的配置将会失效。
|
||||
- $formkit: repeater
|
||||
if: "$get(show_team).value"
|
||||
name: items
|
||||
label: 成员列表
|
||||
value:
|
||||
- photo: /themes/moderna-template/assets/img/team/team-2.jpg
|
||||
name: 王某
|
||||
localtion: 首席铲屎官
|
||||
desc: 作为公司最帅的标杆就是需要有足够的闷骚才能男女通杀!
|
||||
social: '<a href="/"><i class="iconfont icon-zhihu"></i></a>
|
||||
<a href="/"><i class="iconfont icon-weibo"></i></a>
|
||||
<a href="/"><i class="iconfont icon-qq"></i></a>
|
||||
<a href="/"><i class="iconfont icon-weixin"></i></a>'
|
||||
- photo: /themes/moderna-template/assets/img/team/team-2.jpg
|
||||
name: 刘某
|
||||
localtion: IT 民工
|
||||
desc: 矜矜业业,为软件事业每天付出24小时!
|
||||
social: '<a href="/"><i class="iconfont icon-zhihu"></i></a>
|
||||
<a href="/"><i class="iconfont icon-weibo"></i></a>
|
||||
<a href="/"><i class="iconfont icon-qq"></i></a>
|
||||
<a href="/"><i class="iconfont icon-weixin"></i></a>'
|
||||
- photo: /themes/moderna-template/assets/img/team/team-2.jpg
|
||||
name: 兰某某
|
||||
localtion: 首席架构师
|
||||
desc: 不要问,问就是什么都懂!
|
||||
social: '<a href="/"><i class="iconfont icon-zhihu"></i></a>
|
||||
<a href="/"><i class="iconfont icon-weibo"></i></a>
|
||||
<a href="/"><i class="iconfont icon-qq"></i></a>
|
||||
<a href="/"><i class="iconfont icon-weixin"></i></a>'
|
||||
children:
|
||||
- $formkit: attachment
|
||||
name: photo
|
||||
label: 照片
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: name
|
||||
label: 名称
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: localtion
|
||||
label: 职位
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: desc
|
||||
label: 描述
|
||||
value: ""
|
||||
- $formkit: code
|
||||
name: social
|
||||
label: 社交
|
||||
value: ""
|
||||
- group: blog
|
||||
label: 博客
|
||||
formSchema:
|
||||
- $formkit: radio
|
||||
name: show
|
||||
id: show_blog
|
||||
key: show_blog
|
||||
help: 必须是博客自定义模版下面的设置才有效
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
label: 是否显示
|
||||
value: false
|
||||
- $formkit: singlePageSelect
|
||||
if: "$get(show_blog).value"
|
||||
name: page
|
||||
label: 选择自定义界面
|
||||
validation: "required"
|
||||
value:
|
||||
help: 必须选择博客模版的自定义页面,否则下面的配置将会失效。
|
||||
- $formkit: number
|
||||
if: "$get(show_blog).value"
|
||||
name: page_num
|
||||
label: 每页显示数量
|
||||
validation: "required"
|
||||
value: 6
|
||||
- $formkit: text
|
||||
if: "$get(show_blog).value"
|
||||
name: cg_name
|
||||
label: 分类显示名称
|
||||
validation: "required"
|
||||
value: 分类
|
||||
- $formkit: text
|
||||
if: "$get(show_blog).value"
|
||||
name: tg_name
|
||||
label: 标签显示名称
|
||||
validation: "required"
|
||||
value: 标签
|
||||
- $formkit: text
|
||||
if: "$get(show_blog).value"
|
||||
name: new_it_name
|
||||
label: 最新条目显示名称
|
||||
validation: "required"
|
||||
value: 最新发布
|
||||
- $formkit: number
|
||||
if: "$get(show_blog).value"
|
||||
name: new_it_num
|
||||
label: 最新条目显示数量
|
||||
validation: "required"
|
||||
value: 6
|
||||
- group: contact
|
||||
label: 联系我们
|
||||
formSchema:
|
||||
- $formkit: radio
|
||||
name: show
|
||||
id: show_contact
|
||||
key: show_contact
|
||||
help: 必须是联系我们自定义模版下面的设置才有效
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
label: 是否显示
|
||||
value: false
|
||||
- $formkit: singlePageSelect
|
||||
if: "$get(show_contact).value"
|
||||
name: page
|
||||
label: 选择自定义界面
|
||||
validation: "required"
|
||||
value:
|
||||
help: 必须选择联系我们模版的自定义页面,否则下面的配置将会失效。
|
||||
- $formkit: text
|
||||
if: "$get(show_contact).value"
|
||||
name: address
|
||||
label: 地址
|
||||
value: 某某省某某市某某区某某路**号**********大厦某单元
|
||||
- $formkit: email
|
||||
if: "$get(show_contact).value"
|
||||
name: email
|
||||
label: 邮箱地址
|
||||
value: support@xx.xx.com
|
||||
- $formkit: tel
|
||||
if: "$get(show_contact).value"
|
||||
name: phone
|
||||
label: 联系方式
|
||||
value: +86 131 **** 0001
|
||||
- $formkit: url
|
||||
if: "$get(show_contact).value"
|
||||
name: add_contact_url
|
||||
label: 提交联系URL
|
||||
value: http://www.myweb.com/add/contact
|
||||
- $formkit: radio
|
||||
if: "$get(show_contact).value"
|
||||
name: show_map
|
||||
id: show_contact_map
|
||||
key: show_contact_map
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
label: 显示地图
|
||||
value: false
|
||||
- $formkit: url
|
||||
if: "$get(show_contact).value && $get(show_contact_map).value"
|
||||
name: map_url
|
||||
label: 地图URL
|
||||
value: ""
|
||||
- group: common_style
|
||||
label: 全局样式
|
||||
formSchema:
|
||||
- $formkit: code
|
||||
name: import_code
|
||||
help: 插入Header里面的css或者js
|
||||
label: 头部引入代码
|
||||
value: '<link href="//at.alicdn.com/t/c/font_2902222_l8a73x2m3c.css" rel="stylesheet">'
|
||||
- $formkit: radio
|
||||
name: show_menu
|
||||
id: show_menu
|
||||
key: show_menu
|
||||
help: 是否显示菜单
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
label: 是否显示菜单
|
||||
value: true
|
||||
- $formkit: menuRadio
|
||||
if: "$get(show_menu).value"
|
||||
name: extra_menu
|
||||
label: 额外菜单
|
||||
help: 当前主题最多显示二级菜单,因为无法选中菜单所以只适合外链
|
||||
value: ""
|
||||
- $formkit: radio
|
||||
name: show_footer_top
|
||||
id: show_footer_top
|
||||
key: show_footer_top
|
||||
label: 显示底部外链块
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
value: true
|
||||
- $formkit: menuRadio
|
||||
if: "$get(show_footer_top).value"
|
||||
name: first_menu
|
||||
label: 第一链接
|
||||
value:
|
||||
- $formkit: menuRadio
|
||||
if: "$get(show_footer_top).value"
|
||||
name: sec_menu
|
||||
label: 第二链接
|
||||
value:
|
||||
- $formkit: text
|
||||
if: "$get(show_footer_top).value"
|
||||
name: third_title
|
||||
label: 第三块标题
|
||||
value: 联系我们
|
||||
- $formkit: code
|
||||
if: "$get(show_footer_top).value"
|
||||
name: third_code
|
||||
label: 第三块代码
|
||||
value: '<p>
|
||||
某某省某某市 <br>
|
||||
某某区某某路<br>
|
||||
某某大厦***号房 <br><br>
|
||||
<strong>电话:</strong> +86 131****0008<br>
|
||||
<strong>邮箱:</strong> support@**.**.com<br>
|
||||
</p>'
|
||||
- $formkit: text
|
||||
if: "$get(show_footer_top).value"
|
||||
name: four_title
|
||||
label: 第四块标题
|
||||
value: 关注我们
|
||||
- $formkit: code
|
||||
if: "$get(show_footer_top).value"
|
||||
name: four_code
|
||||
label: 第四块代码
|
||||
value: '<p>Halo你值得拥有</p>
|
||||
<div class="social-links mt-3">
|
||||
<img style="max-height: 120px;" src="/themes/moderna-template/assets/img/wechat.jpg">
|
||||
</div>'
|
||||
- $formkit: radio
|
||||
name: show_copyright
|
||||
id: show_copyright
|
||||
key: show_copyright
|
||||
label: 显示版权信息
|
||||
options:
|
||||
- label: 是
|
||||
value: true
|
||||
- label: 否
|
||||
value: false
|
||||
value: true
|
||||
- $formkit: code
|
||||
if: "$get(show_copyright).value"
|
||||
name: copyright
|
||||
label: 版权代码
|
||||
value: '<div class="copyright">
|
||||
© Copyright <strong><span>Moderna</span></strong>. All Rights Reserved
|
||||
</div>
|
||||
<div class="credits">
|
||||
Designed by <a href="https://bootstrapmade.com/">Moderna</a>
|
||||
</div>'
|
||||
125
templates/about.html
Normal file
@ -0,0 +1,125 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<th:block th:replace="~{modules/import}" />
|
||||
|
||||
<body>
|
||||
|
||||
<th:block th:replace="~{modules/header::goPage(${singlePage.spec.slug})}" />
|
||||
|
||||
<main id="main">
|
||||
|
||||
<!-- ======= About Us Section ======= -->
|
||||
<section class="breadcrumbs">
|
||||
<div class="container">
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h2 th:text="${singlePage.spec.title}"></h2>
|
||||
<ol>
|
||||
<li><a href="/">首页</a></li>
|
||||
<li th:text="${singlePage.spec.title}"></li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End About Us Section -->
|
||||
|
||||
<!-- ======= About Section ======= -->
|
||||
<section class="about" data-aos="fade-up">
|
||||
<div class="container">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<img th:src="@{${theme.config.about.header_img}}" class="img-fluid" alt="">
|
||||
</div>
|
||||
<div class="col-lg-6 pt-4 pt-lg-0">
|
||||
<h3 th:text="${theme.config.about.header_title}"></h3>
|
||||
<p class="fst-italic" th:text="${theme.config.about.header_desc}">
|
||||
</p>
|
||||
<ul>
|
||||
<li th:each="it : ${theme.config.about.header_desc_items}"><i class="bi bi-check2-circle"></i> <span
|
||||
th:text="${it.desc}"></span> </li>
|
||||
</ul>
|
||||
<p th:text="${theme.config.about.header_summary}">
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End About Section -->
|
||||
|
||||
<!-- ======= Facts Section ======= -->
|
||||
<section class="facts section-bg" data-aos="fade-up">
|
||||
<div class="container" th:with="itSize=${#arrays.length(theme.config.about.header_num_items)}">
|
||||
<div class="row counters">
|
||||
|
||||
<div th:each="it : ${theme.config.about.header_num_items}"
|
||||
th:class="'col-lg-'+ ${12/itSize} + ' col-6 text-center'">
|
||||
<span data-purecounter-start="0" th:data-purecounter-end="${it.num}" data-purecounter-duration="1"
|
||||
class="purecounter"></span>
|
||||
<p th:text="${it.name}">产品</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End Facts Section -->
|
||||
|
||||
<!-- ======= Our Skills Section ======= -->
|
||||
<section class="skills" data-aos="fade-up">
|
||||
<div class="container">
|
||||
|
||||
<div class="section-title">
|
||||
<h2 th:text="${theme.config.about.bar_chart_title}"></h2>
|
||||
<p th:text="${theme.config.about.bar_chart_desc}"></p>
|
||||
</div>
|
||||
|
||||
<div class="skills-content">
|
||||
|
||||
<div class="progress" th:each="it : ${theme.config.about.bar_chart_items}">
|
||||
<div class="progress-bar" th:style="'background-color:'+${it.color}" role="progressbar"
|
||||
th:aria-valuenow="${it.percent}" aria-valuemin="0" aria-valuemax="100">
|
||||
<span class="skill"><span th:text="${it.name}"></span> <i class="val"
|
||||
th:text="${it.percent}+'%'"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End Our Skills Section -->
|
||||
|
||||
<!-- ======= Tetstimonials Section ======= -->
|
||||
<section class="testimonials" data-aos="fade-up">
|
||||
<div class="container">
|
||||
|
||||
<div class="section-title">
|
||||
<h2 th:text="${theme.config.about.carousel_title}"></h2>
|
||||
<p th:text="${theme.config.about.carousel_desc}"></p>
|
||||
</div>
|
||||
|
||||
<div class="testimonials-carousel swiper">
|
||||
<div class="swiper-wrapper">
|
||||
<div th:each="it : ${theme.config.about.carousel_items}" class="testimonial-item swiper-slide">
|
||||
<img th:src="@{${it.avatar}}" class="testimonial-img" alt="">
|
||||
<h3 th:text="${it.name}"></h3>
|
||||
<h4 th:text="${it.location}"></h4>
|
||||
<p>
|
||||
<i class="bx bxs-quote-alt-left quote-icon-left"></i>
|
||||
<span th:text="${it.content}"></span>
|
||||
<i class="bx bxs-quote-alt-right quote-icon-right"></i>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-pagination"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End Ttstimonials Section -->
|
||||
|
||||
</main><!-- End #main -->
|
||||
|
||||
<!-- ======= Footer ======= -->
|
||||
<th:block th:replace="~{modules/footer}" />
|
||||
<!-- End Footer -->
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
2357
templates/assets/css/style.css
Normal file
BIN
templates/assets/img/about.jpg
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
templates/assets/img/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
templates/assets/img/card-1.jpg
Normal file
|
After Width: | Height: | Size: 194 KiB |
BIN
templates/assets/img/card-2.jpg
Normal file
|
After Width: | Height: | Size: 644 KiB |
BIN
templates/assets/img/card-3.jpg
Normal file
|
After Width: | Height: | Size: 222 KiB |
BIN
templates/assets/img/card-4.jpg
Normal file
|
After Width: | Height: | Size: 558 KiB |
BIN
templates/assets/img/favicon.png
Normal file
|
After Width: | Height: | Size: 491 B |
1
templates/assets/img/features-1.svg
Normal file
|
After Width: | Height: | Size: 65 KiB |
1
templates/assets/img/features-2.svg
Normal file
|
After Width: | Height: | Size: 19 KiB |
1
templates/assets/img/features-3.svg
Normal file
|
After Width: | Height: | Size: 51 KiB |
1
templates/assets/img/features-4.svg
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
templates/assets/img/hero-bg.jpg
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
templates/assets/img/team/team-2.jpg
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
templates/assets/img/wechat.jpg
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
templates/assets/img/why-us.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
235
templates/assets/js/main.js
Normal file
@ -0,0 +1,235 @@
|
||||
/**
|
||||
* Template Name: Moderna - v4.11.0
|
||||
* Template URL: https://bootstrapmade.com/free-bootstrap-template-corporate-moderna/
|
||||
* Author: BootstrapMade.com
|
||||
* License: https://bootstrapmade.com/license/
|
||||
*/
|
||||
(function() {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Easy selector helper function
|
||||
*/
|
||||
const select = (el, all = false) => {
|
||||
el = el.trim()
|
||||
if (all) {
|
||||
return [...document.querySelectorAll(el)]
|
||||
} else {
|
||||
return document.querySelector(el)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Easy event listener function
|
||||
*/
|
||||
const on = (type, el, listener, all = false) => {
|
||||
let selectEl = select(el, all)
|
||||
if (selectEl) {
|
||||
if (all) {
|
||||
selectEl.forEach(e => e.addEventListener(type, listener))
|
||||
} else {
|
||||
selectEl.addEventListener(type, listener)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Easy on scroll event listener
|
||||
*/
|
||||
const onscroll = (el, listener) => {
|
||||
el.addEventListener('scroll', listener)
|
||||
}
|
||||
|
||||
/**
|
||||
* Scrolls to an element with header offset
|
||||
*/
|
||||
const scrollto = (el) => {
|
||||
let header = select('#header')
|
||||
let offset = header.offsetHeight
|
||||
|
||||
if (!header.classList.contains('header-scrolled')) {
|
||||
offset -= 20
|
||||
}
|
||||
|
||||
let elementPos = select(el).offsetTop
|
||||
window.scrollTo({
|
||||
top: elementPos - offset,
|
||||
behavior: 'smooth'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle .header-scrolled class to #header when page is scrolled
|
||||
*/
|
||||
let selectHeader = select('#header')
|
||||
if (selectHeader) {
|
||||
const headerScrolled = () => {
|
||||
if (window.scrollY > 100) {
|
||||
selectHeader.classList.add('header-scrolled')
|
||||
} else {
|
||||
selectHeader.classList.remove('header-scrolled')
|
||||
}
|
||||
}
|
||||
window.addEventListener('load', headerScrolled)
|
||||
onscroll(document, headerScrolled)
|
||||
}
|
||||
|
||||
/**
|
||||
* Back to top button
|
||||
*/
|
||||
let backtotop = select('.back-to-top')
|
||||
if (backtotop) {
|
||||
const toggleBacktotop = () => {
|
||||
if (window.scrollY > 100) {
|
||||
backtotop.classList.add('active')
|
||||
} else {
|
||||
backtotop.classList.remove('active')
|
||||
}
|
||||
}
|
||||
window.addEventListener('load', toggleBacktotop)
|
||||
onscroll(document, toggleBacktotop)
|
||||
}
|
||||
|
||||
/**
|
||||
* Mobile nav toggle
|
||||
*/
|
||||
on('click', '.mobile-nav-toggle', function(e) {
|
||||
select('#navbar').classList.toggle('navbar-mobile')
|
||||
this.classList.toggle('bi-list')
|
||||
this.classList.toggle('bi-x')
|
||||
})
|
||||
|
||||
/**
|
||||
* Mobile nav dropdowns activate
|
||||
*/
|
||||
on('click', '.navbar .dropdown > a', function(e) {
|
||||
if (select('#navbar').classList.contains('navbar-mobile')) {
|
||||
e.preventDefault()
|
||||
this.nextElementSibling.classList.toggle('dropdown-active')
|
||||
}
|
||||
}, true)
|
||||
|
||||
/**
|
||||
* Scrool with ofset on links with a class name .scrollto
|
||||
*/
|
||||
on('click', '.scrollto', function(e) {
|
||||
if (select(this.hash)) {
|
||||
e.preventDefault()
|
||||
|
||||
let navbar = select('#navbar')
|
||||
if (navbar.classList.contains('navbar-mobile')) {
|
||||
navbar.classList.remove('navbar-mobile')
|
||||
let navbarToggle = select('.mobile-nav-toggle')
|
||||
navbarToggle.classList.toggle('bi-list')
|
||||
navbarToggle.classList.toggle('bi-x')
|
||||
}
|
||||
scrollto(this.hash)
|
||||
}
|
||||
}, true)
|
||||
|
||||
/**
|
||||
* Skills animation
|
||||
*/
|
||||
let skilsContent = select('.skills-content');
|
||||
if (skilsContent) {
|
||||
new Waypoint({
|
||||
element: skilsContent,
|
||||
offset: '80%',
|
||||
handler: function(direction) {
|
||||
let progress = select('.progress .progress-bar', true);
|
||||
progress.forEach((el) => {
|
||||
el.style.width = el.getAttribute('aria-valuenow') + '%'
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Testimonials slider
|
||||
*/
|
||||
new Swiper('.testimonials-carousel', {
|
||||
speed: 400,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false
|
||||
},
|
||||
pagination: {
|
||||
el: '.swiper-pagination',
|
||||
type: 'bullets',
|
||||
clickable: true
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Porfolio isotope and filter
|
||||
*/
|
||||
window.addEventListener('load', () => {
|
||||
let portfolioContainer = select('.portfolio-container');
|
||||
if (portfolioContainer) {
|
||||
let portfolioIsotope = new Isotope(portfolioContainer, {
|
||||
itemSelector: '.portfolio-wrap',
|
||||
layoutMode: 'fitRows'
|
||||
});
|
||||
|
||||
let portfolioFilters = select('#portfolio-flters li', true);
|
||||
|
||||
on('click', '#portfolio-flters li', function(e) {
|
||||
e.preventDefault();
|
||||
portfolioFilters.forEach(function(el) {
|
||||
el.classList.remove('filter-active');
|
||||
});
|
||||
this.classList.add('filter-active');
|
||||
|
||||
portfolioIsotope.arrange({
|
||||
filter: this.getAttribute('data-filter')
|
||||
});
|
||||
portfolioIsotope.on('arrangeComplete', function() {
|
||||
AOS.refresh()
|
||||
});
|
||||
}, true);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Initiate portfolio lightbox
|
||||
*/
|
||||
const portfolioLightbox = GLightbox({
|
||||
selector: '.portfolio-lightbox'
|
||||
});
|
||||
|
||||
/**
|
||||
* Portfolio details slider
|
||||
*/
|
||||
new Swiper('.portfolio-details-slider', {
|
||||
speed: 400,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false
|
||||
},
|
||||
pagination: {
|
||||
el: '.swiper-pagination',
|
||||
type: 'bullets',
|
||||
clickable: true
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Animation on scroll
|
||||
*/
|
||||
window.addEventListener('load', () => {
|
||||
AOS.init({
|
||||
duration: 1000,
|
||||
easing: "ease-in-out",
|
||||
once: true,
|
||||
mirror: false
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Initiate Pure Counter
|
||||
*/
|
||||
new PureCounter();
|
||||
|
||||
})()
|
||||
1
templates/assets/scss/Readme.txt
Normal file
@ -0,0 +1 @@
|
||||
The .scss (Sass) files are only avilable in the pro version. You can buy it from: https://bootstrapmade.com/free-bootstrap-template-corporate-moderna/
|
||||
7
templates/assets/vendor/animate.css/animate.compat.css
vendored
Normal file
4072
templates/assets/vendor/animate.css/animate.css
vendored
Normal file
7
templates/assets/vendor/animate.css/animate.min.css
vendored
Normal file
1
templates/assets/vendor/aos/aos.css
vendored
Normal file
1
templates/assets/vendor/aos/aos.js
vendored
Normal file
2018
templates/assets/vendor/bootstrap-icons/bootstrap-icons.css
vendored
Normal file
1998
templates/assets/vendor/bootstrap-icons/bootstrap-icons.json
vendored
Normal file
BIN
templates/assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff
vendored
Normal file
BIN
templates/assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2
vendored
Normal file
4124
templates/assets/vendor/bootstrap/css/bootstrap-grid.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-grid.css.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/css/bootstrap-grid.min.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-grid.min.css.map
vendored
Normal file
4123
templates/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css.map
vendored
Normal file
488
templates/assets/vendor/bootstrap/css/bootstrap-reboot.css
vendored
Normal file
@ -0,0 +1,488 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.2.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2022 The Bootstrap Authors
|
||||
* Copyright 2011-2022 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
*/
|
||||
:root {
|
||||
--bs-blue: #0d6efd;
|
||||
--bs-indigo: #6610f2;
|
||||
--bs-purple: #6f42c1;
|
||||
--bs-pink: #d63384;
|
||||
--bs-red: #dc3545;
|
||||
--bs-orange: #fd7e14;
|
||||
--bs-yellow: #ffc107;
|
||||
--bs-green: #198754;
|
||||
--bs-teal: #20c997;
|
||||
--bs-cyan: #0dcaf0;
|
||||
--bs-black: #000;
|
||||
--bs-white: #fff;
|
||||
--bs-gray: #6c757d;
|
||||
--bs-gray-dark: #343a40;
|
||||
--bs-gray-100: #f8f9fa;
|
||||
--bs-gray-200: #e9ecef;
|
||||
--bs-gray-300: #dee2e6;
|
||||
--bs-gray-400: #ced4da;
|
||||
--bs-gray-500: #adb5bd;
|
||||
--bs-gray-600: #6c757d;
|
||||
--bs-gray-700: #495057;
|
||||
--bs-gray-800: #343a40;
|
||||
--bs-gray-900: #212529;
|
||||
--bs-primary: #0d6efd;
|
||||
--bs-secondary: #6c757d;
|
||||
--bs-success: #198754;
|
||||
--bs-info: #0dcaf0;
|
||||
--bs-warning: #ffc107;
|
||||
--bs-danger: #dc3545;
|
||||
--bs-light: #f8f9fa;
|
||||
--bs-dark: #212529;
|
||||
--bs-primary-rgb: 13, 110, 253;
|
||||
--bs-secondary-rgb: 108, 117, 125;
|
||||
--bs-success-rgb: 25, 135, 84;
|
||||
--bs-info-rgb: 13, 202, 240;
|
||||
--bs-warning-rgb: 255, 193, 7;
|
||||
--bs-danger-rgb: 220, 53, 69;
|
||||
--bs-light-rgb: 248, 249, 250;
|
||||
--bs-dark-rgb: 33, 37, 41;
|
||||
--bs-white-rgb: 255, 255, 255;
|
||||
--bs-black-rgb: 0, 0, 0;
|
||||
--bs-body-color-rgb: 33, 37, 41;
|
||||
--bs-body-bg-rgb: 255, 255, 255;
|
||||
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
|
||||
--bs-body-font-family: var(--bs-font-sans-serif);
|
||||
--bs-body-font-size: 1rem;
|
||||
--bs-body-font-weight: 400;
|
||||
--bs-body-line-height: 1.5;
|
||||
--bs-body-color: #212529;
|
||||
--bs-body-bg: #fff;
|
||||
--bs-border-width: 1px;
|
||||
--bs-border-style: solid;
|
||||
--bs-border-color: #dee2e6;
|
||||
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
|
||||
--bs-border-radius: 0.375rem;
|
||||
--bs-border-radius-sm: 0.25rem;
|
||||
--bs-border-radius-lg: 0.5rem;
|
||||
--bs-border-radius-xl: 1rem;
|
||||
--bs-border-radius-2xl: 2rem;
|
||||
--bs-border-radius-pill: 50rem;
|
||||
--bs-link-color: #0d6efd;
|
||||
--bs-link-hover-color: #0a58ca;
|
||||
--bs-code-color: #d63384;
|
||||
--bs-highlight-bg: #fff3cd;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: var(--bs-body-font-family);
|
||||
font-size: var(--bs-body-font-size);
|
||||
font-weight: var(--bs-body-font-weight);
|
||||
line-height: var(--bs-body-line-height);
|
||||
color: var(--bs-body-color);
|
||||
text-align: var(--bs-body-text-align);
|
||||
background-color: var(--bs-body-bg);
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
border: 0;
|
||||
border-top: 1px solid;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title] {
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
-webkit-text-decoration-skip-ink: none;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.1875em;
|
||||
background-color: var(--bs-highlight-bg);
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--bs-link-color);
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
color: var(--bs-link-hover-color);
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: var(--bs-font-monospace);
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: var(--bs-code-color);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.1875rem 0.375rem;
|
||||
font-size: 0.875em;
|
||||
color: var(--bs-body-bg);
|
||||
background-color: var(--bs-body-color);
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: #6c757d;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
select:disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
float: left;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
/* rtl:raw:
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
*/
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
||||
1
templates/assets/vendor/bootstrap/css/bootstrap-reboot.css.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/css/bootstrap-reboot.min.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-reboot.min.css.map
vendored
Normal file
485
templates/assets/vendor/bootstrap/css/bootstrap-reboot.rtl.css
vendored
Normal file
@ -0,0 +1,485 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.2.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2022 The Bootstrap Authors
|
||||
* Copyright 2011-2022 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
*/
|
||||
:root {
|
||||
--bs-blue: #0d6efd;
|
||||
--bs-indigo: #6610f2;
|
||||
--bs-purple: #6f42c1;
|
||||
--bs-pink: #d63384;
|
||||
--bs-red: #dc3545;
|
||||
--bs-orange: #fd7e14;
|
||||
--bs-yellow: #ffc107;
|
||||
--bs-green: #198754;
|
||||
--bs-teal: #20c997;
|
||||
--bs-cyan: #0dcaf0;
|
||||
--bs-black: #000;
|
||||
--bs-white: #fff;
|
||||
--bs-gray: #6c757d;
|
||||
--bs-gray-dark: #343a40;
|
||||
--bs-gray-100: #f8f9fa;
|
||||
--bs-gray-200: #e9ecef;
|
||||
--bs-gray-300: #dee2e6;
|
||||
--bs-gray-400: #ced4da;
|
||||
--bs-gray-500: #adb5bd;
|
||||
--bs-gray-600: #6c757d;
|
||||
--bs-gray-700: #495057;
|
||||
--bs-gray-800: #343a40;
|
||||
--bs-gray-900: #212529;
|
||||
--bs-primary: #0d6efd;
|
||||
--bs-secondary: #6c757d;
|
||||
--bs-success: #198754;
|
||||
--bs-info: #0dcaf0;
|
||||
--bs-warning: #ffc107;
|
||||
--bs-danger: #dc3545;
|
||||
--bs-light: #f8f9fa;
|
||||
--bs-dark: #212529;
|
||||
--bs-primary-rgb: 13, 110, 253;
|
||||
--bs-secondary-rgb: 108, 117, 125;
|
||||
--bs-success-rgb: 25, 135, 84;
|
||||
--bs-info-rgb: 13, 202, 240;
|
||||
--bs-warning-rgb: 255, 193, 7;
|
||||
--bs-danger-rgb: 220, 53, 69;
|
||||
--bs-light-rgb: 248, 249, 250;
|
||||
--bs-dark-rgb: 33, 37, 41;
|
||||
--bs-white-rgb: 255, 255, 255;
|
||||
--bs-black-rgb: 0, 0, 0;
|
||||
--bs-body-color-rgb: 33, 37, 41;
|
||||
--bs-body-bg-rgb: 255, 255, 255;
|
||||
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
|
||||
--bs-body-font-family: var(--bs-font-sans-serif);
|
||||
--bs-body-font-size: 1rem;
|
||||
--bs-body-font-weight: 400;
|
||||
--bs-body-line-height: 1.5;
|
||||
--bs-body-color: #212529;
|
||||
--bs-body-bg: #fff;
|
||||
--bs-border-width: 1px;
|
||||
--bs-border-style: solid;
|
||||
--bs-border-color: #dee2e6;
|
||||
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
|
||||
--bs-border-radius: 0.375rem;
|
||||
--bs-border-radius-sm: 0.25rem;
|
||||
--bs-border-radius-lg: 0.5rem;
|
||||
--bs-border-radius-xl: 1rem;
|
||||
--bs-border-radius-2xl: 2rem;
|
||||
--bs-border-radius-pill: 50rem;
|
||||
--bs-link-color: #0d6efd;
|
||||
--bs-link-hover-color: #0a58ca;
|
||||
--bs-code-color: #d63384;
|
||||
--bs-highlight-bg: #fff3cd;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: var(--bs-body-font-family);
|
||||
font-size: var(--bs-body-font-size);
|
||||
font-weight: var(--bs-body-font-weight);
|
||||
line-height: var(--bs-body-line-height);
|
||||
color: var(--bs-body-color);
|
||||
text-align: var(--bs-body-text-align);
|
||||
background-color: var(--bs-body-bg);
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
border: 0;
|
||||
border-top: 1px solid;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title] {
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
-webkit-text-decoration-skip-ink: none;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
padding-right: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.1875em;
|
||||
background-color: var(--bs-highlight-bg);
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--bs-link-color);
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
color: var(--bs-link-hover-color);
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: var(--bs-font-monospace);
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: var(--bs-code-color);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.1875rem 0.375rem;
|
||||
font-size: 0.875em;
|
||||
color: var(--bs-body-bg);
|
||||
background-color: var(--bs-body-color);
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: #6c757d;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
select:disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
float: right;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: right;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */
|
||||
1
templates/assets/vendor/bootstrap/css/bootstrap-reboot.rtl.css.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/css/bootstrap-reboot.rtl.min.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-reboot.rtl.min.css.map
vendored
Normal file
4266
templates/assets/vendor/bootstrap/css/bootstrap-utilities.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-utilities.css.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/css/bootstrap-utilities.min.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-utilities.min.css.map
vendored
Normal file
4257
templates/assets/vendor/bootstrap/css/bootstrap-utilities.rtl.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-utilities.rtl.css.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/css/bootstrap-utilities.rtl.min.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap-utilities.rtl.min.css.map
vendored
Normal file
10878
templates/assets/vendor/bootstrap/css/bootstrap.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap.css.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/css/bootstrap.min.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap.min.css.map
vendored
Normal file
10842
templates/assets/vendor/bootstrap/css/bootstrap.rtl.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap.rtl.css.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/css/bootstrap.rtl.min.css
vendored
Normal file
1
templates/assets/vendor/bootstrap/css/bootstrap.rtl.min.css.map
vendored
Normal file
7075
templates/assets/vendor/bootstrap/js/bootstrap.bundle.js
vendored
Normal file
1
templates/assets/vendor/bootstrap/js/bootstrap.bundle.js.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/js/bootstrap.bundle.min.js
vendored
Normal file
1
templates/assets/vendor/bootstrap/js/bootstrap.bundle.min.js.map
vendored
Normal file
5202
templates/assets/vendor/bootstrap/js/bootstrap.esm.js
vendored
Normal file
1
templates/assets/vendor/bootstrap/js/bootstrap.esm.js.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/js/bootstrap.esm.min.js
vendored
Normal file
1
templates/assets/vendor/bootstrap/js/bootstrap.esm.min.js.map
vendored
Normal file
5249
templates/assets/vendor/bootstrap/js/bootstrap.js
vendored
Normal file
1
templates/assets/vendor/bootstrap/js/bootstrap.js.map
vendored
Normal file
7
templates/assets/vendor/bootstrap/js/bootstrap.min.js
vendored
Normal file
1
templates/assets/vendor/bootstrap/js/bootstrap.min.js.map
vendored
Normal file
386
templates/assets/vendor/boxicons/css/animations.css
vendored
Normal file
@ -0,0 +1,386 @@
|
||||
@-webkit-keyframes spin
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: rotate(0);
|
||||
transform: rotate(0);
|
||||
}
|
||||
100%
|
||||
{
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@keyframes spin
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: rotate(0);
|
||||
transform: rotate(0);
|
||||
}
|
||||
100%
|
||||
{
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes burst
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
90%
|
||||
{
|
||||
-webkit-transform: scale(1.5);
|
||||
transform: scale(1.5);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes burst
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
90%
|
||||
{
|
||||
-webkit-transform: scale(1.5);
|
||||
transform: scale(1.5);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes flashing
|
||||
{
|
||||
0%
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
45%
|
||||
{
|
||||
opacity: 0;
|
||||
}
|
||||
90%
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes flashing
|
||||
{
|
||||
0%
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
45%
|
||||
{
|
||||
opacity: 0;
|
||||
}
|
||||
90%
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes fade-left
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateX(-20px);
|
||||
transform: translateX(-20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes fade-left
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateX(-20px);
|
||||
transform: translateX(-20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes fade-right
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateX(20px);
|
||||
transform: translateX(20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes fade-right
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateX(20px);
|
||||
transform: translateX(20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes fade-up
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateY(-20px);
|
||||
transform: translateY(-20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes fade-up
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateY(-20px);
|
||||
transform: translateY(-20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes fade-down
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateY(20px);
|
||||
transform: translateY(20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes fade-down
|
||||
{
|
||||
0%
|
||||
{
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
75%
|
||||
{
|
||||
-webkit-transform: translateY(20px);
|
||||
transform: translateY(20px);
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes tada
|
||||
{
|
||||
from
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
|
||||
10%,
|
||||
20%
|
||||
{
|
||||
-webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||
transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||
}
|
||||
|
||||
30%,
|
||||
50%,
|
||||
70%,
|
||||
90%
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||
}
|
||||
|
||||
40%,
|
||||
60%,
|
||||
80%
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);
|
||||
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);
|
||||
}
|
||||
|
||||
to
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes tada
|
||||
{
|
||||
from
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
|
||||
10%,
|
||||
20%
|
||||
{
|
||||
-webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||
transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);
|
||||
}
|
||||
|
||||
30%,
|
||||
50%,
|
||||
70%,
|
||||
90%
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||
transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);
|
||||
}
|
||||
|
||||
40%,
|
||||
60%,
|
||||
80%
|
||||
{
|
||||
-webkit-transform: rotate3d(0, 0, 1, -10deg);
|
||||
transform: rotate3d(0, 0, 1, -10deg);
|
||||
}
|
||||
|
||||
to
|
||||
{
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
.bx-spin
|
||||
{
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
.bx-spin-hover:hover
|
||||
{
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
|
||||
.bx-tada
|
||||
{
|
||||
-webkit-animation: tada 1.5s ease infinite;
|
||||
animation: tada 1.5s ease infinite;
|
||||
}
|
||||
.bx-tada-hover:hover
|
||||
{
|
||||
-webkit-animation: tada 1.5s ease infinite;
|
||||
animation: tada 1.5s ease infinite;
|
||||
}
|
||||
|
||||
.bx-flashing
|
||||
{
|
||||
-webkit-animation: flashing 1.5s infinite linear;
|
||||
animation: flashing 1.5s infinite linear;
|
||||
}
|
||||
.bx-flashing-hover:hover
|
||||
{
|
||||
-webkit-animation: flashing 1.5s infinite linear;
|
||||
animation: flashing 1.5s infinite linear;
|
||||
}
|
||||
|
||||
.bx-burst
|
||||
{
|
||||
-webkit-animation: burst 1.5s infinite linear;
|
||||
animation: burst 1.5s infinite linear;
|
||||
}
|
||||
.bx-burst-hover:hover
|
||||
{
|
||||
-webkit-animation: burst 1.5s infinite linear;
|
||||
animation: burst 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-up
|
||||
{
|
||||
-webkit-animation: fade-up 1.5s infinite linear;
|
||||
animation: fade-up 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-up-hover:hover
|
||||
{
|
||||
-webkit-animation: fade-up 1.5s infinite linear;
|
||||
animation: fade-up 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-down
|
||||
{
|
||||
-webkit-animation: fade-down 1.5s infinite linear;
|
||||
animation: fade-down 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-down-hover:hover
|
||||
{
|
||||
-webkit-animation: fade-down 1.5s infinite linear;
|
||||
animation: fade-down 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-left
|
||||
{
|
||||
-webkit-animation: fade-left 1.5s infinite linear;
|
||||
animation: fade-left 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-left-hover:hover
|
||||
{
|
||||
-webkit-animation: fade-left 1.5s infinite linear;
|
||||
animation: fade-left 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-right
|
||||
{
|
||||
-webkit-animation: fade-right 1.5s infinite linear;
|
||||
animation: fade-right 1.5s infinite linear;
|
||||
}
|
||||
.bx-fade-right-hover:hover
|
||||
{
|
||||
-webkit-animation: fade-right 1.5s infinite linear;
|
||||
animation: fade-right 1.5s infinite linear;
|
||||
}
|
||||
5425
templates/assets/vendor/boxicons/css/boxicons.css
vendored
Normal file
1
templates/assets/vendor/boxicons/css/boxicons.min.css
vendored
Normal file
30
templates/assets/vendor/boxicons/css/transformations.css
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
.bx-rotate-90
|
||||
{
|
||||
transform: rotate(90deg);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)';
|
||||
}
|
||||
.bx-rotate-180
|
||||
{
|
||||
transform: rotate(180deg);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)';
|
||||
}
|
||||
.bx-rotate-270
|
||||
{
|
||||
transform: rotate(270deg);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)';
|
||||
}
|
||||
.bx-flip-horizontal
|
||||
{
|
||||
transform: scaleX(-1);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)';
|
||||
}
|
||||
.bx-flip-vertical
|
||||
{
|
||||
transform: scaleY(-1);
|
||||
|
||||
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)';
|
||||
}
|
||||
BIN
templates/assets/vendor/boxicons/fonts/boxicons.eot
vendored
Normal file
1660
templates/assets/vendor/boxicons/fonts/boxicons.svg
vendored
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
templates/assets/vendor/boxicons/fonts/boxicons.ttf
vendored
Normal file
BIN
templates/assets/vendor/boxicons/fonts/boxicons.woff
vendored
Normal file
BIN
templates/assets/vendor/boxicons/fonts/boxicons.woff2
vendored
Normal file
939
templates/assets/vendor/glightbox/css/glightbox.css
vendored
Normal file
@ -0,0 +1,939 @@
|
||||
.glightbox-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 999999 !important;
|
||||
overflow: hidden;
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-moz-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
text-size-adjust: 100%;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.glightbox-container.inactive {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.glightbox-container .gcontainer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 9999;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.glightbox-container .gslider {
|
||||
-webkit-transition: -webkit-transform 0.4s ease;
|
||||
transition: -webkit-transform 0.4s ease;
|
||||
transition: transform 0.4s ease;
|
||||
transition: transform 0.4s ease, -webkit-transform 0.4s ease;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
display: -webkit-box !important;
|
||||
display: -ms-flexbox !important;
|
||||
display: flex !important;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.glightbox-container .gslide {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.glightbox-container .gslide.current {
|
||||
opacity: 1;
|
||||
z-index: 99999;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.glightbox-container .gslide.prev {
|
||||
opacity: 1;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.glightbox-container .gslide-inner-content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.glightbox-container .ginner-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.glightbox-container .ginner-container.gvideo-container {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.glightbox-container .ginner-container.desc-bottom,
|
||||
.glightbox-container .ginner-container.desc-top {
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.glightbox-container .ginner-container.desc-left,
|
||||
.glightbox-container .ginner-container.desc-right {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
.gslide iframe,
|
||||
.gslide video {
|
||||
outline: none !important;
|
||||
border: none;
|
||||
min-height: 165px;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
-ms-touch-action: auto;
|
||||
touch-action: auto;
|
||||
}
|
||||
|
||||
.gslide:not(.current) {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.gslide-image {
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.gslide-image img {
|
||||
max-height: 100vh;
|
||||
display: block;
|
||||
padding: 0;
|
||||
float: none;
|
||||
outline: none;
|
||||
border: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
max-width: 100vw;
|
||||
width: auto;
|
||||
height: auto;
|
||||
-o-object-fit: cover;
|
||||
object-fit: cover;
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
margin: auto;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.desc-top .gslide-image img,
|
||||
.desc-bottom .gslide-image img {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.desc-left .gslide-image img,
|
||||
.desc-right .gslide-image img {
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.gslide-image img.zoomable {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.gslide-image img.dragging {
|
||||
cursor: -webkit-grabbing !important;
|
||||
cursor: grabbing !important;
|
||||
-webkit-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.gslide-video {
|
||||
position: relative;
|
||||
max-width: 100vh;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.gslide-video .plyr__poster-enabled.plyr--loading .plyr__poster {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.gslide-video .gvideo-wrapper {
|
||||
width: 100%;
|
||||
/* max-width: 160vmin; */
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.gslide-video::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(255, 0, 0, 0.34);
|
||||
display: none;
|
||||
}
|
||||
|
||||
.gslide-video.playing::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.gslide-video.fullscreen {
|
||||
max-width: 100% !important;
|
||||
min-width: 100%;
|
||||
height: 75vh;
|
||||
}
|
||||
|
||||
.gslide-video.fullscreen video {
|
||||
max-width: 100% !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.gslide-inline {
|
||||
background: #fff;
|
||||
text-align: left;
|
||||
max-height: calc(100vh - 40px);
|
||||
overflow: auto;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.gslide-inline .ginlined-content {
|
||||
padding: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.gslide-inline .dragging {
|
||||
cursor: -webkit-grabbing !important;
|
||||
cursor: grabbing !important;
|
||||
-webkit-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.ginlined-content {
|
||||
overflow: auto;
|
||||
display: block !important;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.gslide-external {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
background: #fff;
|
||||
padding: 0;
|
||||
overflow: auto;
|
||||
max-height: 75vh;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.gslide-media {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.zoomed .gslide-media {
|
||||
-webkit-box-shadow: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.desc-top .gslide-media,
|
||||
.desc-bottom .gslide-media {
|
||||
margin: 0 auto;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.gslide-description {
|
||||
position: relative;
|
||||
-webkit-box-flex: 1;
|
||||
-ms-flex: 1 0 100%;
|
||||
flex: 1 0 100%;
|
||||
}
|
||||
|
||||
.gslide-description.description-left,
|
||||
.gslide-description.description-right {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.gslide-description.description-bottom,
|
||||
.gslide-description.description-top {
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.gslide-description p {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.gslide-description p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.zoomed .gslide-description {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.glightbox-button-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Description for mobiles
|
||||
* something like facebook does the description
|
||||
* for the photos
|
||||
*/
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-description {
|
||||
height: auto !important;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
padding: 19px 11px;
|
||||
max-width: 100vw !important;
|
||||
-webkit-box-ordinal-group: 3 !important;
|
||||
-ms-flex-order: 2 !important;
|
||||
order: 2 !important;
|
||||
max-height: 78vh;
|
||||
overflow: auto !important;
|
||||
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.75)));
|
||||
background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%);
|
||||
-webkit-transition: opacity 0.3s linear;
|
||||
transition: opacity 0.3s linear;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-title {
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-desc {
|
||||
color: #a1a1a1;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-desc a {
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-desc * {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-desc .desc-more {
|
||||
color: #fff;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.gdesc-open .gslide-media {
|
||||
-webkit-transition: opacity 0.5s ease;
|
||||
transition: opacity 0.5s ease;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.gdesc-open .gdesc-inner {
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.gdesc-closed .gslide-media {
|
||||
-webkit-transition: opacity 0.5s ease;
|
||||
transition: opacity 0.5s ease;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.greset {
|
||||
-webkit-transition: all 0.3s ease;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.gabsolute {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.grelative {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.glightbox-desc {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.glightbox-open {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.gloader {
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
-webkit-animation: lightboxLoader 0.8s infinite linear;
|
||||
animation: lightboxLoader 0.8s infinite linear;
|
||||
border: 2px solid #fff;
|
||||
border-right-color: transparent;
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
display: block;
|
||||
z-index: 9999;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
top: 47%;
|
||||
}
|
||||
|
||||
.goverlay {
|
||||
width: 100%;
|
||||
height: calc(100vh + 1px);
|
||||
position: fixed;
|
||||
top: -1px;
|
||||
left: 0;
|
||||
background: #000;
|
||||
will-change: opacity;
|
||||
}
|
||||
|
||||
.glightbox-mobile .goverlay {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.gprev,
|
||||
.gnext,
|
||||
.gclose {
|
||||
z-index: 99999;
|
||||
cursor: pointer;
|
||||
width: 26px;
|
||||
height: 44px;
|
||||
border: none;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.gprev svg,
|
||||
.gnext svg,
|
||||
.gclose svg {
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.gprev.disabled,
|
||||
.gnext.disabled,
|
||||
.gclose.disabled {
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
.gprev .garrow,
|
||||
.gnext .garrow,
|
||||
.gclose .garrow {
|
||||
stroke: #fff;
|
||||
}
|
||||
|
||||
.gbtn.focused {
|
||||
outline: 2px solid #0f3d81;
|
||||
}
|
||||
|
||||
iframe.wait-autoplay {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.glightbox-closing .gnext,
|
||||
.glightbox-closing .gprev,
|
||||
.glightbox-closing .gclose {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
|
||||
/*Skin */
|
||||
|
||||
.glightbox-clean .gslide-description {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.glightbox-clean .gdesc-inner {
|
||||
padding: 22px 20px;
|
||||
}
|
||||
|
||||
.glightbox-clean .gslide-title {
|
||||
font-size: 1em;
|
||||
font-weight: normal;
|
||||
font-family: arial;
|
||||
color: #000;
|
||||
margin-bottom: 19px;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
.glightbox-clean .gslide-desc {
|
||||
font-size: 0.86em;
|
||||
margin-bottom: 0;
|
||||
font-family: arial;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
.glightbox-clean .gslide-video {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.glightbox-clean .gprev,
|
||||
.glightbox-clean .gnext,
|
||||
.glightbox-clean .gclose {
|
||||
background-color: rgba(0, 0, 0, 0.75);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.glightbox-clean .gprev path,
|
||||
.glightbox-clean .gnext path,
|
||||
.glightbox-clean .gclose path {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.glightbox-clean .gprev {
|
||||
position: absolute;
|
||||
top: -100%;
|
||||
left: 30px;
|
||||
width: 40px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.glightbox-clean .gnext {
|
||||
position: absolute;
|
||||
top: -100%;
|
||||
right: 30px;
|
||||
width: 40px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.glightbox-clean .gclose {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
top: 15px;
|
||||
right: 10px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.glightbox-clean .gclose svg {
|
||||
width: 18px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.glightbox-clean .gclose:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
/*CSS Animations*/
|
||||
|
||||
.gfadeIn {
|
||||
-webkit-animation: gfadeIn 0.5s ease;
|
||||
animation: gfadeIn 0.5s ease;
|
||||
}
|
||||
|
||||
.gfadeOut {
|
||||
-webkit-animation: gfadeOut 0.5s ease;
|
||||
animation: gfadeOut 0.5s ease;
|
||||
}
|
||||
|
||||
.gslideOutLeft {
|
||||
-webkit-animation: gslideOutLeft 0.3s ease;
|
||||
animation: gslideOutLeft 0.3s ease;
|
||||
}
|
||||
|
||||
.gslideInLeft {
|
||||
-webkit-animation: gslideInLeft 0.3s ease;
|
||||
animation: gslideInLeft 0.3s ease;
|
||||
}
|
||||
|
||||
.gslideOutRight {
|
||||
-webkit-animation: gslideOutRight 0.3s ease;
|
||||
animation: gslideOutRight 0.3s ease;
|
||||
}
|
||||
|
||||
.gslideInRight {
|
||||
-webkit-animation: gslideInRight 0.3s ease;
|
||||
animation: gslideInRight 0.3s ease;
|
||||
}
|
||||
|
||||
.gzoomIn {
|
||||
-webkit-animation: gzoomIn 0.5s ease;
|
||||
animation: gzoomIn 0.5s ease;
|
||||
}
|
||||
|
||||
.gzoomOut {
|
||||
-webkit-animation: gzoomOut 0.5s ease;
|
||||
animation: gzoomOut 0.5s ease;
|
||||
}
|
||||
|
||||
@-webkit-keyframes lightboxLoader {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes lightboxLoader {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gfadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gfadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gfadeOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gfadeOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gslideInLeft {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: translate3d(-60%, 0, 0);
|
||||
transform: translate3d(-60%, 0, 0);
|
||||
}
|
||||
to {
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gslideInLeft {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: translate3d(-60%, 0, 0);
|
||||
transform: translate3d(-60%, 0, 0);
|
||||
}
|
||||
to {
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gslideOutLeft {
|
||||
from {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(-60%, 0, 0);
|
||||
transform: translate3d(-60%, 0, 0);
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gslideOutLeft {
|
||||
from {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(-60%, 0, 0);
|
||||
transform: translate3d(-60%, 0, 0);
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gslideInRight {
|
||||
from {
|
||||
opacity: 0;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(60%, 0, 0);
|
||||
transform: translate3d(60%, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gslideInRight {
|
||||
from {
|
||||
opacity: 0;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(60%, 0, 0);
|
||||
transform: translate3d(60%, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gslideOutRight {
|
||||
from {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(60%, 0, 0);
|
||||
transform: translate3d(60%, 0, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gslideOutRight {
|
||||
from {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(60%, 0, 0);
|
||||
transform: translate3d(60%, 0, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gzoomIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gzoomIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gzoomOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
50% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gzoomOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
50% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 769px) {
|
||||
.glightbox-container .ginner-container {
|
||||
width: auto;
|
||||
height: auto;
|
||||
-webkit-box-orient: horizontal;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: row;
|
||||
flex-direction: row;
|
||||
}
|
||||
.glightbox-container .ginner-container.desc-top .gslide-description {
|
||||
-webkit-box-ordinal-group: 1;
|
||||
-ms-flex-order: 0;
|
||||
order: 0;
|
||||
}
|
||||
.glightbox-container .ginner-container.desc-top .gslide-image,
|
||||
.glightbox-container .ginner-container.desc-top .gslide-image img {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-ms-flex-order: 1;
|
||||
order: 1;
|
||||
}
|
||||
.glightbox-container .ginner-container.desc-left .gslide-description {
|
||||
-webkit-box-ordinal-group: 1;
|
||||
-ms-flex-order: 0;
|
||||
order: 0;
|
||||
}
|
||||
.glightbox-container .ginner-container.desc-left .gslide-image {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-ms-flex-order: 1;
|
||||
order: 1;
|
||||
}
|
||||
.gslide-image img {
|
||||
max-height: 97vh;
|
||||
max-width: 100%;
|
||||
}
|
||||
.gslide-image img.zoomable {
|
||||
cursor: -webkit-zoom-in;
|
||||
cursor: zoom-in;
|
||||
}
|
||||
.zoomed .gslide-image img.zoomable {
|
||||
cursor: -webkit-grab;
|
||||
cursor: grab;
|
||||
}
|
||||
.gslide-inline {
|
||||
max-height: 95vh;
|
||||
}
|
||||
.gslide-external {
|
||||
max-height: 100vh;
|
||||
}
|
||||
.gslide-description.description-left,
|
||||
.gslide-description.description-right {
|
||||
max-width: 275px;
|
||||
}
|
||||
.glightbox-open {
|
||||
height: auto;
|
||||
}
|
||||
.goverlay {
|
||||
background: rgba(0, 0, 0, 0.92);
|
||||
}
|
||||
.glightbox-clean .gslide-media {
|
||||
-webkit-box-shadow: 1px 2px 9px 0px rgba(0, 0, 0, 0.65);
|
||||
box-shadow: 1px 2px 9px 0px rgba(0, 0, 0, 0.65);
|
||||
}
|
||||
.glightbox-clean .description-left .gdesc-inner,
|
||||
.glightbox-clean .description-right .gdesc-inner {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.glightbox-clean .gprev,
|
||||
.glightbox-clean .gnext,
|
||||
.glightbox-clean .gclose {
|
||||
background-color: rgba(0, 0, 0, 0.32);
|
||||
}
|
||||
.glightbox-clean .gprev:hover,
|
||||
.glightbox-clean .gnext:hover,
|
||||
.glightbox-clean .gclose:hover {
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
.glightbox-clean .gprev {
|
||||
top: 45%;
|
||||
}
|
||||
.glightbox-clean .gnext {
|
||||
top: 45%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.glightbox-clean .gclose {
|
||||
opacity: 0.7;
|
||||
right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-height: 420px) {
|
||||
.goverlay {
|
||||
background: #000;
|
||||
}
|
||||
}
|
||||
1
templates/assets/vendor/glightbox/css/glightbox.min.css
vendored
Normal file
1799
templates/assets/vendor/glightbox/css/plyr.css
vendored
Normal file
1
templates/assets/vendor/glightbox/css/plyr.min.css
vendored
Normal file
3655
templates/assets/vendor/glightbox/js/glightbox.js
vendored
Normal file
1
templates/assets/vendor/glightbox/js/glightbox.min.js
vendored
Normal file
3563
templates/assets/vendor/isotope-layout/isotope.pkgd.js
vendored
Normal file
12
templates/assets/vendor/isotope-layout/isotope.pkgd.min.js
vendored
Normal file
81
templates/assets/vendor/php-email-form/validate.js
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
/**
|
||||
* PHP Email Form Validation - v3.5
|
||||
* URL: https://bootstrapmade.com/php-email-form/
|
||||
* Author: BootstrapMade.com
|
||||
*/
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
let forms = document.querySelectorAll('.php-email-form');
|
||||
|
||||
forms.forEach( function(e) {
|
||||
e.addEventListener('submit', function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
let thisForm = this;
|
||||
|
||||
let action = thisForm.getAttribute('action');
|
||||
let recaptcha = thisForm.getAttribute('data-recaptcha-site-key');
|
||||
|
||||
if( ! action ) {
|
||||
displayError(thisForm, 'The form action property is not set!')
|
||||
return;
|
||||
}
|
||||
thisForm.querySelector('.loading').classList.add('d-block');
|
||||
thisForm.querySelector('.error-message').classList.remove('d-block');
|
||||
thisForm.querySelector('.sent-message').classList.remove('d-block');
|
||||
|
||||
let formData = new FormData( thisForm );
|
||||
|
||||
if ( recaptcha ) {
|
||||
if(typeof grecaptcha !== "undefined" ) {
|
||||
grecaptcha.ready(function() {
|
||||
try {
|
||||
grecaptcha.execute(recaptcha, {action: 'php_email_form_submit'})
|
||||
.then(token => {
|
||||
formData.set('recaptcha-response', token);
|
||||
php_email_form_submit(thisForm, action, formData);
|
||||
})
|
||||
} catch(error) {
|
||||
displayError(thisForm, error)
|
||||
}
|
||||
});
|
||||
} else {
|
||||
displayError(thisForm, 'The reCaptcha javascript API url is not loaded!')
|
||||
}
|
||||
} else {
|
||||
php_email_form_submit(thisForm, action, formData);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function php_email_form_submit(thisForm, action, formData) {
|
||||
fetch(action, {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
headers: {'X-Requested-With': 'XMLHttpRequest'}
|
||||
})
|
||||
.then(response => {
|
||||
return response.text();
|
||||
})
|
||||
.then(data => {
|
||||
thisForm.querySelector('.loading').classList.remove('d-block');
|
||||
if (data.trim() == 'OK') {
|
||||
thisForm.querySelector('.sent-message').classList.add('d-block');
|
||||
thisForm.reset();
|
||||
} else {
|
||||
throw new Error(data ? data : 'Form submission failed and no error message returned from: ' + action);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
displayError(thisForm, error);
|
||||
});
|
||||
}
|
||||
|
||||
function displayError(thisForm, error) {
|
||||
thisForm.querySelector('.loading').classList.remove('d-block');
|
||||
thisForm.querySelector('.error-message').innerHTML = error;
|
||||
thisForm.querySelector('.error-message').classList.add('d-block');
|
||||
}
|
||||
|
||||
})();
|
||||