Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/web/html
diff options
context:
space:
mode:
Diffstat (limited to 'web/html')
-rw-r--r--web/html/common/qrcode_modal.html8
-rw-r--r--web/html/common/text_modal.html4
-rw-r--r--web/html/login.html179
-rw-r--r--web/html/xui/fakedns_modal.html2
-rw-r--r--web/html/xui/index.html36
-rw-r--r--web/html/xui/settings.html8
6 files changed, 202 insertions, 35 deletions
diff --git a/web/html/common/qrcode_modal.html b/web/html/common/qrcode_modal.html
index 7cc317ef..3fcfdfc1 100644
--- a/web/html/common/qrcode_modal.html
+++ b/web/html/common/qrcode_modal.html
@@ -11,7 +11,7 @@
<a-divider>{{ i18n "pages.settings.subSettings"}}</a-divider>
<canvas @click="copyToClipboard('qrCode-sub',genSubLink(qrModal.client.subId))"
id="qrCode-sub"
- style="width: 100%; height: 100%; display: flex; border-radius: 1rem;">
+ class="qr-bg">
</canvas>
<a-divider>{{ i18n "pages.settings.subSettings"}} Json</a-divider>
<canvas @click="copyToClipboard('qrCode-subJson',genSubJsonLink(qrModal.client.subId))"
@@ -21,10 +21,10 @@
</template>
<a-divider>{{ i18n "pages.inbounds.client" }}</a-divider>
<template v-for="(row, index) in qrModal.qrcodes">
- <a-tag color="blue" style="margin: 10px 0; display: block; text-align: center;">[[ row.remark ]]</a-tag>
+ <a-tag color="green" style="margin: 10px 0; display: block; text-align: center;">[[ row.remark ]]</a-tag>
<canvas @click="copyToClipboard('qrCode-'+index, row.link)"
:id="'qrCode-'+index"
- style="width: 100%; height: 100%; display: flex; border-radius: 1rem;"></canvas>
+ class="qr-bg"></canvas>
</template>
</a-modal>
@@ -110,4 +110,4 @@
});
</script>
-{{end}} \ No newline at end of file
+{{end}}
diff --git a/web/html/common/text_modal.html b/web/html/common/text_modal.html
index 68387be2..d668c792 100644
--- a/web/html/common/text_modal.html
+++ b/web/html/common/text_modal.html
@@ -9,7 +9,7 @@
</a-button>
<a-button type="primary" id="copy-btn">{{ i18n "copy" }}</a-button>
</template>
- <a-input type="textarea" v-model="txtModal.content"
+ <a-input style="overflow-y: auto;" type="textarea" v-model="txtModal.content"
:autosize="{ minRows: 10, maxRows: 20}"></a-input>
</a-modal>
@@ -53,4 +53,4 @@
});
</script>
-{{end}} \ No newline at end of file
+{{end}}
diff --git a/web/html/login.html b/web/html/login.html
index b622a080..4605a4fd 100644
--- a/web/html/login.html
+++ b/web/html/login.html
@@ -2,9 +2,14 @@
<html lang="en">
{{template "head" .}}
<style>
+ html * {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
h1 {
text-align: center;
- margin: 20px 0 50px 0;
+/* margin: 20px 0 50px 0;*/
+ height: 110px;
}
.ant-btn,
.ant-input {
@@ -31,7 +36,9 @@
}
.title {
font-size: 32px;
- font-weight: 600;
+ }
+ .title b {
+ font-weight: bold !important;
}
#app {
overflow: hidden;
@@ -64,10 +71,10 @@
background-color: #0f2d32;
}
.dark #login {
- background-color: #151f31;
+ background-color: #101113;
}
.dark h1 {
- color: rgba(255, 255, 255, 0.85);
+ color: rgba(255, 255, 255);
}
.ant-form-item {
margin-bottom: 16px;
@@ -192,7 +199,7 @@
z-index: -1;
}
.dark .waves-header {
- background-color: #101828;
+ background-color: #0a2227;
}
.waves-inner-header {
height: 50vh;
@@ -247,6 +254,123 @@
min-height: 40px;
}
}
+ .words-wrapper {
+ width: 100%;
+ display: inline-block;
+ position: relative;
+ text-align: center;
+ }
+ .words-wrapper b {
+ width: 100%;
+ display: inline-block;
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+ .words-wrapper b.is-visible {
+ position: relative;
+ }
+ .headline.zoom .words-wrapper {
+ -webkit-perspective: 300px;
+ -moz-perspective: 300px;
+ perspective: 300px;
+ }
+ .headline {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+ .headline.zoom b {
+ opacity: 0;
+ }
+ .headline.zoom b.is-visible {
+ opacity: 1;
+ -webkit-animation: zoom-in 0.8s;
+ -moz-animation: zoom-in 0.8s;
+ animation: cubic-bezier(0.215, 0.610, 0.355, 1.000) zoom-in 0.8s;
+ }
+ .headline.zoom b.is-hidden {
+ -webkit-animation: zoom-out 0.8s;
+ -moz-animation: zoom-out 0.8s;
+ animation: cubic-bezier(0.215, 0.610, 0.355, 1.000) zoom-out 0.4s;
+ }
+ @-webkit-keyframes zoom-in {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateZ(100px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ }
+ }
+ @-moz-keyframes zoom-in {
+ 0% {
+ opacity: 0;
+ -moz-transform: translateZ(100px);
+ }
+ 100% {
+ opacity: 1;
+ -moz-transform: translateZ(0);
+ }
+ }
+ @keyframes zoom-in {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateZ(100px);
+ -moz-transform: translateZ(100px);
+ -ms-transform: translateZ(100px);
+ -o-transform: translateZ(100px);
+ transform: translateZ(100px);
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ -moz-transform: translateZ(0);
+ -ms-transform: translateZ(0);
+ -o-transform: translateZ(0);
+ transform: translateZ(0);
+ }
+ }
+ @-webkit-keyframes zoom-out {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateZ(-100px);
+ }
+ }
+ @-moz-keyframes zoom-out {
+ 0% {
+ opacity: 1;
+ -moz-transform: translateZ(0);
+ }
+ 100% {
+ opacity: 0;
+ -moz-transform: translateZ(-100px);
+ }
+ }
+ @keyframes zoom-out {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateZ(0);
+ -moz-transform: translateZ(0);
+ -ms-transform: translateZ(0);
+ -o-transform: translateZ(0);
+ transform: translateZ(0);
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateZ(-100px);
+ -moz-transform: translateZ(-100px);
+ -ms-transform: translateZ(-100px);
+ -o-transform: translateZ(-100px);
+ transform: translateZ(-100px);
+ }
+ }
</style>
<body>
<a-layout id="app" v-cloak :class="themeSwitcher.currentTheme">
@@ -269,8 +393,13 @@
<a-row type="flex" justify="center" align="middle" style="height: 100%; overflow: auto;">
<a-col :xs="22" :sm="20" :md="14" :lg="10" :xl="8" :xxl="6" id="login" style="margin: 3rem 0;">
<a-row type="flex" justify="center">
- <a-col>
- <h1 class="title">{{ i18n "pages.login.title" }}</h1>
+ <a-col style="width: 100%;">
+ <h1 class="title headline zoom">
+ <span class="words-wrapper">
+ <b class="is-visible">{{ i18n "pages.login.title" }}</b>
+ <b>3X-UI</b>
+ </span>
+ </h1>
</a-col>
</a-row>
<a-row type="flex" justify="center">
@@ -377,6 +506,42 @@
},
},
});
+ document.addEventListener("DOMContentLoaded", function() {
+ var animationDelay = 2000;
+ initHeadline();
+
+ function initHeadline() {
+ animateHeadline(document.querySelectorAll('.headline'));
+ }
+
+ function animateHeadline(headlines) {
+ var duration = animationDelay;
+ headlines.forEach(function(headline) {
+ setTimeout(function() {
+ hideWord(headline.querySelector('.is-visible'));
+ }, duration);
+ });
+ }
+
+ function hideWord(word) {
+ var nextWord = takeNext(word);
+ switchWord(word, nextWord);
+ setTimeout(function() {
+ hideWord(nextWord);
+ }, animationDelay);
+ }
+
+ function takeNext(word) {
+ return (word.nextElementSibling) ? word.nextElementSibling : word.parentElement.firstElementChild;
+ }
+
+ function switchWord(oldWord, newWord) {
+ oldWord.classList.remove('is-visible');
+ oldWord.classList.add('is-hidden');
+ newWord.classList.remove('is-hidden');
+ newWord.classList.add('is-visible');
+ }
+ });
</script>
</body>
</html>
diff --git a/web/html/xui/fakedns_modal.html b/web/html/xui/fakedns_modal.html
index c830f44d..c3abe5d5 100644
--- a/web/html/xui/fakedns_modal.html
+++ b/web/html/xui/fakedns_modal.html
@@ -7,7 +7,7 @@
<a-input v-model.trim="fakednsModal.fakeDns.ipPool"></a-input>
</a-form-item>
<a-form-item label='{{ i18n "pages.xray.fakedns.poolSize" }}'>
- <a-input type="number" min="1" v-model.trim="fakednsModal.fakeDns.poolSize"></a-input>
+ <a-input-number style="width: 100%;" type="number" min="1" v-model.trim="fakednsModal.fakeDns.poolSize"></a-input-number>
</a-form-item>
</a-form>
</a-modal>
diff --git a/web/html/xui/index.html b/web/html/xui/index.html
index 86dbf6b8..1c3132d6 100644
--- a/web/html/xui/index.html
+++ b/web/html/xui/index.html
@@ -19,12 +19,14 @@
color: hsla(0, 0%, 100%, .65);
}
- .ant-tag-df {
- color: rgb(0 0 0 / 80%);
+ .dark .ant-card-hoverable:hover,
+ .dark .ant-space-item > .ant-tabs:hover {
+ transform: scale(0.987);
+ outline-color: #40434d;
}
- .dark .ant-tag-df {
- color: rgb(255 255 255 / 80%);
+ .dark .ant-card-bordered {
+ outline: 2px solid var(--dark-color-background);
}
</style>
@@ -102,8 +104,8 @@
<a-col :sm="24" :lg="12">
<a-card hoverable>
<b>{{ i18n "pages.index.operationHours" }}:</b>
- <a-tag class="ant-tag-df">Xray [[ formatSecond(status.appStats.uptime) ]]</a-tag>
- <a-tag class="ant-tag-df">OS [[ formatSecond(status.uptime) ]]</a-tag>
+ <a-tag color="green">Xray [[ formatSecond(status.appStats.uptime) ]]</a-tag>
+ <a-tag color="green">OS [[ formatSecond(status.uptime) ]]</a-tag>
</a-card>
</a-col>
<a-col :sm="24" :lg="12">
@@ -137,7 +139,7 @@
<a-col :sm="24" :lg="12">
<a-card hoverable>
<b>{{ i18n "pages.index.systemLoad" }}:</b>
- <a-tag class="ant-tag-df">
+ <a-tag color="green">
<a-tooltip>
[[ status.loads[0] ]] | [[ status.loads[1] ]] | [[ status.loads[2] ]]
<template slot="title">
@@ -150,10 +152,10 @@
<a-col :sm="24" :lg="12">
<a-card hoverable>
<b>{{ i18n "usage"}}:</b>
- <a-tag class="ant-tag-df">
+ <a-tag color="green">
RAM [[ sizeFormat(status.appStats.mem) ]]
</a-tag>
- <a-tag class="ant-tag-df">
+ <a-tag color="green">
Threads [[ status.appStats.threads ]]
</a-tag>
</a-card>
@@ -162,7 +164,7 @@
<a-card hoverable>
<a-row>
<a-col :span="12">
- <a-tag class="ant-tag-df">
+ <a-tag>
<a-tooltip>
<a-icon type="global"></a-icon> IPv4
<template slot="title">
@@ -172,7 +174,7 @@
</a-tag>
</a-col>
<a-col :span="12">
- <a-tag class="ant-tag-df">
+ <a-tag>
<a-tooltip>
<a-icon type="global"></a-icon> IPv6
<template slot="title">
@@ -188,7 +190,7 @@
<a-card hoverable>
<a-row>
<a-col :span="12">
- <a-tag class="ant-tag-df">
+ <a-tag>
<a-tooltip>
<a-icon type="swap"></a-icon> TCP: [[ status.tcpCount ]]
<template slot="title">
@@ -198,7 +200,7 @@
</a-tag>
</a-col>
<a-col :span="12">
- <a-tag class="ant-tag-df">
+ <a-tag>
<a-tooltip>
<a-icon type="swap"></a-icon> UDP: [[ status.udpCount ]]
<template slot="title">
@@ -214,7 +216,7 @@
<a-card hoverable>
<a-row>
<a-col :span="12">
- <a-tag class="ant-tag-df">
+ <a-tag>
<a-tooltip>
<a-icon type="arrow-up"></a-icon>
Up: [[ sizeFormat(status.netIO.up) ]]/s
@@ -225,7 +227,7 @@
</a-tag>
</a-col>
<a-col :span="12">
- <a-tag class="ant-tag-df">
+ <a-tag>
<a-tooltip>
<a-icon type="arrow-down"></a-icon>
Down: [[ sizeFormat(status.netIO.down) ]]/s
@@ -242,7 +244,7 @@
<a-card hoverable>
<a-row>
<a-col :span="12">
- <a-tag class="ant-tag-df">
+ <a-tag>
<a-tooltip>
<a-icon type="cloud-upload"></a-icon>
<template slot="title">
@@ -252,7 +254,7 @@
</a-tag>
</a-col>
<a-col :span="12">
- <a-tag class="ant-tag-df">
+ <a-tag>
<a-tooltip>
<a-icon type="cloud-download"></a-icon>
<template slot="title">
diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html
index 62c53379..adc199a9 100644
--- a/web/html/xui/settings.html
+++ b/web/html/xui/settings.html
@@ -95,15 +95,15 @@
</a-alert>
</transition>
<a-space direction="vertical">
- <a-card hoverable style="margin-bottom: .5rem;">
- <a-row>
- <a-col :xs="24" :sm="8" style="padding: 4px;">
+ <a-card hoverable style="margin-bottom: .5rem; overflow-x: hidden;">
+ <a-row style="display: flex; flex-wrap: wrap; align-items: center;">
+ <a-col :xs="24" :sm="10" style="padding: 4px;">
<a-space direction="horizontal">
<a-button type="primary" :disabled="saveBtnDisable" @click="updateAllSetting">{{ i18n "pages.settings.save" }}</a-button>
<a-button type="danger" :disabled="!saveBtnDisable" @click="restartPanel">{{ i18n "pages.settings.restartPanel" }}</a-button>
</a-space>
</a-col>
- <a-col :xs="24" :sm="16">
+ <a-col :xs="24" :sm="14">
<template>
<div>
<a-back-top :target="() => document.getElementById('content-layout')" visibility-height="200">