halo-theme-dream2.0-plus/templates/security_link.html

408 lines
13 KiB
HTML
Raw Normal View History

2024-04-06 17:30:35 +08:00
<!DOCTYPE html>
<html lang="zh" xmlns:th="https://www.thymeleaf.org"
th:class="${theme.config.basic_style.theme_style}"
th:with="urlCode = ${param.target},
2024-04-07 08:30:52 +08:00
url = ${#uris.unescapePath(urlCode)},
title = ${singlePage.spec.title} + ' - ' + ${site.title},
contributor = ${contributorFinder.getContributor(theme.config.basic_info.metadata_name)},
enableComment = false, isPost = false, canonical = ${theme.config.security_link_config.security_link_url}">
2024-04-06 17:30:35 +08:00
<head>
2025-03-13 19:21:05 +08:00
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex, nofollow"/>
2025-03-13 19:49:11 +08:00
<title th:with="t = ${theme.config.security_link_config.security_link_site_title1},
t1 = ${#strings.replace(t, '{title}', site.title)}"
th:text="${#strings.isEmpty(t) ? site.title + '-安全中心' : t1}">
</title>
2025-03-13 19:21:05 +08:00
<style type="text/css">
body {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
font-family: Arial, sans-serif;
overflow: hidden;
flex-direction: column;
background-position: center;
background-size: cover;
background-repeat: no-repeat;
}
html.light body {
background-image: linear-gradient(135deg, #ffffff 0%, #ebebeb 100%), url([[${#strings.defaultString(theme.config.security_link_config.security_link_site_img_background, '')}]]);
2025-03-13 19:21:05 +08:00
background-blend-mode: overlay;
}
html.dark body {
background-image: linear-gradient(135deg, #364f6b 0%, #222831 100%), url([[${#strings.defaultString(theme.config.security_link_config.security_link_site_img_background, '')}]]);
2025-03-13 19:21:05 +08:00
background-blend-mode: overlay;
}
html.light .loading {
background: rgba(255, 255, 255, 0.7);
box-shadow: 0 8px 32px rgba(31, 38, 135, 0.15);
border: 1px solid rgba(255, 255, 255, 0.18);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}
html.light .others-tip {
background: rgba(255, 255, 255, 0.4);
border: 1px solid rgba(255, 255, 255, 0.3);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
}
html.dark .loading {
background: rgba(57, 62, 70, 0.6);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
border: 1px solid rgba(255, 255, 255, 0.08);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}
html.dark .others-tip {
background: rgba(51, 51, 51, 0.4);
border: 1px solid rgba(255, 255, 255, 0.1);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
}
.others-end a {
background: rgba(63, 193, 201, 0.8);
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
transition: all 0.3s ease;
box-shadow: 0 4px 15px rgba(63, 193, 201, 0.2);
line-height: 20px;
}
.others-end a:hover {
background: rgba(63, 193, 201, 1);
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(63, 193, 201, 0.3);
}
.progress-bar {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
}
.progress {
box-shadow: 0 0 10px rgba(171, 237, 216, 0.5);
}
@keyframes fadein {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.loading {
2025-03-14 07:00:48 +08:00
animation: fadein 0.3s ease-out;
2025-03-13 19:21:05 +08:00
}
html.light .others-topic,
html.light .others-tip,
html.light .content-title span {
color: #333;
}
html.light .others-tip {
border: 1px solid #ccc;
background-color: #F7F9FE;
}
html.light .progress {
background-color: #abedd8;
}
/* 暗黑主题 */
html.dark body {
/*background: linear-gradient(135deg, #364f6b, #222831);*/
2025-03-13 19:21:05 +08:00
}
html.dark .loading {
background: #393e46;
box-shadow: 0 4px 8px rgba(100, 100, 100, 0.1);
}
html.dark .others-topic,
html.dark .others-tip,
html.dark .content-title span {
color: #EFEFEF;
}
html.dark .others-tip {
border: 1px solid #777;
background-color: #333;
}
html.dark .progress {
background-color: #888;
}
html.dark .progress-bar {
background-color: #444;
}
@media (max-width: 768px) {
.loading {
width: 75% !important;
max-width: 400px !important;
}
}
2025-03-13 19:21:05 +08:00
.loading {
text-align: center;
padding: 35px;
border-radius: 24px;
2025-03-14 07:00:48 +08:00
animation: fadein 0.3s ease-out;
2025-03-13 19:21:05 +08:00
width: 400px;
max-width: 90%;
border: 2px solid rgba(255, 255, 255, 0.4);
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(25px);
-webkit-backdrop-filter: blur(25px);
box-shadow: 0 12px 40px rgba(31, 38, 135, 0.2);
position: relative;
}
.loading::before {
content: '';
position: absolute;
top: -6px;
left: -6px;
right: -6px;
bottom: -6px;
border-radius: 26px;
background: linear-gradient(145deg,
rgba(255,255,255,0.3) 0%,
2025-03-13 19:21:05 +08:00
rgba(255,255,255,0.1) 100%);
z-index: -1;
}
html.dark .loading {
border-color: rgba(255, 255, 255, 0.15);
background: rgba(57, 62, 70, 0.85);
}
html.dark .loading::before {
background: linear-gradient(145deg,
2025-03-13 19:21:05 +08:00
rgba(255,255,255,0.1) 0%,
rgba(255,255,255,0.05) 100%);
}
.content-title img {
width: 100px;
height: 100px;
border-radius: 50%;
margin: 0 auto 15px auto;
2025-03-13 19:21:05 +08:00
display: block;
border: 3px solid rgba(255, 255, 255, 0.3);
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease;
}
.content-title img:hover {
transform: scale(1.05);
}
.others-tip {
font-size: 18px;
display: block;
margin-top: 5px;
margin-bottom: 25px;
padding: 20px;
border-radius: 12px;
border: 2px solid rgba(255, 255, 255, 0.3);
background: rgba(255, 255, 255, 0.6);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
color: #333;
}
html.dark .others-tip {
border-color: rgba(255, 255, 255, 0.15);
background: rgba(51, 51, 51, 0.6);
color: #EFEFEF;
}
.others-end a {
padding: 12px 24px;
border-radius: 20px;
font-size: 16px;
width: auto;
height: auto;
background: linear-gradient(135deg, #3fc1c9, #45b7d1);
color: white;
box-shadow: 0 4px 15px rgba(63, 193, 201, 0.3);
transition: all 0.3s ease;
}
.others-end a:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(63, 193, 201, 0.4);
}
.progress-bar {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
}
.progress {
box-shadow: 0 0 10px rgba(171, 237, 216, 0.5);
}
.content-title {
margin-bottom: 20px;
font-size: 20px;
font-weight: bold;
2025-03-13 19:21:05 +08:00
}
.content-title img {
width: 100px;
height: 100px;
border-radius: 50%;
margin: 0 auto 15px auto;
2025-03-13 19:21:05 +08:00
display: block;
}
.others-topic {
margin-bottom: 10px;
font-size: 16px;
letter-spacing: 1px;
color: #333;
2025-03-14 08:03:42 +08:00
word-wrap: break-word;
white-space: pre-wrap;
overflow: hidden;
2025-03-13 19:21:05 +08:00
}
.others-tip {
font-size: 20px;
display: block;
margin-top: 5px;
margin-bottom: 25px;
padding: 15px;
border-radius: 8px;
border: 1px solid #ccc;
background-color: #F7F9FE;
color: #333;
}
.others-end {
display: flex;
justify-content: center;
gap: 20%;
margin-top: 20px;
}
.others-end a {
padding: 10px 20px;
border-radius: 16px;
border: none;
cursor: pointer;
font-size: 16px;
width: 70px;
height: 20px;
text-align: center;
text-decoration: none;
background-color: #3fc1c9;
color: white;
}
.progress-bar {
width: 100%;
border-radius: 5px;
overflow: hidden;
height: 10px;
margin-top: 20px;
}
.progress {
width: 0;
height: 100%;
background-color: #abedd8;
2025-03-13 21:56:05 +08:00
transition: width [[${theme.config.security_link_config.security_link_auto_jump_time}]]s linear;
2025-03-13 19:21:05 +08:00
}
.countdown-text {
margin-top: 12px;
font-size: 12px;
color: #333;
}
html.dark .countdown-text {
color: #EFEFEF;
}
</style>
2024-04-06 17:30:35 +08:00
</head>
<body>
2025-03-13 19:21:05 +08:00
<div class="loading">
<div class="content-title">
<img th:src="${#strings.isEmpty(theme.config.security_link_config.security_link_site_img) ? site.favicon : theme.config.security_link_config.security_link_site_img}" alt="favicon">
<span th:if="${!#strings.isEmpty(theme.config.security_link_config.security_link_site_title)}"
th:with="t = ${theme.config.security_link_config.security_link_site_title},
t1 = ${#strings.replace(t, '{title}', site.title)}"
th:text="${t1}"></span>
2024-04-06 17:30:35 +08:00
</div>
2025-03-13 19:21:05 +08:00
<div class="others">
<div class="others-tip" th:utext="${#strings.defaultString(theme.config.security_link_config.security_link_tip_desc, '请注意您的账号和财产安全!')}">
2025-03-13 19:21:05 +08:00
</div>
<div class="others-topic" th:with="oDesc = ${theme.config.security_link_config.security_link_jump_desc},
2024-04-07 06:58:20 +08:00
o1 = ${#strings.replace(oDesc, '{title}', site.title)},
o2 = ${#strings.replace(o1, '{url}', url)}" th:utext="${o2}">
2025-03-13 19:21:05 +08:00
</div>
<div class="progress-bar">
<div class="progress"></div>
</div>
<div class="countdown-text">
2025-03-13 21:56:05 +08:00
⚡将在<span id="countdown">[[${theme.config.security_link_config.security_link_auto_jump_time}]]</span>秒后跳转,请自行确认链接安全性
2025-03-13 19:21:05 +08:00
</div>
<div class="others-end">
<a th:href="${url}" target="_self">继续访问</a>
</div>
2024-04-06 17:30:35 +08:00
</div>
</div>
2025-03-13 19:21:05 +08:00
<script>
window.onload = function() {
let countdown = [[${theme.config.security_link_config.security_link_auto_jump_time}]]
if (countdown > 0) {
document.querySelector('.progress').style.width = '100%'
const countdownElement = document.getElementById('countdown')
const timer = setInterval(function () {
countdown--
countdownElement.textContent = countdown
if (countdown <= 0) {
clearInterval(timer)
window.location.href = '[[${url}]]'
}
}, 1000)
} else {
document.querySelector('.progress-bar').style.display = 'none';
document.querySelector('.countdown-text').style.display = 'none';
}
/** 配置主题模式 */
let default_theme = '[[${theme.config.basic_style.default_theme}]]';
const hasNightInLocal = () => localStorage.getItem('night') !== null;
const getNightInConfig = () => {
if (default_theme === 'night') {
return true;
}
if (default_theme === 'system') {
return matchMedia('(prefers-color-scheme: dark)').matches;
}
return false;
}
let isNight = hasNightInLocal() ? localStorage.getItem('night') : getNightInConfig();
document.documentElement.classList.add(isNight.toString() === 'true' ? 'dark' : 'light');
2025-03-13 19:21:05 +08:00
}
</script>
2024-04-06 17:30:35 +08:00
</body>
</html>