💁🏻重构页面,采用更完善动画和更精细的主页(@JLinMr)
This commit is contained in:
		
							
								
								
									
										3
									
								
								.github/workflows/deal_subscribe_issue.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/deal_subscribe_issue.yml
									
									
									
									
										vendored
									
									
								
							@@ -25,9 +25,8 @@ jobs:
 | 
				
			|||||||
        token: ${{ secrets.GTIHUB_TOKEN }}
 | 
					        token: ${{ secrets.GTIHUB_TOKEN }}
 | 
				
			||||||
        issue-number: ${{ github.event.issue.number }}
 | 
					        issue-number: ${{ github.event.issue.number }}
 | 
				
			||||||
        body: |
 | 
					        body: |
 | 
				
			||||||
          🤩你好呀! ${{ github.event.issue.user.login }}!你已经成功通过邮件订阅了清羽飞扬的小站啦!若有新文章将通过邮箱推送给你!谢谢你的订阅!
 | 
					          🤩你好呀! ${{ github.event.issue.user.login }}!你已经成功通过邮件订阅了本站啦!若有新文章将通过邮箱推送给你!谢谢你的订阅!
 | 
				
			||||||
          😥如果您实在想要关闭订阅,在右下角直接删除这个issue就好!咕咕咕咕咕咕咕!
 | 
					          😥如果您实在想要关闭订阅,在右下角直接删除这个issue就好!咕咕咕咕咕咕咕!
 | 
				
			||||||
          🤤个人主页是:https://www.liushen.fun ,欢迎来看看呀!
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Close issue
 | 
					    - name: Close issue
 | 
				
			||||||
      uses: actions-cool/issues-helper@v3
 | 
					      uses: actions-cool/issues-helper@v3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,10 +41,6 @@
 | 
				
			|||||||
    --load-more-btn-bg-color: var(--container-bg-color);
 | 
					    --load-more-btn-bg-color: var(--container-bg-color);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
body {
 | 
					 | 
				
			||||||
    background-color: var(--background-color);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#friend-circle-lite-root {
 | 
					#friend-circle-lite-root {
 | 
				
			||||||
    width: 100%;
 | 
					    width: 100%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -119,7 +115,7 @@ body {
 | 
				
			|||||||
    z-index: 999;
 | 
					    z-index: 999;
 | 
				
			||||||
    opacity: 0;
 | 
					    opacity: 0;
 | 
				
			||||||
    visibility: hidden;
 | 
					    visibility: hidden;
 | 
				
			||||||
    transition: opacity 0.3s;
 | 
					    transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.modal-open {
 | 
					.modal-open {
 | 
				
			||||||
@@ -128,10 +124,11 @@ body {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.modal-content {
 | 
					.modal-content {
 | 
				
			||||||
 | 
					    opacity: 0;
 | 
				
			||||||
    position: relative;
 | 
					    position: relative;
 | 
				
			||||||
    top: 50%;
 | 
					    top: 50%;
 | 
				
			||||||
    left: 50%;
 | 
					    left: 50%;
 | 
				
			||||||
    transform: translate(-50%, -50%);
 | 
					    transform: translate(-50%, -50%) translateY(-50px);
 | 
				
			||||||
    width: 350px;
 | 
					    width: 350px;
 | 
				
			||||||
    background-color: var(--modal-content-bg-color);
 | 
					    background-color: var(--modal-content-bg-color);
 | 
				
			||||||
    padding: 20px;
 | 
					    padding: 20px;
 | 
				
			||||||
@@ -140,7 +137,12 @@ body {
 | 
				
			|||||||
    max-height: 90%;
 | 
					    max-height: 90%;
 | 
				
			||||||
    overflow: hidden;
 | 
					    overflow: hidden;
 | 
				
			||||||
    border-radius: 20px;
 | 
					    border-radius: 20px;
 | 
				
			||||||
    transition: opacity 0.3s;
 | 
					    transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.modal.modal-open .modal-content {
 | 
				
			||||||
 | 
					    transform: translate(-50%, -50%) translateY(0);
 | 
				
			||||||
 | 
					    opacity: 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.modal-content:hover #modal-bg  {
 | 
					.modal-content:hover #modal-bg  {
 | 
				
			||||||
@@ -293,7 +295,7 @@ body {
 | 
				
			|||||||
    font-size: 12px;
 | 
					    font-size: 12px;
 | 
				
			||||||
    color: var(--author-color);
 | 
					    color: var(--author-color);
 | 
				
			||||||
    padding: 5px;
 | 
					    padding: 5px;
 | 
				
			||||||
    height: 25px;
 | 
					    line-height: 15px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.card-author:hover {
 | 
					.card-author:hover {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,13 +21,13 @@ app.add_middleware(
 | 
				
			|||||||
@app.get("/", response_class=HTMLResponse)
 | 
					@app.get("/", response_class=HTMLResponse)
 | 
				
			||||||
async def root():
 | 
					async def root():
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        with open('./server/deploy-home.html', 'r', encoding='utf-8') as f:
 | 
					        with open('./static/index.html', 'r', encoding='utf-8') as f:
 | 
				
			||||||
            html_content = f.read()
 | 
					            html_content = f.read()
 | 
				
			||||||
        return HTMLResponse(content=html_content)
 | 
					        return HTMLResponse(content=html_content)
 | 
				
			||||||
    except FileNotFoundError:
 | 
					    except FileNotFoundError:
 | 
				
			||||||
        return HTMLResponse(content="<h1>File not found</h1>", status_code=404)
 | 
					        return HTMLResponse(content="<h1>File not found</h1>", status_code=404)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.get('/all')
 | 
					@app.get('/all.json')
 | 
				
			||||||
async def get_all_articles():
 | 
					async def get_all_articles():
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        with open('./all.json', 'r', encoding='utf-8') as f:
 | 
					        with open('./all.json', 'r', encoding='utf-8') as f:
 | 
				
			||||||
@@ -38,7 +38,7 @@ async def get_all_articles():
 | 
				
			|||||||
    except json.JSONDecodeError:
 | 
					    except json.JSONDecodeError:
 | 
				
			||||||
        return JSONResponse(content={"error": "Failed to decode JSON"}, status_code=500)
 | 
					        return JSONResponse(content={"error": "Failed to decode JSON"}, status_code=500)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.get('/errors')
 | 
					@app.get('/errors.json')
 | 
				
			||||||
async def get_error_friends():
 | 
					async def get_error_friends():
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        with open('./errors.json', 'r', encoding='utf-8') as f:
 | 
					        with open('./errors.json', 'r', encoding='utf-8') as f:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,16 +7,125 @@
 | 
				
			|||||||
    <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon">
 | 
					    <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon">
 | 
				
			||||||
    <meta name="description" content="🐱一个精简版,无后端,且仅利用github action运行的精简版友链朋友圈程序,兼容fc的json格式信息,同时支持推送友圈更新,支持他人订阅个人站点并在更新时发送邮箱推送。">
 | 
					    <meta name="description" content="🐱一个精简版,无后端,且仅利用github action运行的精简版友链朋友圈程序,兼容fc的json格式信息,同时支持推送友圈更新,支持他人订阅个人站点并在更新时发送邮箱推送。">
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
				
			||||||
    <title>Frient-Circle-Lite</title>
 | 
					    <title>Friend-Circle-Lite</title>
 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
<style>
 | 
					<style>
 | 
				
			||||||
 | 
					    body {
 | 
				
			||||||
 | 
					        font-family: Arial, sans-serif;
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        flex-direction: column;
 | 
				
			||||||
 | 
					        justify-content: center;
 | 
				
			||||||
 | 
					        align-items: center;
 | 
				
			||||||
 | 
					        height: 100vh;
 | 
				
			||||||
 | 
					        margin: 0;
 | 
				
			||||||
 | 
					        overflow-y: scroll;
 | 
				
			||||||
 | 
					        overflow-x: hidden;
 | 
				
			||||||
 | 
					        height: fit-content;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .container {
 | 
				
			||||||
 | 
					        background: linear-gradient(135deg, #ffdaaa, #abc2e7);
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        text-align: center;
 | 
				
			||||||
 | 
					        align-items: center;
 | 
				
			||||||
 | 
					        height: 100vh;
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					        flex-direction: column;
 | 
				
			||||||
 | 
					        justify-content: center;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .root-container {
 | 
					    .root-container {
 | 
				
			||||||
        margin: 0 auto;
 | 
					        width: 100%;
 | 
				
			||||||
        padding: 20px;
 | 
					        margin-top: 40px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .avatar {
 | 
				
			||||||
 | 
					        width: 150px;
 | 
				
			||||||
 | 
					        height: 150px;
 | 
				
			||||||
 | 
					        border-radius: 50%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    p {
 | 
				
			||||||
 | 
					        color: #666;
 | 
				
			||||||
 | 
					        margin-bottom: 30px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .button-container {
 | 
				
			||||||
 | 
					        margin-top: 20px;
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        justify-content: center;
 | 
				
			||||||
 | 
					        gap: 10px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .button {
 | 
				
			||||||
 | 
					        background-color: rgb(255, 255, 255);
 | 
				
			||||||
 | 
					        border: 2px solid #007BFF;
 | 
				
			||||||
 | 
					        color: #007BFF;
 | 
				
			||||||
 | 
					        padding: 10px 20px;
 | 
				
			||||||
 | 
					        border-radius: 25px;
 | 
				
			||||||
 | 
					        text-decoration: none;
 | 
				
			||||||
 | 
					        font-size: 16px;
 | 
				
			||||||
 | 
					        font-weight: bold;
 | 
				
			||||||
 | 
					        display: inline-block;
 | 
				
			||||||
 | 
					        transition: background-color 0.3s, color 0.3s;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .button:hover {
 | 
				
			||||||
 | 
					        background-color: #007BFF;
 | 
				
			||||||
 | 
					        color: white;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .card-author,
 | 
				
			||||||
 | 
					    .card-date {
 | 
				
			||||||
 | 
					        height: fit-content !important;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #friend-circle-lite-root {
 | 
				
			||||||
 | 
					        padding: 10px 0;
 | 
				
			||||||
 | 
					        margin: 10px auto;
 | 
				
			||||||
 | 
					        max-width: 1200px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .scroll-down-icon {
 | 
				
			||||||
 | 
					        position: absolute;
 | 
				
			||||||
 | 
					        bottom: 20px;
 | 
				
			||||||
 | 
					        height: 24px;
 | 
				
			||||||
 | 
					        color: #007BFF;
 | 
				
			||||||
 | 
					        animation: bounce 1.5s infinite;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .scroll-down-icon::before,
 | 
				
			||||||
 | 
					    .scroll-down-icon::after {
 | 
				
			||||||
 | 
					        content: '';
 | 
				
			||||||
 | 
					        position: absolute;
 | 
				
			||||||
 | 
					        top: 50%;
 | 
				
			||||||
 | 
					        left: 50%;
 | 
				
			||||||
 | 
					        width: 12px;
 | 
				
			||||||
 | 
					        height: 12px;
 | 
				
			||||||
 | 
					        opacity: .8;
 | 
				
			||||||
 | 
					        border-left: 3px solid #007BFF;
 | 
				
			||||||
 | 
					        border-bottom: 3px solid #007BFF;
 | 
				
			||||||
 | 
					        transform: translate(-50%, -50%) rotate(-45deg);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .scroll-down-icon::after {
 | 
				
			||||||
 | 
					        top: 80%;
 | 
				
			||||||
 | 
					        opacity: .6;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    @keyframes bounce {
 | 
				
			||||||
 | 
					        0%, 100% {
 | 
				
			||||||
 | 
					            transform: translateY(0);
 | 
				
			||||||
 | 
					            opacity: .6;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        50% {
 | 
				
			||||||
 | 
					            transform: translateY(-10px);
 | 
				
			||||||
 | 
					            opacity: 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
 | 
					    <div class="container">
 | 
				
			||||||
 | 
					        <img src="./favicon.ico" alt="Avatar" class="avatar">
 | 
				
			||||||
 | 
					        <p>Friend-Circle-Lite<br>服务已运行</p>
 | 
				
			||||||
 | 
					        <div class="button-container">
 | 
				
			||||||
 | 
					            <a href="https://blog.liushen.fun/posts/4dc716ec/" class="button">查看文档</a>
 | 
				
			||||||
 | 
					            <a href="/all.json" class="button">测试接口</a>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <a href="#" class="scroll-down-icon" id="scroll-down-button"></a>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
    <div class="root-container" style="max-width: 1000px;">
 | 
					    <div class="root-container" style="max-width: 1000px;">
 | 
				
			||||||
        <div id="friend-circle-lite-root"></div>
 | 
					        <div id="friend-circle-lite-root"></div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user