This commit is contained in:
MarSeventh
2025-01-11 16:02:08 +08:00
parent 978e50c47d
commit a56ca9dd8f
96 changed files with 104 additions and 76 deletions
+8 -2
View File
@@ -34,7 +34,7 @@
**相关优质博文(感谢每一位鼎力支持的热心大佬):**
- [完全免费,图文教程手把手教你使用cloudflare搭建一个无限空间的私人图床 支持身份认证与成人元素鉴定! - yunsen2025的小窝](https://www.yunsen2025.top/archives/265)
- [完全免费,图文教程手把手教你使用cloudflare搭建一个无限空间的私人图床 支持身份认证与成人元素鉴定! - yunsen2025的小窝](https://www.yunsen2025.top/blog-cfpages-syq-imgbed)
- [利用cloudflare pages搭建telegram频道图床 (lepidus.me)](https://blogstr.lepidus.me/post/1725801323700/)
- [搭建基于CloudFlare和Telegram的免费图床教程 - 刘学馆 | Blog (sexy0769.com)](https://blog.sexy0769.com/skill/735.html)
- [CloudFlare+Github,打造属于自己的免费图床 - 大头钉的小小blog (luckyting.top)](https://luckyting.top/index.php/archives/20/)
@@ -728,6 +728,10 @@ Web端在登录页面输入你的**认证码**即可登录使用;API端需要
30. :white_check_mark:~~管理端批量选择时,记录用户选择的顺序~~(2024.12.20已完成)
31. :memo:上传图片支持自定义上传路径,支持相册功能(评估中)
32. :hourglass_flowing_sand:支持多个 Telegram Bot Token 负载均衡
33. :hourglass_flowing_sand:管理端提供详细的设置信息和设置方式引导
34. :hourglass_flowing_sand:Logo焕新、登录页面优化、多项展示效果优化
35. :hourglass_flowing_sand:接入S3 API渠道、CF Bed渠道
36. :hourglass_flowing_sand:支持短链接命名方式
</details>
@@ -797,7 +801,9 @@ Web端在登录页面输入你的**认证码**即可登录使用;API端需要
- 前端开源,参见[MarSeventh/Sanyue-ImgHub](https://github.com/MarSeventh/Sanyue-ImgHub)项目。
- **[赞助(爱发电提供支持)](https://afdian.com/a/marseventh/plan)**:项目维护不易,喜欢本项目的话,可以作者大大一点小小的鼓励哦,您的每一份支持都是我前进的动力\~
- **赞助**:项目维护不易,喜欢本项目的话,可以作者大大一点小小的鼓励哦,您的每一份支持都是我前进的动力\~
<a href="https://afdian.com/a/marseventh"><img width="200" src="https://pic1.afdiancdn.com/static/img/welcome/button-sponsorme.png" alt=""></a>
# 8.Star History
File diff suppressed because one or more lines are too long
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
.page-footer[data-v-eaaaff46]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-eaaaff46]{font-size:small}}.footer-name[data-v-eaaaff46]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none}.footer-link-icon[data-v-eaaaff46]{color:var(--page-footer-name-color);margin-left:5px}#themeToggle[data-v-18658a10]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;position:fixed;top:3vh;right:1.5vw}.theme_toggle_circle1[data-v-18658a10]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-18658a10]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-18658a10]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);transform:rotate(90deg);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-18658a10]{transform:rotate(40deg)}.theme_toggle_g[data-v-18658a10]{transition:opacity .5s ease-in-out}.login[data-v-fd423e52]{display:flex;justify-content:center;align-items:center;flex-direction:column;height:100vh;background:var(--admin-container-bg-color)}.login-title[data-v-fd423e52]{font-size:2.5rem;margin-bottom:15px;color:var(--login-title-color);font-family:Noto Sans SC,sans-serif}@media (max-width:768px){.login-title[data-v-fd423e52]{font-size:1.5rem}}.login-container[data-v-fd423e52]{display:flex;flex-direction:column;justify-content:space-around;align-items:center;height:40vh;width:40vw;border-radius:12px;box-shadow:0 0 12px rgba(0,0,0,.12);background-color:var(--login-container-bg-color);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:all .3s ease}@media (max-width:768px){.login-container[data-v-fd423e52]{width:80vw}}.login-container[data-v-fd423e52]:hover{box-shadow:0 0 12px 4px rgba(0,0,0,.24);transform:translateY(-5px)}.input-container[data-v-fd423e52]{display:flex;align-items:center;width:35vw}@media (max-width:768px){.input-container[data-v-fd423e52]{width:75vw}}.input-name[data-v-fd423e52]{width:15%;color:var(--login-title-color)}@media (max-width:768px){.input-name[data-v-fd423e52]{width:20%}}.submit[data-v-fd423e52]{margin-top:10px;width:40%;height:10%;border-radius:12px}.password-input[data-v-fd423e52]{width:80%;height:120%}.password-input[data-v-fd423e52] .el-input__wrapper{border-radius:12px;background-color:var(--password-input-bg-color);border:var(--password-input-border);box-shadow:none}@media (max-width:768px){.password-input[data-v-fd423e52]{width:75%}}.footer[data-v-fd423e52]{position:fixed;bottom:0;width:100vw}
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
.login[data-v-4007a1a9]{display:flex;justify-content:center;align-items:center;height:100vh;transition:background-image 1s ease-in-out;background-size:cover;background-attachment:fixed}.login-container[data-v-4007a1a9]{display:flex;flex-direction:column;justify-content:space-around;align-items:center;height:40vh;width:40vw;border-radius:12px;box-shadow:0 0 12px rgba(0,0,0,.12);background-color:hsla(0,0%,100%,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:all .3s ease}@media (max-width:768px){.login-container[data-v-4007a1a9]{width:80vw}}.login-container[data-v-4007a1a9]:hover{box-shadow:0 0 12px 4px rgba(0,0,0,.24);transform:translateY(-5px)}.password-input[data-v-4007a1a9]{margin-bottom:15px;width:30vw;height:40px}.password-input[data-v-4007a1a9] .el-input__wrapper{border-radius:12px;background-color:hsla(0,0%,100%,.7);box-shadow:none}@media (max-width:768px){.password-input[data-v-4007a1a9]{width:70vw}}.submit[data-v-4007a1a9]{margin-top:10px}.background-image1[data-v-4007a1a9],.background-image2[data-v-4007a1a9]{position:fixed;top:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;z-index:-1;opacity:0;transition:all 1s ease-in-out}
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
.page-footer[data-v-eaaaff46]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-eaaaff46]{font-size:small}}.footer-name[data-v-eaaaff46]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none}.footer-link-icon[data-v-eaaaff46]{color:var(--page-footer-name-color);margin-left:5px}#themeToggle[data-v-18658a10]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;position:fixed;top:3vh;right:1.5vw}.theme_toggle_circle1[data-v-18658a10]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-18658a10]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-18658a10]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);transform:rotate(90deg);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-18658a10]{transform:rotate(40deg)}.theme_toggle_g[data-v-18658a10]{transition:opacity .5s ease-in-out}.login[data-v-507d6e22]{display:flex;justify-content:center;align-items:center;flex-direction:column;height:100vh;background-color:var(--bg-color)}.login-container[data-v-507d6e22]{display:flex;flex-direction:column;justify-content:space-around;align-items:center;height:40vh;width:40vw;border-radius:12px;box-shadow:0 0 12px rgba(0,0,0,.12);background-color:var(--login-container-bg-color);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:all .3s ease}@media (max-width:768px){.login-container[data-v-507d6e22]{width:80vw}}.login-container[data-v-507d6e22]:hover{box-shadow:0 0 12px 4px rgba(0,0,0,.24);transform:translateY(-5px)}.login-title[data-v-507d6e22]{font-size:2.5rem;margin-bottom:15px;color:var(--login-title-color);font-family:Noto Sans SC,sans-serif}@media (max-width:768px){.login-title[data-v-507d6e22]{font-size:1.5rem}}.input-container[data-v-507d6e22]{display:flex;align-items:center;width:35vw}@media (max-width:768px){.input-container[data-v-507d6e22]{width:75vw}}.input-name[data-v-507d6e22]{width:15%;color:var(--login-title-color)}@media (max-width:768px){.input-name[data-v-507d6e22]{width:20%}}.password-input[data-v-507d6e22]{width:80%;height:120%}.password-input[data-v-507d6e22] .el-input__wrapper{border-radius:12px;background-color:var(--password-input-bg-color);border:var(--password-input-border);box-shadow:none}@media (max-width:768px){.password-input[data-v-507d6e22]{width:75%}}.submit[data-v-507d6e22]{margin-top:10px;width:40%;height:10%;border-radius:12px}.background-image1[data-v-507d6e22],.background-image2[data-v-507d6e22]{position:fixed;top:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;z-index:-1;opacity:0;transition:all 1s ease-in-out}.footer[data-v-507d6e22]{position:fixed;bottom:0;width:100vw}
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
.login[data-v-50aaab2d]{display:flex;justify-content:center;align-items:center;height:100vh;background:linear-gradient(90deg,#ffd7e4,#c8f1ff)}.login-container[data-v-50aaab2d]{display:flex;flex-direction:column;justify-content:space-around;align-items:center;height:40vh;width:40vw;border-radius:12px;box-shadow:0 0 12px rgba(0,0,0,.12);background-color:hsla(0,0%,100%,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:all .3s ease}@media (max-width:768px){.login-container[data-v-50aaab2d]{width:80vw}}.login-container[data-v-50aaab2d]:hover{box-shadow:0 0 12px 4px rgba(0,0,0,.24);transform:translateY(-5px)}.input-container[data-v-50aaab2d]{display:flex;align-items:center;width:35vw}@media (max-width:768px){.input-container[data-v-50aaab2d]{width:75vw}}.input-name[data-v-50aaab2d]{width:12vw}@media (max-width:768px){.input-name[data-v-50aaab2d]{width:28vw}}.submit[data-v-50aaab2d]{margin-top:10px}.password-input[data-v-50aaab2d]{height:40px}.password-input[data-v-50aaab2d] .el-input__wrapper{border-radius:12px;background-color:hsla(0,0%,100%,.9);box-shadow:none}.username-input[data-v-50aaab2d]{height:40px}.username-input[data-v-50aaab2d] .el-input__wrapper{border-radius:12px;background-color:hsla(0,0%,100%,.9);box-shadow:none}
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

+19 -1
View File
@@ -1 +1,19 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/logo.png"><title>Sanyue ImgHub</title><script defer="defer" src="/js/app.6ee1e6e7.js"></script><link href="/css/app.def7ef9b.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but sanyue_imghub doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/logo.png"><title>Sanyue ImgHub</title><script defer="defer" src="/js/app.18219e81.js"></script><link href="/css/app.897f96ee.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but sanyue_imghub doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html><style>.el-dropdown__popper.el-popper {
border-radius: 12px;
border: none;
background-color: var(--popper-bg-color);
backdrop-filter: blur(10px);
box-shadow: var(--popper-shadow);
}
.el-dropdown__popper.el-popper .el-dropdown-menu {
background: none;
border: none;
}
.el-dropdown__popper.el-popper .el-dropdown-menu__item {
border: none;
background: none;
}
.el-popper.is-light>.el-popper__arrow::before {
background: none;
border: none;
}</style>
BIN
View File
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[270],{8898:function(e,a,t){t.d(a,{A:function(){return h}});var s=t(6768),r=t(4232);const n={class:"page-footer"},o=["href"];function i(e,a,t,i,l,c){const u=(0,s.g2)("font-awesome-icon");return(0,s.uX)(),(0,s.CE)("div",n,[(0,s.Lk)("p",null,[(0,s.eW)("© 2024-"+(0,r.v_)(c.thisYear)+" Designed by ",1),a[0]||(a[0]=(0,s.Lk)("a",{class:"footer-name",href:"https://github.com/MarSeventh",target:"_blank"},"SanyueQi",-1)),a[1]||(a[1]=(0,s.eW)(" for You! ")),(0,s.Lk)("a",{href:c.footerLink,target:"_blank"},[(0,s.bF)(u,{icon:"paper-plane",class:"footer-link-icon"})],8,o)])])}var l=t(782),c={name:"Footer",computed:{...(0,l.L8)(["userConfig"]),footerLink(){return this.userConfig?.footerLink||"https://github.com/MarSeventh/CloudFlare-ImgBed"},thisYear(){return(new Date).getFullYear()}}},u=t(1241);const d=(0,u.A)(c,[["render",i],["__scopeId","data-v-eaaaff46"]]);var h=d},3154:function(e,a,t){t.d(a,{A:function(){return k}});var s=t(6768),r=t(4232);const n={id:"themeMask"},o=["cx","cy","r"],i=["r"],l=["opacity"];function c(e,a,t,c,u,d){return(0,s.uX)(),(0,s.CE)("div",{id:"themeToggle",onClick:a[0]||(a[0]=(...e)=>d.handleToggleClick&&d.handleToggleClick(...e))},[((0,s.uX)(),(0,s.CE)("svg",{class:(0,r.C4)(["theme_toggle_svg",{dark:u.isDark}]),width:"1.5em",height:"1.5em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,s.Lk)("mask",n,[a[1]||(a[1]=(0,s.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,s.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:u.isDark?"50%":"100%",cy:u.isDark?"23%":"0%",r:u.isDark?"9":"5"},null,8,o)]),(0,s.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:u.isDark?"9":"5",mask:"url(#themeMask)"},null,8,i),(0,s.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:u.isDark?0:1},a[2]||(a[2]=[(0,s.Fv)('<line x1="12" y1="1" x2="12" y2="3" data-v-18658a10></line><line x1="12" y1="21" x2="12" y2="23" data-v-18658a10></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64" data-v-18658a10></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78" data-v-18658a10></line><line x1="1" y1="12" x2="3" y2="12" data-v-18658a10></line><line x1="21" y1="12" x2="23" y2="12" data-v-18658a10></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36" data-v-18658a10></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22" data-v-18658a10></line>',8)]),8,l)],2))])}var u={name:"ToggleDark",data(){return{isDark:this.$store.getters.useDarkMode}},methods:{handleToggleClick(){this.isDark=!this.isDark,this.$store.commit("setUseDarkMode",this.isDark),this.$store.commit("setCusDarkMode",!0)}}},d=t(1241);const h=(0,d.A)(u,[["render",c],["__scopeId","data-v-18658a10"]]);var k=h},8270:function(e,a,t){t.r(a),t.d(a,{default:function(){return f}});var s=t(8898),r=t(47),n=(t(5331),t(9648),t(2105)),o=(t(9092),t(3154)),i=t(6768),l=t(5130);const c={class:"login"},u={class:"login-container"},d={class:"input-container"},h={class:"input-container"};function k(e,a,t,k,g,m){const p=o.A,f=n.WK,v=r.S2,y=s.A;return(0,i.uX)(),(0,i.CE)("div",c,[(0,i.bF)(p),(0,i.Lk)("div",u,[a[5]||(a[5]=(0,i.Lk)("h1",{class:"login-title"},"管理端登录",-1)),(0,i.Lk)("div",d,[a[2]||(a[2]=(0,i.Lk)("a",{class:"input-name"},"用户名:",-1)),(0,i.bF)(f,{modelValue:g.username,"onUpdate:modelValue":a[0]||(a[0]=e=>g.username=e),placeholder:"请输入用户名",class:"password-input"},null,8,["modelValue"])]),(0,i.Lk)("div",h,[a[3]||(a[3]=(0,i.Lk)("a",{class:"input-name"},"密码:",-1)),(0,i.bF)(f,{modelValue:g.password,"onUpdate:modelValue":a[1]||(a[1]=e=>g.password=e),placeholder:"请输入密码",class:"password-input",type:"password","show-password":"",onKeyup:(0,l.jR)(m.login,["enter","native"])},null,8,["modelValue","onKeyup"])]),(0,i.bF)(v,{class:"submit",type:"primary",onClick:m.login},{default:(0,i.k6)((()=>a[4]||(a[4]=[(0,i.eW)("登录")]))),_:1},8,["onClick"])]),(0,i.bF)(y,{class:"footer"})])}t(4114),t(4979);var g={data(){return{password:"",username:""}},components:{Footer:s.A,ToggleDark:o.A},methods:{async login(){const e=btoa(`${this.username}:${this.password}`);try{const a=await fetch("/api/manage/check",{method:"GET",headers:{Authorization:`Basic ${e}`},credentials:"include"});401===a.status?this.$message.error("用户名或密码错误"):200===a.status?(this.$store.commit("setCredentials",e),this.$router.push("/dashboard")):this.$message.error("用户名或密码错误")}catch(a){this.$message.error("服务器错误")}}}},m=t(1241);const p=(0,m.A)(g,[["render",k],["__scopeId","data-v-fd423e52"]]);var f=p}}]);
//# sourceMappingURL=270.bc2581a7.js.map
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
-2
View File
@@ -1,2 +0,0 @@
"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[272],{3272:function(s,t,e){e.r(t),e.d(t,{default:function(){return b}});var i=e(47),a=(e(5331),e(9648),e(2105)),n=(e(9092),e(6768)),l=e(5130);const o={class:"login"},r={class:"login-container"};function g(s,t,e,g,c,u){const p=a.WK,h=i.S2;return(0,n.uX)(),(0,n.CE)("div",o,[t[3]||(t[3]=(0,n.Lk)("img",{id:"bg1",class:"background-image1",alt:"Background Image"},null,-1)),t[4]||(t[4]=(0,n.Lk)("img",{id:"bg2",class:"background-image2",alt:"Background Image"},null,-1)),(0,n.Lk)("div",r,[t[2]||(t[2]=(0,n.Lk)("h1",null,"Login",-1)),(0,n.bF)(p,{class:"password-input",modelValue:c.password,"onUpdate:modelValue":t[0]||(t[0]=s=>c.password=s),placeholder:"输入认证码,若未设置留空即可~",type:"password","show-password":"",onKeyup:(0,l.jR)(u.login,["enter","native"])},null,8,["modelValue","onKeyup"]),(0,n.bF)(h,{class:"submit",type:"primary",onClick:u.login},{default:(0,n.k6)((()=>t[1]||(t[1]=[(0,n.eW)("登录")]))),_:1},8,["onClick"])])])}e(4114);var c=e(4570),u=e.n(c),p=e(4373),h=e(782),d={data(){return{password:"",writtenPass:"",bingWallPaperIndex:0,customWallPaperIndex:0}},computed:{...(0,h.L8)(["userConfig","bingWallPapers"]),bkInterval(){return this.userConfig?.bkInterval||3e3},bkOpacity(){return this.userConfig?.bkOpacity||1}},mounted(){const s=document.getElementById("bg1"),t=document.getElementById("bg2");"bing"===this.userConfig?.loginBkImg?this.$store.dispatch("fetchBingWallPapers").then((()=>{s.src=this.bingWallPapers[this.bingWallPaperIndex]?.url,s.onload=()=>{s.style.opacity=this.bkOpacity},setInterval((()=>{let e=0!=s.style.opacity?s:t,i=0!=s.style.opacity?t:s;e.style.opacity=0,this.bingWallPaperIndex=(this.bingWallPaperIndex+1)%this.bingWallPapers.length,i.src=this.bingWallPapers[this.bingWallPaperIndex]?.url,i.onload=()=>{i.style.opacity=this.bkOpacity}}),this.bkInterval)})):this.userConfig?.loginBkImg instanceof Array&&this.userConfig?.loginBkImg?.length>1?(s.src=this.userConfig.loginBkImg[this.customWallPaperIndex],s.onload=()=>{s.style.opacity=this.bkOpacity},setInterval((()=>{let e=0!=s.style.opacity?s:t,i=0!=s.style.opacity?t:s;e.style.opacity=0,this.customWallPaperIndex=(this.customWallPaperIndex+1)%this.userConfig.loginBkImg.length,i.src=this.userConfig.loginBkImg[this.customWallPaperIndex],i.onload=()=>{i.style.opacity=this.bkOpacity}}),this.bkInterval)):this.userConfig?.loginBkImg instanceof Array&&1==this.userConfig?.loginBkImg?.length?(s.src=this.userConfig.loginBkImg[0],s.onload=()=>{s.style.opacity=this.bkOpacity}):(s.src=e(732),s.onload=()=>{s.style.opacity=this.bkOpacity})},methods:{login(){""===this.password?this.writtenPass="unset":this.writtenPass=this.password,p.A.post("/api/login",{authCode:this.password}).then((s=>{200===s.status?(u().set("authCode",this.writtenPass,"14d"),this.$router.push("/"),this.$message.success("登录成功~")):this.$message.error("登录失败,请检查认证码是否正确~")})).catch((s=>{this.$message.error("登录失败,请检查认证码是否正确~")}))}}},y=e(1241);const m=(0,y.A)(d,[["render",g],["__scopeId","data-v-4007a1a9"]]);var b=m},732:function(s,t,e){s.exports=e.p+"img/background.ea1b7ee7.jpg"}}]);
//# sourceMappingURL=272.fcb4da96.js.map
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,2 +1,2 @@
"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[673],{8673:function(e,t,n){n.r(t),n.d(t,{default:function(){return s}});var a=n(6768);const i={class:"blocked-image-page"};function l(e,t,n,l,o,d){return(0,a.uX)(),(0,a.CE)("div",i,t[0]||(t[0]=[(0,a.Lk)("div",null,[(0,a.Lk)("div",null,[(0,a.eW)(" 抱歉,当前已开启白名单模式,上传的图片需要审核通过后才能展示,请等待审核通过后再进行访问。 "),(0,a.Lk)("br"),(0,a.eW)(" Sorry, the whitelist mode is currently enabled, the uploaded images need to be audited before they can be displayed, please wait for the audit to be passed before visiting. ")]),(0,a.Lk)("br"),(0,a.Lk)("div",null,[(0,a.eW)("Powered By: "),(0,a.Lk)("span",null,[(0,a.Lk)("a",{href:"https://github.com/MarSeventh/CloudFlare-ImgBed",style:{color:"cornflowerblue"}}," CloudFlare-ImgBed ")])])],-1)]))}var o=n(3129),d={name:"BlockedImage",setup(){(0,o.u)({title:"White List On",meta:[{name:"robots",content:"noindex, nofollow"},{name:"viewport",content:"width=device-width, initial-scale=1"},{charset:"UTF-8"}]})}},r=n(1241);const u=(0,r.A)(d,[["render",l],["__scopeId","data-v-0023e522"]]);var s=u}}]);
//# sourceMappingURL=673.d0c18f73.js.map
//# sourceMappingURL=673.dbfcf7e2.js.map
Binary file not shown.
@@ -1 +1 @@
{"version":3,"file":"js/673.d0c18f73.js","mappings":"oLACA,MAAMA,EAAa,CACjBC,MAAO,sBAEF,SAASC,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,OAAO,WAAc,QAAoB,MAAOR,EAAYI,EAAO,KAAOA,EAAO,GAAK,EAAC,QAAoB,MAAO,KAAM,EAAC,QAAoB,MAAO,KAAM,EAAC,QAAiB,oDAAoD,QAAoB,OAAO,QAAiB,qLAAqL,QAAoB,OAAO,QAAoB,MAAO,KAAM,EAAC,QAAiB,iBAAiB,QAAoB,OAAQ,KAAM,EAAC,QAAoB,IAAK,CAC1lBK,KAAM,kDACNC,MAAO,CACL,MAAS,mBAEV,6BAA8B,KACnC,C,cCVA,GACEC,KAAM,eACN,KAAAC,IACE,IAAAC,GAAQ,CACNC,MAAO,gBACPC,KAAM,CAAC,CACLJ,KAAM,SACNK,QAAS,qBACR,CACDL,KAAM,WACNK,QAAS,uCACR,CACDC,QAAS,WAGf,G,UCTF,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAShB,GAAQ,CAAC,YAAY,qBAEzF,O","sources":["webpack://sanyue_imghub/./src/views/WhiteListOn.vue?9449","webpack://sanyue_imghub/./src/views/WhiteListOn.vue","webpack://sanyue_imghub/./src/views/WhiteListOn.vue?05e5"],"sourcesContent":["import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"blocked-image-page\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, _cache[0] || (_cache[0] = [_createElementVNode(\"div\", null, [_createElementVNode(\"div\", null, [_createTextVNode(\" 抱歉,当前已开启白名单模式,上传的图片需要审核通过后才能展示,请等待审核通过后再进行访问。 \"), _createElementVNode(\"br\"), _createTextVNode(\" Sorry, the whitelist mode is currently enabled, the uploaded images need to be audited before they can be displayed, please wait for the audit to be passed before visiting. \")]), _createElementVNode(\"br\"), _createElementVNode(\"div\", null, [_createTextVNode(\"Powered By: \"), _createElementVNode(\"span\", null, [_createElementVNode(\"a\", {\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n style: {\n \"color\": \"cornflowerblue\"\n }\n }, \" CloudFlare-ImgBed \")])])], -1)]));\n}","import { useHead } from '@vueuse/head';\nexport default {\n name: 'BlockedImage',\n setup() {\n useHead({\n title: 'White List On',\n meta: [{\n name: 'robots',\n content: 'noindex, nofollow'\n }, {\n name: 'viewport',\n content: 'width=device-width, initial-scale=1'\n }, {\n charset: 'UTF-8'\n }]\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./WhiteListOn.vue?vue&type=template&id=0023e522&scoped=true\"\nimport script from \"./WhiteListOn.vue?vue&type=script&lang=js\"\nexport * from \"./WhiteListOn.vue?vue&type=script&lang=js\"\n\nimport \"./WhiteListOn.vue?vue&type=style&index=0&id=0023e522&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0023e522\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","render","_ctx","_cache","$props","$setup","$data","$options","href","style","name","setup","u","title","meta","content","charset","__exports__"],"sourceRoot":""}
{"version":3,"file":"js/673.dbfcf7e2.js","mappings":"oLACA,MAAMA,EAAa,CACjBC,MAAO,sBAEF,SAASC,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,OAAO,WAAc,QAAoB,MAAOR,EAAYI,EAAO,KAAOA,EAAO,GAAK,EAAC,QAAoB,MAAO,KAAM,EAAC,QAAoB,MAAO,KAAM,EAAC,QAAiB,oDAAoD,QAAoB,OAAO,QAAiB,qLAAqL,QAAoB,OAAO,QAAoB,MAAO,KAAM,EAAC,QAAiB,iBAAiB,QAAoB,OAAQ,KAAM,EAAC,QAAoB,IAAK,CAC1lBK,KAAM,kDACNC,MAAO,CACL,MAAS,mBAEV,6BAA8B,KACnC,C,cCVA,GACEC,KAAM,eACN,KAAAC,IACE,IAAAC,GAAQ,CACNC,MAAO,gBACPC,KAAM,CAAC,CACLJ,KAAM,SACNK,QAAS,qBACR,CACDL,KAAM,WACNK,QAAS,uCACR,CACDC,QAAS,WAGf,G,UCTF,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAShB,GAAQ,CAAC,YAAY,qBAEzF,O","sources":["webpack://sanyue_imghub/./src/views/WhiteListOn.vue?9449","webpack://sanyue_imghub/./src/views/WhiteListOn.vue","webpack://sanyue_imghub/./src/views/WhiteListOn.vue?05e5"],"sourcesContent":["import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"blocked-image-page\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, _cache[0] || (_cache[0] = [_createElementVNode(\"div\", null, [_createElementVNode(\"div\", null, [_createTextVNode(\" 抱歉,当前已开启白名单模式,上传的图片需要审核通过后才能展示,请等待审核通过后再进行访问。 \"), _createElementVNode(\"br\"), _createTextVNode(\" Sorry, the whitelist mode is currently enabled, the uploaded images need to be audited before they can be displayed, please wait for the audit to be passed before visiting. \")]), _createElementVNode(\"br\"), _createElementVNode(\"div\", null, [_createTextVNode(\"Powered By: \"), _createElementVNode(\"span\", null, [_createElementVNode(\"a\", {\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n style: {\n \"color\": \"cornflowerblue\"\n }\n }, \" CloudFlare-ImgBed \")])])], -1)]));\n}","import { useHead } from '@vueuse/head';\nexport default {\n name: 'BlockedImage',\n setup() {\n useHead({\n title: 'White List On',\n meta: [{\n name: 'robots',\n content: 'noindex, nofollow'\n }, {\n name: 'viewport',\n content: 'width=device-width, initial-scale=1'\n }, {\n charset: 'UTF-8'\n }]\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./WhiteListOn.vue?vue&type=template&id=0023e522&scoped=true\"\nimport script from \"./WhiteListOn.vue?vue&type=script&lang=js\"\nexport * from \"./WhiteListOn.vue?vue&type=script&lang=js\"\n\nimport \"./WhiteListOn.vue?vue&type=style&index=0&id=0023e522&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0023e522\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","render","_ctx","_cache","$props","$setup","$data","$options","href","style","name","setup","u","title","meta","content","charset","__exports__"],"sourceRoot":""}
Binary file not shown.
-2
View File
@@ -1,2 +0,0 @@
"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[782],{6782:function(e,s,a){a.r(s),a.d(s,{default:function(){return k}});var n=a(47),t=(a(5331),a(9648),a(2105)),o=(a(9092),a(6768)),r=a(5130);const i={class:"login"},u={class:"login-container"},l={class:"input-container"},c={class:"input-container"};function d(e,s,a,d,p,m){const h=t.WK,k=n.S2;return(0,o.uX)(),(0,o.CE)("div",i,[(0,o.Lk)("div",u,[s[5]||(s[5]=(0,o.Lk)("h1",null,"AdminLogin",-1)),(0,o.Lk)("div",l,[s[2]||(s[2]=(0,o.Lk)("a",{class:"input-name"},"用户名:",-1)),(0,o.bF)(h,{modelValue:p.username,"onUpdate:modelValue":s[0]||(s[0]=e=>p.username=e),placeholder:"请输入用户名",class:"username-input"},null,8,["modelValue"])]),(0,o.Lk)("div",c,[s[3]||(s[3]=(0,o.Lk)("a",{class:"input-name"},"密码:",-1)),(0,o.bF)(h,{modelValue:p.password,"onUpdate:modelValue":s[1]||(s[1]=e=>p.password=e),placeholder:"请输入密码",class:"password-input",type:"password","show-password":"",onKeyup:(0,r.jR)(m.login,["enter","native"])},null,8,["modelValue","onKeyup"])]),(0,o.bF)(k,{class:"submit",type:"primary",onClick:m.login},{default:(0,o.k6)((()=>s[4]||(s[4]=[(0,o.eW)("登录")]))),_:1},8,["onClick"])])])}a(4114),a(4979);var p={data(){return{password:"",username:""}},methods:{async login(){const e=btoa(`${this.username}:${this.password}`);try{const s=await fetch("/api/manage/check",{method:"GET",headers:{Authorization:`Basic ${e}`},credentials:"include"});401===s.status?this.$message.error("用户名或密码错误"):200===s.status?(this.$store.commit("setCredentials",e),this.$router.push("/dashboard")):this.$message.error("用户名或密码错误")}catch(s){this.$message.error("服务器错误")}}}},m=a(1241);const h=(0,m.A)(p,[["render",d],["__scopeId","data-v-50aaab2d"]]);var k=h}}]);
//# sourceMappingURL=782.ee638005.js.map
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
+1 -1
View File
@@ -1,2 +1,2 @@
"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[866],{8866:function(e,n,t){t.r(n),t.d(n,{default:function(){return d}});var r=t(6768);const a={class:"blocked-image-page"};function o(e,n,t,o,l,i){return(0,r.uX)(),(0,r.CE)("div",a,n[0]||(n[0]=[(0,r.Lk)("div",null,[(0,r.Lk)("div",null,[(0,r.eW)(" 抱歉,当前图片已被禁止访问。 "),(0,r.Lk)("br"),(0,r.eW)(" Sorry, current image is prohibited from being accessed. ")]),(0,r.Lk)("br"),(0,r.Lk)("div",null,[(0,r.eW)("Powered By: "),(0,r.Lk)("span",null,[(0,r.Lk)("a",{href:"https://github.com/MarSeventh/CloudFlare-ImgBed",style:{color:"cornflowerblue"}}," CloudFlare-ImgBed ")])])],-1)]))}var l=t(3129),i={name:"BlockedImage",setup(){(0,l.u)({title:"Blocked Image",meta:[{name:"robots",content:"noindex, nofollow"},{name:"viewport",content:"width=device-width, initial-scale=1"},{charset:"UTF-8"}]})}},u=t(1241);const c=(0,u.A)(i,[["render",o],["__scopeId","data-v-58ebc51e"]]);var d=c}}]);
//# sourceMappingURL=866.aa16442c.js.map
//# sourceMappingURL=866.0d6975a3.js.map
Binary file not shown.
@@ -1 +1 @@
{"version":3,"file":"js/866.aa16442c.js","mappings":"oLACA,MAAMA,EAAa,CACjBC,MAAO,sBAEF,SAASC,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,OAAO,WAAc,QAAoB,MAAOR,EAAYI,EAAO,KAAOA,EAAO,GAAK,EAAC,QAAoB,MAAO,KAAM,EAAC,QAAoB,MAAO,KAAM,EAAC,QAAiB,qBAAqB,QAAoB,OAAO,QAAiB,gEAAgE,QAAoB,OAAO,QAAoB,MAAO,KAAM,EAAC,QAAiB,iBAAiB,QAAoB,OAAQ,KAAM,EAAC,QAAoB,IAAK,CACtcK,KAAM,kDACNC,MAAO,CACL,MAAS,mBAEV,6BAA8B,KACnC,C,cCVA,GACEC,KAAM,eACN,KAAAC,IACE,IAAAC,GAAQ,CACNC,MAAO,gBACPC,KAAM,CAAC,CACLJ,KAAM,SACNK,QAAS,qBACR,CACDL,KAAM,WACNK,QAAS,uCACR,CACDC,QAAS,WAGf,G,UCTF,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAShB,GAAQ,CAAC,YAAY,qBAEzF,O","sources":["webpack://sanyue_imghub/./src/views/BlockImage.vue?f1ca","webpack://sanyue_imghub/./src/views/BlockImage.vue","webpack://sanyue_imghub/./src/views/BlockImage.vue?e417"],"sourcesContent":["import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"blocked-image-page\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, _cache[0] || (_cache[0] = [_createElementVNode(\"div\", null, [_createElementVNode(\"div\", null, [_createTextVNode(\" 抱歉,当前图片已被禁止访问。 \"), _createElementVNode(\"br\"), _createTextVNode(\" Sorry, current image is prohibited from being accessed. \")]), _createElementVNode(\"br\"), _createElementVNode(\"div\", null, [_createTextVNode(\"Powered By: \"), _createElementVNode(\"span\", null, [_createElementVNode(\"a\", {\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n style: {\n \"color\": \"cornflowerblue\"\n }\n }, \" CloudFlare-ImgBed \")])])], -1)]));\n}","import { useHead } from '@vueuse/head';\nexport default {\n name: 'BlockedImage',\n setup() {\n useHead({\n title: 'Blocked Image',\n meta: [{\n name: 'robots',\n content: 'noindex, nofollow'\n }, {\n name: 'viewport',\n content: 'width=device-width, initial-scale=1'\n }, {\n charset: 'UTF-8'\n }]\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BlockImage.vue?vue&type=template&id=58ebc51e&scoped=true\"\nimport script from \"./BlockImage.vue?vue&type=script&lang=js\"\nexport * from \"./BlockImage.vue?vue&type=script&lang=js\"\n\nimport \"./BlockImage.vue?vue&type=style&index=0&id=58ebc51e&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-58ebc51e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","render","_ctx","_cache","$props","$setup","$data","$options","href","style","name","setup","u","title","meta","content","charset","__exports__"],"sourceRoot":""}
{"version":3,"file":"js/866.0d6975a3.js","mappings":"oLACA,MAAMA,EAAa,CACjBC,MAAO,sBAEF,SAASC,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,OAAO,WAAc,QAAoB,MAAOR,EAAYI,EAAO,KAAOA,EAAO,GAAK,EAAC,QAAoB,MAAO,KAAM,EAAC,QAAoB,MAAO,KAAM,EAAC,QAAiB,qBAAqB,QAAoB,OAAO,QAAiB,gEAAgE,QAAoB,OAAO,QAAoB,MAAO,KAAM,EAAC,QAAiB,iBAAiB,QAAoB,OAAQ,KAAM,EAAC,QAAoB,IAAK,CACtcK,KAAM,kDACNC,MAAO,CACL,MAAS,mBAEV,6BAA8B,KACnC,C,cCVA,GACEC,KAAM,eACN,KAAAC,IACE,IAAAC,GAAQ,CACNC,MAAO,gBACPC,KAAM,CAAC,CACLJ,KAAM,SACNK,QAAS,qBACR,CACDL,KAAM,WACNK,QAAS,uCACR,CACDC,QAAS,WAGf,G,UCTF,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAShB,GAAQ,CAAC,YAAY,qBAEzF,O","sources":["webpack://sanyue_imghub/./src/views/BlockImage.vue?f1ca","webpack://sanyue_imghub/./src/views/BlockImage.vue","webpack://sanyue_imghub/./src/views/BlockImage.vue?e417"],"sourcesContent":["import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"blocked-image-page\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, _cache[0] || (_cache[0] = [_createElementVNode(\"div\", null, [_createElementVNode(\"div\", null, [_createTextVNode(\" 抱歉,当前图片已被禁止访问。 \"), _createElementVNode(\"br\"), _createTextVNode(\" Sorry, current image is prohibited from being accessed. \")]), _createElementVNode(\"br\"), _createElementVNode(\"div\", null, [_createTextVNode(\"Powered By: \"), _createElementVNode(\"span\", null, [_createElementVNode(\"a\", {\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n style: {\n \"color\": \"cornflowerblue\"\n }\n }, \" CloudFlare-ImgBed \")])])], -1)]));\n}","import { useHead } from '@vueuse/head';\nexport default {\n name: 'BlockedImage',\n setup() {\n useHead({\n title: 'Blocked Image',\n meta: [{\n name: 'robots',\n content: 'noindex, nofollow'\n }, {\n name: 'viewport',\n content: 'width=device-width, initial-scale=1'\n }, {\n charset: 'UTF-8'\n }]\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BlockImage.vue?vue&type=template&id=58ebc51e&scoped=true\"\nimport script from \"./BlockImage.vue?vue&type=script&lang=js\"\nexport * from \"./BlockImage.vue?vue&type=script&lang=js\"\n\nimport \"./BlockImage.vue?vue&type=style&index=0&id=58ebc51e&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-58ebc51e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","render","_ctx","_cache","$props","$setup","$data","$options","href","style","name","setup","u","title","meta","content","charset","__exports__"],"sourceRoot":""}
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.