diff --git a/assets/css/routes/forum.css b/assets/css/routes/forum.css index f9396270..27c8a174 100644 --- a/assets/css/routes/forum.css +++ b/assets/css/routes/forum.css @@ -1,66 +1,241 @@ +/* Forum surface: home tabs, plate panels, post cards, listing, replies. */ #forum{--forum-ink:var(--key-color,#24282c);--forum-muted:var(--muted-color,#737b82);--forum-line:var(--muted-4-color,#e6e9eb);--forum-accent:var(--focus-color,#2869d1);color:var(--forum-ink)} + +/* ── 通用壳(版块 / 分类 / 搜索列表沿用) ───────────────────────── */ #forum .jio-forum__wrap{width:min(1200px,calc(100% - 32px));margin:22px auto 70px} #forum .jio-forum__breadcrumbs{display:flex;gap:9px;align-items:center;color:var(--forum-muted);font-size:13px;margin-bottom:18px} #forum .jio-forum__breadcrumbs a{color:inherit} #forum .jio-forum__layout{display:grid;grid-template-columns:minmax(0,1fr) 286px;gap:24px;align-items:start} #forum .jio-forum__main{min-width:0} -#forum .jio-forum__hero,#forum .jio-forum__page-head{padding:20px 0;border-bottom:1px solid var(--forum-line)} +#forum .jio-forum__page-head{padding:20px 0;border-bottom:1px solid var(--forum-line)} #forum h1{font-size:27px;line-height:1.25;margin:0 0 10px} -#forum .jio-forum__hero p,#forum .jio-forum__page-head p{margin:0;color:var(--forum-muted)} +#forum .jio-forum__page-head p{margin:0;color:var(--forum-muted)} +#forum .jio-forum__aside{border-left:1px solid var(--forum-line);padding-left:20px} +#forum .jio-forum__new,#forum .jio-forum__primary{display:inline-flex;align-items:center;justify-content:center;background:var(--forum-accent);color:#fff;border:0;border-radius:4px;min-height:40px;padding:8px 16px;cursor:pointer} +#forum .jio-forum__new{width:100%} +#forum .jio-forum__aside-section{padding:22px 0;border-bottom:1px solid var(--forum-line)} +#forum .jio-forum__aside-section h2{font-size:16px;margin:0 0 12px} +#forum .jio-forum__aside-section a{display:block;padding:6px 0;color:var(--forum-ink)} +#forum .jio-forum__widget-link{display:flex;justify-content:space-between;gap:10px;padding:7px 0;color:var(--forum-ink)} +#forum .jio-forum__widget-link span{color:var(--forum-muted)} + +/* 版块 / 分类列表页的固定栏目条 */ #forum .jio-forum__tabs{display:flex;gap:26px;overflow:auto;white-space:nowrap;border-bottom:1px solid var(--forum-line);margin-bottom:16px} #forum .jio-forum__tabs a{padding:14px 0;color:var(--forum-muted);border-bottom:2px solid transparent} #forum .jio-forum__tabs .is-active{color:var(--forum-accent);border-color:var(--forum-accent);font-weight:600} -#forum .jio-forum__chips{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0} -#forum .jio-forum__chips a,#forum .jio-forum__badge,#forum .jio-forum__badges a,#forum .jio-forum__badges span{padding:4px 8px;background:#f1f5f7;color:#48717c;border-radius:4px;font-size:12px} -#forum .jio-forum__post{display:flex;gap:13px;padding:20px 2px;border-bottom:1px solid var(--forum-line)} -#forum .jio-forum__avatar{flex:0 0 44px}#forum .jio-forum__avatar img{width:44px;height:44px;border-radius:50%} -#forum .jio-forum__post-body{min-width:0;flex:1}#forum .jio-forum__post-top{display:flex;gap:12px;color:var(--forum-muted);font-size:12px} -#forum .jio-forum__post h2{font-size:17px;line-height:1.45;margin:7px 0}#forum .jio-forum__post h2 a{color:var(--forum-ink)} -#forum .jio-forum__post p{color:var(--forum-muted);font-size:14px;line-height:1.6;margin:0 0 10px} -#forum .jio-forum__post-meta{display:flex;align-items:center;gap:10px;color:var(--forum-muted);font-size:12px;flex-wrap:wrap} -#forum .jio-forum__post-meta a{color:var(--forum-accent)} -#forum .jio-forum__aside{border-left:1px solid var(--forum-line);padding-left:20px} -#forum .jio-forum__new,#forum .jio-forum__primary{display:inline-flex;align-items:center;justify-content:center;background:var(--forum-accent);color:#fff;border:0;border-radius:4px;min-height:40px;padding:8px 16px;cursor:pointer} -#forum .jio-forum__new{width:100%}#forum .jio-forum__aside-section{padding:22px 0;border-bottom:1px solid var(--forum-line)} -#forum .jio-forum__aside-section h2{font-size:16px;margin:0 0 12px}#forum .jio-forum__aside-section a{display:block;padding:6px 0;color:var(--forum-ink)} -#forum .jio-forum__plates{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px} -#forum .jio-forum__plate{display:flex;gap:13px;padding:14px;border:1px solid var(--forum-line);border-radius:6px} -#forum .jio-forum__plate-cover{width:80px;height:80px;flex:none;background:#edf2f5;border-radius:5px;overflow:hidden} -#forum .jio-forum__plate-cover img{width:100%;height:100%;object-fit:cover}#forum .jio-forum__plate h2{font-size:16px;margin:3px 0 8px} -#forum .jio-forum__plate p{font-size:13px;color:var(--forum-muted);margin:0} -#forum .jio-forum__single{padding:20px 0}#forum .jio-forum__single-meta{display:flex;align-items:center;gap:10px;color:var(--forum-muted);font-size:13px} -#forum .jio-forum__single-meta img{border-radius:50%}#forum .jio-forum__single-head h1{margin:18px 0} + +/* ── 论坛首页:栏目 TAB ─────────────────────────────────────────── */ +#forum.forum-home{padding-bottom:40px} +.forum-home .forum-home__main{min-width:0} +.forum-home-tab .fixed-wrap-nav{margin-bottom:10px} +.forum-home-tab .tab-nav-theme{border-bottom:none;padding:0;margin:0} +.forum-home-tab .tab-nav-theme li{padding:0 2px} +.forum-home-tab .tab-nav-theme li > a{display:block;padding:10px 12px;font-size:16px;color:var(--muted-2-color)} +.forum-home-tab .tab-nav-theme li.active > a{color:var(--focus-color);font-weight:600} +.forum-home-tab .tab-content > .tab-pane{display:none} +.forum-home-tab .tab-content > .tab-pane.active{display:block} +.forum-main-tab-content{min-height:120px} +.forum-more{padding:20px 0;text-align:center} +.forum-more.is-loading{display:none} +.forum-tab-pane > .ajax-item:last-of-type{margin-bottom:0} +/* 首页栏目是横向 TAB,覆盖通用 .fixed-wrap 的竖排侧栏导航形态 */ +@media (min-width:768px){ + .forum-home-tab{--fixed-width:auto} + .forum-home-tab > .fixed-wrap-nav{position:static;width:auto} + .forum-home-tab > .fixed-wrap-nav + .fixed-wrap-content{margin-left:0} + .forum-home-tab .fixed-wrap-nav.affix{position:sticky;left:auto;right:auto;width:auto;z-index:11;background:var(--main-bg-color);box-shadow:0 0 10px var(--main-shadow)} + .forum-home-tab .tab-nav-theme.mini-scrollbar, + .forum-home-tab .tab-nav-theme.swiper-scroll .swiper-wrapper{flex-direction:row;overflow-x:auto;overflow-y:hidden;text-align:left;white-space:nowrap;border-bottom:none;margin:0;padding:0} + .forum-home-tab .tab-nav-theme.mini-scrollbar > li, + .forum-home-tab .tab-nav-theme.swiper-scroll .swiper-wrapper > li{display:inline-block;padding:0;margin:0} +} +.quick-posts-box{border-radius:var(--main-radius);padding:15px} +.quick-posts-box .title-theme{margin-bottom:10px} +.forum-home .jio-widget-box{clear:both;background-color:var(--main-bg-color);padding:15px;box-shadow:0 0 10px var(--main-shadow);border-radius:var(--main-radius);margin-bottom:20px} +.forum-home .jio-widget-box .btn-block{display:block;width:100%;text-align:center} +.forum-home .jio-widget-box .title-theme{font-size:15px;font-weight:600} +.quick-posts-form .form-control{width:100%} +.quick-posts-form select.form-control{width:auto;min-width:140px} +.quick-posts-form .jio-forum__message:empty{display:none} +.forum-pending-plate{background:var(--main-bg-color);box-shadow:0 0 10px var(--main-shadow);border-radius:var(--main-radius);padding:12px 15px;margin-bottom:10px} + +/* ── 版块面板 / 版块卡片 ────────────────────────────────────────── */ +.panel.panel-plate{border-color:transparent;margin-bottom:10px;background:var(--main-bg-color);border-radius:var(--main-radius);box-shadow:0 0 10px var(--main-shadow);padding:0 15px} +.panel.panel-plate:first-of-type .panel-title{padding-top:10px} +.panel-plate .title-theme{height:24px;display:flex;align-items:center;font-size:15px;font-weight:600} +.panel-plate .panel-title{padding:10px 0;margin:0} +.panel-plate .panel-title, +.panel-plate .panel-title > a{color:var(--key-color)} +.panel-plate .panel-title > a{text-decoration:none} +.panel-plate .plate-lists{padding:0 0 10px} +.panel-plate .fa{transition:.2s} +.panel-plate .collapsed .fa-angle-up{transform:scaleY(-100%)} +.panel-plate .follow-plate{display:inline-block;max-width:100%} +.plate-add{display:inline-flex;align-items:center;font-size:12px} +.plate-card{display:inline-block;text-align:center} +.plate-card .title{color:var(--main-color);font-size:13px;font-weight:500} +.scroll-plate .plate-card{padding:15px 10px 8px;width:115px;border-radius:var(--main-radius);box-shadow:0 0 10px var(--main-shadow);background:var(--main-bg-color)} +.scroll-plate .plate-card.mini{padding:15px 5px;width:85px} +.scroll-plate .plate-card .plate-thumb{width:50px!important;height:50px!important} +.follow-plate .plate-card{width:90px} +.plate-item{display:inline-flex;align-items:flex-start} +.plate-lists{display:flex;align-content:flex-start;flex-flow:row wrap;margin:-3px} +.plate-lists .plate-item{margin:3px;background:var(--main-bg-color);box-shadow:0 0 10px var(--main-shadow);border-color:transparent;border-radius:var(--main-radius);padding:15px 20px;width:calc(50% - 6px);position:relative;box-sizing:border-box} +.plate-item .plate-thumb{margin-right:15px;flex-shrink:0;display:inline-block;width:60px;height:60px;position:relative} +.plate-item .plate-thumb > img,.plate-thumb > img{border-radius:100px;width:100%;height:100%} +.plate-item .forum-thumbnail{transition:all .2s;object-fit:cover;width:100%;height:100%} +.plate-item .item-info{display:flex;justify-content:space-between;flex-direction:column;flex:1;min-width:0} +.plate-item .count-mates,.plate-item .excerpt{margin-top:6px;color:var(--muted-color);min-height:1em} +.plate-item .count-mates{color:var(--muted-2-color);font-size:12px} +.plate-item .excerpt:hover,.forum-title a:hover{color:var(--key-color)} +.count-mates item{display:inline-block} +.count-mates icon,.count-mates text{margin-right:2px} +.plate-thumb{flex-shrink:0;display:inline-block;width:60px;height:60px;position:relative} +.forum-title{font-size:16px;padding:0;margin:0;line-height:1.5} +.btn-follow,.btn-follow:visited{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;cursor:pointer} +.active.jb-pink{--this-bg:rgba(27,145,255,.1);--this-color:#3097f8} + +/* ── 帖子卡片 ──────────────────────────────────────────────────── */ +.forum-posts{--this-padding:15px 20px;padding:var(--this-padding);display:flex;transition:.3s;position:relative} +.forum-posts.mini .avatar-img{--this-size:50px} +.forum-posts.manage .badge-status{right:3em} +.forum-posts + .forum-posts{border-top:1px solid var(--main-border-color)} +.forum-posts + .post_ajax_loader > .mb20,.forum-posts + .ajax-pag{padding-top:30px;border-top:1px solid var(--main-border-color)} +.forum-posts + .theme-pagination{margin-top:0} +.forum-posts .entry-info{flex-grow:1;min-width:0} +.forum-posts.mini .entry-info{max-width:calc(100% - 70px)} +.forum-posts .forum-title{font-weight:500} +.forum-posts .forum-title badge{font-weight:normal} +.forum-posts .forum-title > a,.forum-posts .content{line-height:22px} +.forum-posts .forum-title > a.text-ellipsis{line-height:2.5em;display:block;margin-top:-.5em} +.forum-posts .item-meta{color:var(--muted-color);opacity:.6;transition:opacity .15s} +.forum-posts:hover .item-meta{opacity:1} +.forum-posts .meta-right item{margin-left:15px} +.forum-posts.detail{display:block} +.forum-posts.detail .user-info + .badge-status{top:46px} +.forum-posts.detail .content{overflow:hidden} +.forum-posts.detail .content .excerpt{display:block} +.forum-posts.detail .but-plate .icon{color:var(--focus-color)} +.forum-posts.detail .action-meta{margin-right:-7px} +.forum-posts.detail .but-plate{margin:3px 0} +.forum-posts.detail .action-meta .item{color:var(--muted-color);margin-left:5px;padding:2px 8px;font-size:20px;transition:.15s;border-radius:4px;display:inline-flex;align-items:center;border:0;background:none;cursor:pointer} +.forum-posts.detail .action-meta .btn-score{font-size:20px;display:inline-flex;align-items:center;color:var(--muted-color);padding:2px;border-radius:4px} +.forum-posts.detail .action-meta > .item.active{color:var(--focus-color)} +.forum-posts.detail .action-meta text{font-size:12px;margin-left:2px;min-width:14px;color:var(--muted-color);text-align:center} +.forum-posts.detail .plate-null + .action-meta{flex:auto;justify-content:flex-end} +.forum-posts .hot-comment .avatar-img,.forum-posts.detail .hot-comment .avatar-img{--this-size:22px;margin-right:6px} +.forum-posts .hot-comment{background:var(--muted-border-color);border-radius:var(--main-radius);padding:8px 10px;font-size:13px;color:var(--muted-color)} +.forum-posts .hot-comment .comment-content img:not(.smilie-icon){max-width:200px;max-height:200px;display:block;width:auto;height:auto} +.forum-posts.alone{border:none!important;background:var(--main-bg-color);border-radius:var(--main-radius);margin-bottom:10px;--this-padding:20px 26px} +.forum-posts.alone + .post_ajax_loader > .mb20,.forum-posts.alone + .ajax-pag{border-top:none;padding:20px 0 30px;margin:0} +.forum-posts .hide-post{margin-top:6px;padding:10px 12px;background:var(--muted-border-color);border-radius:var(--main-radius);color:var(--muted-color);font-size:13px} +.forum-posts .lists-imgs{margin-top:6px} +.lists-imgs:not(.count-1){display:flex;flex-wrap:wrap;--img-count:4;max-width:650px} +.lists-imgs:not(.count-1) > span{flex:0 0 calc(100% / var(--img-count) - 4px);padding-bottom:calc(100% / var(--img-count) - 4px);margin:2px;position:relative;border-radius:4px;overflow:hidden} +.lists-imgs.count-2{--img-count:3} +.lists-imgs:not(.count-1) > span > img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover} +.lists-imgs.count-1 img{max-width:300px;max-height:300px;width:auto;height:auto;border-radius:4px} +.lists-imgs-more{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.45);color:#fff;font-size:18px;font-weight:600} +.forum-posts .badge-status{position:absolute;right:0;top:0} +#forum .badg.but-plate,#forum .but.but-plate{font-size:12px;border-radius:100px;padding:3px 10px;vertical-align:.1em;display:inline-flex;align-items:center;text-decoration:none} +.badge-question{border-radius:.45em 2px;padding:0 .25em;line-height:1.4em} +.badge-question > text{font-size:.8em;margin-left:2px;vertical-align:.05em} + +/* ── 首页 / 列表响应式 ─────────────────────────────────────────── */ +@media (min-width:641px){ + .forum-posts.mini:hover{background:var(--muted-border-color)} + .forum-posts.detail .avatar-img{--this-size:55px;margin-right:5px} + .forum-posts.detail .user-info + *,.forum-posts.detail .user-info .user-right{margin-top:-12px} + .forum-posts.detail .user-info ~ *{margin-left:70px} + .forum-posts.detail .user-info .display-name{font-size:16px} + .forum-posts.detail .action-meta .btn-score:hover,.forum-posts.detail .action-meta a.item:hover{background:var(--main-border-color)} +} +@media(max-width:800px){ + #forum .jio-forum__layout{grid-template-columns:1fr} + #forum .jio-forum__aside{border-left:0;padding-left:0} + .forum-home .sidebar{width:100%;margin-left:0;margin-top:20px} + .forum-home .content-layout{margin-right:0!important;margin-left:0!important} +} +@media (max-width: 767px){ + .forum-home-tab .fixed-wrap-nav:not(.affix):not(.affix-bottom){margin-bottom:10px;padding:0 5px;background:transparent;box-shadow:none} + .forum-home-tab .tab-nav-theme li > a{font-size:15px;padding:8px 10px} +} +@media (max-width: 640px){ + .plate-lists .plate-item{width:calc(100% - 6px);padding:15px 12px;align-items:center} + .plate-item .plate-thumb{width:40px;height:40px;margin-right:10px} + .plate-item .excerpt{display:none} + .plate-item .forum-title{font-size:13px} + .follow-plate .plate-card{width:60px} + .follow-plate .plate-card .title{font-size:12px} + .forum-posts,.forum-posts.alone{--this-padding:12px 0} + .forum-posts.mini{flex-direction:column} + .forum-posts.mini .forum-user{display:flex;align-items:center;margin-bottom:8px} + .forum-posts.mini .entry-info{max-width:100%} + .forum-posts.mini .item-meta{margin-top:6px} + .forum-posts.mini .item-meta item{margin-left:8px} + .forum-posts.mini .item-meta .meta-left{margin-left:-5px} + .forum-posts .forum-title > a.text-ellipsis{line-height:22px;font-size:15px;display:block;overflow:unset;text-overflow:unset;white-space:unset;margin:0} + .forum-posts.mini .avatar-img{--this-size:22px;margin-top:-3px} + .forum-posts.detail .action-meta > .item{margin:0} + .forum-posts.detail .user-info ~ *{margin-left:0} + .forum-posts.detail .avatar-img{--this-size:38px} + .lists-imgs.count-3{--img-count:3} + .lists-imgs.count-2,.lists-imgs.count-4{--img-count:2} +@media(max-width:480px){ + #forum .jio-forum__wrap{width:calc(100% - 24px)} + #forum h1{font-size:23px} + #forum .jio-forum__tabs{gap:18px} + .forum-home-tab .tab-nav-theme li > a{font-size:14px;padding:8px} + .forum-posts .action-meta text{display:none} + .quick-posts-form select.form-control{width:100%} +} + +/* ── 帖子详情 / 回复 / 编辑器 ──────────────────────────────────── */ +#forum .jio-forum__single{padding:20px 0} +#forum .jio-forum__single-meta{display:flex;align-items:center;gap:10px;color:var(--forum-muted);font-size:13px} +#forum .jio-forum__single-meta img{border-radius:50%} +#forum .jio-forum__single-head h1{margin:18px 0} #forum .jio-forum__badges,#forum .jio-forum__actions{display:flex;gap:8px;flex-wrap:wrap} #forum .jio-forum__single-content{font-size:15px;line-height:1.8;padding:22px 0;overflow-wrap:anywhere} #forum .jio-forum__actions{border-top:1px solid var(--forum-line);padding:16px 0} #forum .jio-forum__action{border:1px solid var(--forum-line);border-radius:4px;background:transparent;color:var(--forum-muted);padding:7px 12px;cursor:pointer} #forum .jio-forum__action:hover{color:var(--forum-accent);border-color:var(--forum-accent)} -#forum .jio-forum__form{display:grid;gap:15px;margin:20px 0}#forum .jio-forum__form label{display:grid;gap:6px;font-size:14px;font-weight:600} +#forum .jio-forum__form{display:grid;gap:15px;margin:20px 0} +#forum .jio-forum__form label{display:grid;gap:6px;font-size:14px;font-weight:600} #forum .jio-forum__form input,#forum .jio-forum__form select,#forum .jio-forum__form textarea{width:100%;border:1px solid #d6dce1;border-radius:4px;padding:10px 12px;background:var(--body-bg,#fff);color:inherit;font:inherit} -#forum .jio-forum__form-extra[hidden]{display:none}#forum .jio-forum__message{color:#b64343;min-height:20px} -#forum .jio-forum__vote{border-top:1px solid var(--forum-line);padding:20px 0}#forum .jio-forum__vote h2{font-size:17px} +#forum .jio-forum__form-extra[hidden]{display:none} +#forum .jio-forum__message{color:#b64343;min-height:20px} +#forum .jio-forum__vote{border-top:1px solid var(--forum-line);padding:20px 0} +#forum .jio-forum__vote h2{font-size:17px} #forum .jio-forum__vote label{display:flex;gap:12px;padding:12px;border:1px solid var(--forum-line);margin-bottom:8px;border-radius:4px} -#forum .jio-forum__vote-count{margin-left:auto}#forum .jio-forum__locked{padding:30px;text-align:center;background:#f7f9fa} +#forum .jio-forum__vote-count{margin-left:auto} +#forum .jio-forum__locked{padding:30px;text-align:center;background:#f7f9fa} #forum .jio-forum__pagination ul{list-style:none;display:flex;gap:7px;padding:0;margin:24px 0} #forum .jio-forum__pagination a,#forum .jio-forum__pagination span{display:block;padding:6px 10px;border:1px solid var(--forum-line);border-radius:4px} #forum .jio-forum__empty{padding:36px;text-align:center;color:var(--forum-muted)} -@media(max-width:800px){#forum .jio-forum__layout{grid-template-columns:1fr}#forum .jio-forum__aside{border-left:0;padding-left:0}#forum .jio-forum__plates{grid-template-columns:1fr}} -@media(max-width:480px){#forum .jio-forum__wrap{width:calc(100% - 24px)}#forum h1{font-size:23px}#forum .jio-forum__post{padding:16px 0}#forum .jio-forum__tabs{gap:18px}} -#forum .jio-forum__create-plate{width:100%;margin-top:10px} +#forum .jio-forum__badge,#forum .jio-forum__badges a,#forum .jio-forum__badges span{padding:4px 8px;background:#f1f5f7;color:#48717c;border-radius:4px;font-size:12px} #forum .jio-forum__section-title{font-size:18px;margin:28px 0 0} #forum .jio-forum__reply{display:flex;gap:12px;padding:17px 0;border-bottom:1px solid var(--forum-line)} #forum .jio-forum__reply-avatar img{border-radius:50%} #forum .jio-forum__reply-main{flex:1;min-width:0} #forum .jio-forum__reply-head{display:flex;gap:12px;align-items:center;font-size:13px} -#forum .jio-forum__reply-head time{color:var(--forum-muted)}#forum .jio-forum__reply-head strong{color:#147e70} +#forum .jio-forum__reply-head time{color:var(--forum-muted)} +#forum .jio-forum__reply-head strong{color:#147e70} #forum .jio-forum__reply-text{padding:10px 0;line-height:1.7;overflow-wrap:anywhere} #forum .jio-forum__reply-actions button{border:0;background:none;color:var(--forum-accent);padding:4px 10px 4px 0;cursor:pointer} #forum .jio-forum__reply-form{display:grid;gap:12px;margin:24px 0} #forum .jio-forum__reply-form h3{font-size:17px;margin:0} #forum .jio-forum__reply-form textarea{width:100%;border:1px solid var(--forum-line);padding:12px;border-radius:4px;background:var(--body-bg,#fff);color:inherit} #forum .jio-forum__reply-form button{justify-self:start} -#forum .jio-forum__widget-link{display:flex;justify-content:space-between;gap:10px;padding:7px 0;color:var(--forum-ink)} -#forum .jio-forum__widget-link span{color:var(--forum-muted)} +#forum .jio-forum__reply-parent{color:var(--forum-muted);font-size:12px;margin:8px 0 0} +#forum .jio-forum__editor-tools{display:flex;gap:8px;flex-wrap:wrap} +#forum .wp-editor-wrap{border:1px solid var(--forum-line)} +#forum .jio-forum__applications{margin:18px 0;padding:14px 0;border-top:1px solid var(--forum-line)} +#forum .jio-forum__applications h2{font-size:16px;margin:0 0 8px} +#forum .jio-forum__application{display:flex;align-items:center;gap:10px;padding:6px 0} +#forum .jio-forum__application button{border:1px solid var(--forum-line);border-radius:4px;background:transparent;padding:4px 9px;cursor:pointer} + +/* ── 弹窗 / 用户面板 ──────────────────────────────────────────── */ .jio-forum__dialog{width:min(440px,calc(100% - 28px));max-height:90vh;border:1px solid #dce2e5;border-radius:6px;padding:22px;background:var(--body-bg,#fff);color:inherit;box-shadow:0 20px 60px #0003} .jio-forum__dialog::backdrop{background:#10182088} .jio-forum__dialog h2{font-size:20px;margin:0 0 18px;overflow-wrap:anywhere} @@ -72,29 +247,12 @@ .jio-forum__qr{width:180px;height:180px;margin:auto} .jio-forum__user-panel h2{font-size:18px;margin:0 0 14px} .jio-forum__user-row{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid #e6e9eb} -#forum .jio-forum__applications{margin:18px 0;padding:14px 0;border-top:1px solid var(--forum-line)} -#forum .jio-forum__applications h2{font-size:16px;margin:0 0 8px} -#forum .jio-forum__application{display:flex;align-items:center;gap:10px;padding:6px 0} -#forum .jio-forum__application button{border:1px solid var(--forum-line);border-radius:4px;background:transparent;padding:4px 9px;cursor:pointer} -#forum .jio-forum__reply-parent{color:var(--forum-muted);font-size:12px;margin:8px 0 0} -#forum .jio-forum__hot-reply{margin:0 0 10px 58px;padding:9px 12px;background:#f5f8f9;color:var(--forum-muted);font-size:13px;border-radius:4px} -#forum .jio-forum__pending{padding:16px 0;border-bottom:1px solid var(--forum-line)} -#forum .jio-forum__pending h2{font-size:16px;margin:0 0 10px} -#forum .jio-forum__pending>div{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0} -#forum .jio-forum__pending button{border:1px solid var(--forum-line);background:transparent;border-radius:4px;padding:5px 9px;cursor:pointer} -#forum .jio-forum__editor-tools{display:flex;gap:8px;flex-wrap:wrap} -#forum .wp-editor-wrap{border:1px solid var(--forum-line)} -body.dark-theme #forum .jio-forum__chips a,body.dark-theme #forum .jio-forum__badge,body.dark-theme #forum .jio-forum__badges a,body.dark-theme #forum .jio-forum__badges span{background:var(--muted-bg-2-color);color:var(--forum-accent)} -body.dark-theme #forum .jio-forum__plate-cover{background:var(--muted-bg-2-color)} -body.dark-theme #forum .jio-forum__locked,body.dark-theme #forum .jio-forum__hot-reply{background:var(--muted-bg-2-color)} + +/* ── 深色主题 ─────────────────────────────────────────────────── */ +body.dark-theme #forum .jio-forum__badge,body.dark-theme #forum .jio-forum__badges a,body.dark-theme #forum .jio-forum__badges span{background:var(--muted-bg-2-color);color:var(--forum-accent)} +body.dark-theme #forum .jio-forum__locked,body.dark-theme #forum .forum-posts .hot-comment,body.dark-theme #forum .forum-posts .hide-post{background:var(--muted-bg-2-color)} body.dark-theme #forum .jio-forum__form input,body.dark-theme #forum .jio-forum__form select,body.dark-theme #forum .jio-forum__form textarea,body.dark-theme #forum .jio-forum__reply-form textarea{background:var(--main-bg-color);border-color:var(--forum-line);color:var(--forum-ink)} body.dark-theme .jio-forum__dialog{background:var(--main-bg-color);color:var(--key-color);border-color:var(--muted-4-color)} body.dark-theme .jio-forum__dialog input,body.dark-theme .jio-forum__dialog select,body.dark-theme .jio-forum__dialog textarea{background:var(--main-bg-color);color:var(--key-color);border-color:var(--muted-4-color)} body.dark-theme #forum .jio-forum__action{color:var(--forum-muted)} -#forum .jio-forum__term-management{margin:16px 0;padding:16px 0;border-bottom:1px solid var(--forum-line)} -#forum .jio-forum__term-management h2{font-size:16px} -#forum .jio-forum__term-management form{display:flex;gap:8px;align-items:end;flex-wrap:wrap} -#forum .jio-forum__term-management label{display:grid;gap:5px;font-size:13px} -#forum .jio-forum__term-management input,#forum .jio-forum__term-management select{min-height:34px;padding:5px 8px;border:1px solid var(--forum-line);border-radius:4px;background:var(--main-bg-color);color:var(--forum-ink)} -#forum .jio-forum__term-row{display:flex;gap:8px;align-items:center;padding:5px 0} -#forum .jio-forum__term-row button{border:1px solid var(--forum-line);border-radius:4px;background:transparent;padding:4px 7px;cursor:pointer} +body.dark-theme .panel.panel-plate,body.dark-theme .plate-lists .plate-item,body.dark-theme .forum-posts.alone,body.dark-theme .scroll-plate .plate-card{background:var(--main-bg-color)} diff --git a/assets/js/forum-runtime.js b/assets/js/forum-runtime.js index d88c5e4b..df947eff 100644 --- a/assets/js/forum-runtime.js +++ b/assets/js/forum-runtime.js @@ -23,8 +23,7 @@ else if (value) window.alert(value) } - const modal = (title, fields, submitText = '确认') => new Promise((resolve) => { - const dialog = document.createElement('dialog') + const modal = (title, fields, submitText = '确认') => new Promise((resolve) => { const dialog = document.createElement('dialog') dialog.className = 'jio-forum__dialog' const form = document.createElement('form') form.innerHTML = '
' @@ -172,7 +171,13 @@ return } const open = event.target.closest('[data-forum-open]') - if (open) { root.querySelector(`[data-forum-dialog="${open.dataset.forumOpen}"]`)?.showModal(); return } + if (open) { + const dialog = root.querySelector(`[data-forum-dialog="${open.dataset.forumOpen}"]`) + const category = dialog?.querySelector('select[name="category_id"]') + if (category && open.dataset.category) category.value = open.dataset.category + dialog?.showModal() + return + } const close = event.target.closest('[data-forum-close]') if (close) { close.closest('dialog')?.close(); return } const reply = event.target.closest('[data-forum-reply-to]') @@ -193,7 +198,7 @@ if (action === 'plate-unlock') { await checkout('plate', id); return } if (action === 'plate-audit') { result = await send(`plates/${id}/audit`, 'POST', { status: 'publish' }) - button.closest('.jio-forum__pending > div')?.remove() + button.closest('.forum-pending-plate')?.remove() } else if (action === 'plate-delete') { const data = await modal('删除版块', [ { name: 'posts_action', label: '关联帖子', type: 'select', options: [{ value: 'trash', label: '一并移入回收站' }, { value: 'move', label: '移动到其他版块' }] }, @@ -213,16 +218,6 @@ if (!window.confirm('确定删除此回复?')) return result = await send(`replies/${id}/delete`, 'POST') button.closest('.jio-forum__reply')?.remove() - } else if (action === 'term-edit') { - const name = button.closest('.jio-forum__term-row')?.querySelector('span')?.textContent || '' - const data = await modal('编辑分类', [{ name: 'name', label: '名称', value: name }], '保存') - if (!data) return - result = await send(`terms/${id}`, 'PATCH', data) - button.closest('.jio-forum__term-row').querySelector('span').textContent = data.name - } else if (action === 'term-delete') { - if (!window.confirm('确定删除这个分类?')) return - result = await send(`terms/${id}`, 'DELETE') - button.closest('.jio-forum__term-row')?.remove() } else if (action === 'follow') { try { result = await send(`plates/${id}/follow`, 'POST') } catch (error) { if (error.message.includes('付费')) { await checkout('plate', id); return } throw error } @@ -254,7 +249,17 @@ button.dataset.forumAction = 'restore' button.textContent = '撤销删除' } else if (action === 'adopt' || action === 'audit') window.location.reload() - else button.textContent = result.data?.label || result.message || button.textContent + else if (action === 'follow') { + const following = result.data?.following === true + button.classList.toggle('active', following) + const label = button.querySelector('text') + if (label) label.textContent = following ? '已关注' : '关注' + else button.textContent = result.data?.label || button.textContent + } else if (button.querySelector('text')) { + button.querySelector('text').textContent = result.data?.label || result.message || button.querySelector('text').textContent + } else { + button.textContent = result.data?.label || result.message || button.textContent + } message(button, result.message || '') } catch (error) { message(button, error.message) @@ -263,4 +268,86 @@ button.disabled = false } }) + + // 论坛首页栏目:点击切换 + 懒加载该栏目的 ajaxpager 内容 + const refresh = (pane) => { + if (typeof window.auto_fun === 'function') window.auto_fun() + if (typeof window.jioInitForumMedia === 'function') window.jioInitForumMedia(pane) + } + + const loadTab = async (pane, href) => { + if (!pane || pane.dataset.loaded === '1' || pane.dataset.loading === '1') return + pane.dataset.loading = '1' + pane.querySelector('.post_ajax_loader')?.classList.add('is-loading') + try { + const response = await fetch(href, { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } }) + if (!response.ok) throw new Error('加载失败') + const doc = new DOMParser().parseFromString(await response.text(), 'text/html') + const source = doc.getElementById(pane.id) + if (!source) throw new Error('内容不存在') + pane.innerHTML = source.innerHTML + pane.dataset.loaded = '1' + refresh(pane) + } catch (error) { + pane.querySelector('.post_ajax_loader')?.classList.remove('is-loading') + message(pane, error.message) + } finally { + pane.dataset.loading = '' + } + } + + const loadMore = async (link, pane) => { + if (pane.dataset.loading === '1') return + pane.dataset.loading = '1' + const more = link.closest('.forum-more') + const loader = [...pane.children].find((item) => item.classList.contains('post_ajax_loader')) + more?.classList.add('is-loading') + loader?.classList.add('is-loading') + try { + const response = await fetch(link.getAttribute('href'), { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } }) + if (!response.ok) throw new Error('加载失败') + const doc = new DOMParser().parseFromString(await response.text(), 'text/html') + const source = doc.getElementById(pane.id) + if (!source) throw new Error('内容不存在') + const anchor = more || null + const incoming = [...source.children].filter((item) => !item.classList.contains('forum-tab-pane') && !item.classList.contains('forum-more') && !item.classList.contains('post_ajax_loader')) + incoming.forEach((item) => pane.insertBefore(item, anchor)) + const next = source.querySelector('[data-forum-more]') + if (next && anchor) anchor.querySelector('[data-forum-more]')?.setAttribute('href', next.getAttribute('href')) + else anchor?.remove() + refresh(pane) + } catch (error) { + message(pane, error.message) + } finally { + pane.dataset.loading = '' + more?.classList.remove('is-loading') + loader?.classList.remove('is-loading') + } + } + + root.addEventListener('click', (event) => { + const tab = event.target.closest('[data-forum-tab]') + if (tab) { + event.preventDefault() + const target = tab.getAttribute('data-forum-tab') + const pane = root.querySelector(target) + root.querySelectorAll('[data-forum-tab]').forEach((link) => link.closest('li')?.classList.toggle('active', link === tab)) + root.querySelectorAll('.forum-tab-pane').forEach((item) => { + const current = `#${item.id}` === target + item.classList.toggle('active', current) + item.classList.toggle('in', current) + }) + if (pane) { + loadTab(pane, pane.dataset.href || tab.getAttribute('href')) + if (pane.dataset.href && window.history?.replaceState) window.history.replaceState(null, document.title, pane.dataset.href) + } + return + } + const more = event.target.closest('[data-forum-more]') + if (more) { + event.preventDefault() + const pane = more.closest('.forum-tab-pane') + if (pane) loadMore(more, pane) + } + }) })() diff --git a/search.php b/search.php index 90cc2f30..40ae48d3 100644 --- a/search.php +++ b/search.php @@ -132,12 +132,12 @@ if (is_active_sidebar('all_top_fluid') || is_active_sidebar('search_top_fluid')) } ?> have_posts()) : ?> -登录后即可快速发布' . esc_html(self::post_name()) . '
登录