测试列表:摇一摇全屏浮层、每测试专属图标、分组色底板、头像堆、战报三行;测试页左上只留「测一测」(v26110294)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-11-04 03:13:33 +00:00
parent 7b23d9b60b
commit 9e7587a85c
9 changed files with 180 additions and 49 deletions

View File

@@ -250,7 +250,7 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
<div id="scroll">
<header class="bar" id="bar">
<button class="back" id="back" aria-label="返回"><svg class="ic"><use href="#i-back"/></svg></button>
<span class="t">孕妈广场 · 测一测</span>
<span class="t">测一测</span>
</header>
<!-- ① 开始(11-03 参考图版:居中、一屏放下) -->
@@ -320,8 +320,8 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
</div>
<div class="toast" id="toast"></div>
<script src="meta.js?v=26110293"></script>
<script src="tests.js?v=26110293"></script>
<script src="meta.js?v=26110294"></script>
<script src="tests.js?v=26110294"></script>
<script>
(function () {
'use strict';

View File

@@ -242,6 +242,75 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
.ck .ct{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:8px 8px 0;min-height:2.8em;font-size:12.5px;font-weight:700;line-height:1.4;color:#3A3040}
.c2 .ck .ct{font-size:13.5px}
.ck .cnn{display:inline-flex;align-items:center;justify-content:center;gap:2px;margin:4px 0 9px;font-size:11px;font-weight:800;color:#F0704F}
/* 11-04 用户:「背景太单一、行图标都一样、加头像、整体 UI 太单一」→ 每组一块分组色底板(带淡图案 + 大号分组水印),行图标按测试各不相同、底色三档深浅,卡片 / 行 / 组标题都挂头像堆 */
.csg{position:relative;margin:22px -4px 0;padding:16px 10px 14px;border-radius:22px;background:var(--gb);overflow:hidden}
.csg::before{content:"";position:absolute;inset:0;background-image:radial-gradient(var(--gd) 1.2px,transparent 1.4px);background-size:16px 16px;opacity:.55;pointer-events:none}
.csg>*{position:relative}
.csg.g-quiz{--gb:linear-gradient(170deg,#FFEDE2,#FFF6F0 40%,#FFF1E8);--gd:#FFD2BC}
.csg.g-psy{--gb:linear-gradient(170deg,#EFE8FF,#F8F5FF 40%,#F1EBFF);--gd:#DCCFF7}
.csg.g-game{--gb:linear-gradient(170deg,#E2F6EA,#F3FBF6 40%,#E6F7EE);--gd:#BFE7D0}
.csg.g-shop{--gb:linear-gradient(170deg,#E3EEFF,#F4F8FF 40%,#E8F1FF);--gd:#C7DBFA}
.csg>.csg-deco{position:absolute;right:-14px;top:-18px;width:96px;height:96px;border-radius:30px;background:var(--gi);opacity:.13;transform:rotate(14deg);display:grid;place-items:center}
.csg>.csg-deco svg{width:64px;height:64px}
.csg-h b{flex-wrap:wrap}
.csg-n{display:inline-flex;align-items:center;gap:4px;margin-left:auto;height:24px;padding:0 9px 0 4px;border-radius:99px;background:rgba(255,255,255,.75);font-size:11px;font-weight:800;color:var(--gi)}
.csg-n .cav img{width:18px;height:18px}
.cav{display:inline-flex;align-items:center;vertical-align:middle}
.cav img{width:16px;height:16px;border-radius:50%;object-fit:cover;border:1.5px solid #fff;background:#FFE3D3;margin-left:-5px}
.cav img:first-child{margin-left:0}
.ck .cnn .cav{margin-right:5px}
.csr-m small .cav{margin-left:8px}.csr-m small .cav+i{margin-left:4px}
.csr-i.s1{background:linear-gradient(135deg,var(--cb),var(--c4))}
.csr-i.s2{background:var(--c1);box-shadow:inset 0 0 0 1.5px var(--c3)}
.csr-i.s2 svg{fill:var(--cb)}.csr-i.s2 svg [fill="#fff"]{fill:var(--cb)}.csr-i.s2 svg [stroke="#fff"]{stroke:var(--cb)}
.csr-i svg{width:22px;height:22px}
.csr-i{border-radius:13px;transform:rotate(-4deg)}
.csr:nth-child(even) .csr-i{transform:rotate(4deg)}
.ck .cv .ck-wm{position:absolute;right:-8px;bottom:-6px;width:62px;height:62px;opacity:.22;transform:rotate(-12deg);pointer-events:none}
.ck .cv .ck-wm svg{width:100%;height:100%}
.ck .cv .ck-wm svg,.ck .cv .ck-wm svg [fill="#fff"]{fill:var(--cb)}.ck .cv .ck-wm svg [stroke="#fff"]{stroke:var(--cb)}
.csv-n{flex-wrap:nowrap}
.csv-av{margin-left:auto}
.csv-av .cav img{width:22px;height:22px;margin-left:-7px;transition:transform .22s,opacity .22s}
.csv-av .cav img:first-child{margin-left:0}
.csv-av .cav img.sw{transform:scale(.3);opacity:0}
.csv-r{height:90px !important}
.csv-i{opacity:0;transform:translateY(90px);transition:transform .5s cubic-bezier(.3,1.2,.5,1),opacity .45s ease !important;height:30px}
.csv-i img{width:22px !important;height:22px !important}
.csv-i:nth-child(odd) b{color:#F0704F}
/* 摇一摇全屏浮层 */
.lko{position:fixed;inset:0;z-index:9999;display:grid;place-items:center;pointer-events:auto}
.lko-bg{position:absolute;inset:0;background:radial-gradient(circle at 50% 42%,rgba(141,107,255,.55),rgba(40,20,80,.78));opacity:0;transition:opacity .25s;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.lko.on .lko-bg{opacity:1}
.lko-in{position:relative;display:flex;flex-direction:column;align-items:center;gap:14px;width:300px;transform:scale(.6);opacity:0;transition:transform .35s cubic-bezier(.3,1.5,.5,1),opacity .25s}
.lko.on .lko-in{transform:none;opacity:1}
.lko-dc{position:relative;width:170px;height:110px}
.lko-dc span{position:absolute;width:84px;height:84px;filter:drop-shadow(0 10px 14px rgba(20,0,60,.45));animation:lkoT .42s linear infinite}
.lko-dc span svg{width:100%;height:100%;display:block}
.lko-dc .a{left:6px;top:14px}.lko-dc .b{right:6px;top:0;width:66px;height:66px;animation-duration:.34s;animation-direction:reverse}
@keyframes lkoT{0%{transform:rotate(0) translateY(0)}25%{transform:rotate(90deg) translateY(-16px)}50%{transform:rotate(180deg)}75%{transform:rotate(270deg) translateY(-10px)}100%{transform:rotate(360deg)}}
.lko.hit .lko-dc span{animation:lkoLand .5s cubic-bezier(.3,1.7,.5,1)}
@keyframes lkoLand{from{transform:scale(1.35) rotate(-25deg)}to{transform:none}}
.lko-tip{margin:0;color:#fff;font-size:15px;font-weight:800;letter-spacing:2px;opacity:.9}
.lko.hit .lko-tip{font-size:24px;letter-spacing:3px;color:#FFE27A;opacity:1;animation:lkoLand .5s cubic-bezier(.3,1.7,.5,1)}
.lko-reel{width:100%;height:58px;border-radius:18px;background:rgba(255,255,255,.16);box-shadow:inset 0 0 0 2px rgba(255,255,255,.35);overflow:hidden;display:grid;place-items:center}
.lko-reel span{display:block;color:#fff;font-size:24px;font-weight:900;letter-spacing:1px;white-space:nowrap}
.lko-reel span.sp{animation:lkoSp .1s linear}
@keyframes lkoSp{from{transform:translateY(-90%);opacity:.2;filter:blur(2px)}}
.lko.hit .lko-reel{display:none}
.lko-card{width:100%}
.lko-card .ck{transform:scale(.5) rotate(-8deg);opacity:0;animation:lkoCard .55s .05s cubic-bezier(.3,1.5,.5,1) forwards;box-shadow:0 18px 40px -10px rgba(20,0,60,.6)}
@keyframes lkoCard{to{transform:none;opacity:1}}
.lko-card .ck .cv{height:auto;padding:26px 16px 20px;gap:8px}
.lko-card .ck .cv b{font-size:20px;-webkit-line-clamp:3}
.lko-card .ck .cv small{font-size:12.5px}
.lko-card .ck .cv em{height:32px;line-height:32px;padding:0 20px;font-size:14px}
.lko-card .lko-ic{display:grid;place-items:center;width:52px;height:52px;border-radius:16px;background:var(--cb);box-shadow:0 6px 14px -6px var(--cb);position:relative}
.lko-card .lko-ic svg{width:30px;height:30px}
.lko-fx{position:absolute;left:50%;top:50%;pointer-events:none}
.lko-fx i{position:absolute;width:9px;height:12px;border-radius:2px;animation:lkoBoom 1.3s cubic-bezier(.2,.7,.4,1) forwards}
@keyframes lkoBoom{from{transform:translate(0,0) rotate(0) scale(1);opacity:1}to{transform:translate(var(--x),calc(var(--y) + 180px)) rotate(var(--r)) scale(.6);opacity:0}}
@media (prefers-reduced-motion:reduce){.lko-dc span{animation:none}}
.ck .cnn svg{width:11px;height:11px}
.csr.pa,.ck.pa{--c1:#FFF4EA;--c2:#FFE4D6;--c3:#FFC9AE;--c4:#FFB08F;--cb:#FF8A65}
.csr.pb,.ck.pb{--c1:#F4F0FA;--c2:#E9E4F4;--c3:#B9AEDB;--c4:#E8D9EE;--cb:#8D84BE}
@@ -762,10 +831,10 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
<div id="sheet" role="dialog" aria-modal="true"><i class="sg"></i><div class="sbd" id="sbd"></div></div>
<div class="toast" id="toast"></div>
<script src="topics.js?v=26110293"></script>
<script src="data.js?v=26110293"></script>
<script src="feed.js?v=26110293"></script>
<script src="ceshi/meta.js?v=26110293"></script>
<script src="topics.js?v=26110294"></script>
<script src="data.js?v=26110294"></script>
<script src="feed.js?v=26110294"></script>
<script src="ceshi/meta.js?v=26110294"></script>
<script>
(function () {
'use strict';
@@ -831,7 +900,7 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
var CMD = null, CMERR = false;
/* 头像编码:数字 = av/NNNN.webp(旧代码头像);'av:c012' = av/c012.webp(卡通/可爱卡通);'/…' = 站内绝对路径(内置头像库 /_bridge/avatars/);其余 = assets/img/mom/xxx.jpg */
var avP = function (a) { return typeof a === 'number' ? 'av/' + ('000' + a).slice(-4) + '.webp' : a.indexOf('av:') === 0 ? 'av/' + a.slice(3) + '.webp' : a.charAt(0) === '/' ? a : '../assets/img/mom/' + a + '.jpg'; };
fetch('cm.json?v=26110293').then(function (r) { return r.json(); }).then(function (j) {
fetch('cm.json?v=26110294').then(function (r) { return r.json(); }).then(function (j) {
CMD = j; if (openId && NBY[openId]) { renderComments(NBY[openId]); syncBar(NBY[openId]); }
}).catch(function () { CMERR = true; if (openId && NBY[openId]) renderComments(NBY[openId]); });
function commentsOf(n) {
@@ -1056,11 +1125,51 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
game: '<svg viewBox="0 0 24 24"><path d="M7 4h10v5a5 5 0 01-10 0zM7 6H4v1.5A3.5 3.5 0 007.3 11M17 6h3v1.5a3.5 3.5 0 01-3.3 3.5" fill="#fff"/><path d="M7 6H4v1.5A3.5 3.5 0 007.3 11M17 6h3v1.5a3.5 3.5 0 01-3.3 3.5" fill="none" stroke="#fff" stroke-width="1.6"/><path d="M10.5 14h3v3h-3zM8 17.5h8V20H8z" fill="#fff"/></svg>',
shop: '<svg viewBox="0 0 24 24"><path d="M5 8.5h14l-1 11.5H6z" fill="#fff"/><path d="M9 10V7a3 3 0 016 0v3" fill="none" stroke="#fff" stroke-width="1.8" stroke-linecap="round"/></svg>'
};
/* 11-04 用户:「一行一条前面的图标都是一样的小书」→ 每个测试一枚自己的扁平图标(白色实心,底色按分组再分深浅三档),宫格卡封面右下角也放一枚大号淡水印 */
var CS_TI = {
t01: '<path d="M12 6.2c-1.6-2.3-6.6-2.2-7.4 2.2-.8 4.5 2.6 10.6 5.2 11 1 .2 1.4-.4 2.2-.4s1.2.6 2.2.4c2.6-.4 6-6.5 5.2-11-.8-4.4-5.8-4.5-7.4-2.2z"/><path d="M12 6c0-1.6.8-2.8 2.4-3.4" fill="none" stroke="#fff" stroke-width="1.7" stroke-linecap="round"/>',
t02: '<circle cx="12" cy="6.5" r="3.6"/><path d="M4.5 21c0-4.6 3.4-7.6 7.5-7.6s7.5 3 7.5 7.6z"/><path d="M12 13.6l-1.4 2.2L12 21l1.4-5.2z" fill="rgba(0,0,0,.18)"/>',
t03: '<circle cx="12" cy="12.5" r="7.6"/><circle cx="9.3" cy="12" r="1.1" fill="rgba(0,0,0,.28)"/><circle cx="14.7" cy="12" r="1.1" fill="rgba(0,0,0,.28)"/><path d="M10 15.2c1.2 1 2.8 1 4 0" fill="none" stroke="rgba(0,0,0,.28)" stroke-width="1.3" stroke-linecap="round"/><path d="M12 4.9c-.4-1.4.6-2.5 2-2.2" fill="none" stroke="#fff" stroke-width="1.6" stroke-linecap="round"/>',
t04: '<path d="M8 3h8l-1 3.5H9z"/><rect x="7.5" y="7.5" width="9" height="13.5" rx="3.2"/><path d="M9.5 12h5M9.5 15.5h5" stroke="rgba(0,0,0,.2)" stroke-width="1.3"/>',
t05: '<rect x="3.5" y="7" width="17" height="13" rx="3"/><path d="M9 7V5.2C9 4.5 9.5 4 10.2 4h3.6c.7 0 1.2.5 1.2 1.2V7" fill="none" stroke="#fff" stroke-width="1.8"/><path d="M3.5 12.5h17" stroke="rgba(0,0,0,.18)" stroke-width="1.4"/><rect x="10.5" y="11.2" width="3" height="2.6" rx=".8" fill="rgba(0,0,0,.2)"/>',
t06: '<ellipse cx="12" cy="15.5" rx="8.5" ry="4.5"/><circle cx="16.8" cy="9.2" r="3.4"/><path d="M19.8 9.4l2 .6-2 .8z"/><circle cx="17.5" cy="8.6" r=".7" fill="rgba(0,0,0,.35)"/>',
t07: '<path d="M3 11h18c0 4.7-3.6 8.5-9 8.5S3 15.7 3 11z"/><path d="M8.5 8.5c-.8-1 .6-2-.2-3.2M12 8.5c-.8-1 .6-2-.2-3.2M15.5 8.5c-.8-1 .6-2-.2-3.2" fill="none" stroke="#fff" stroke-width="1.5" stroke-linecap="round"/>',
t08: '<ellipse cx="9" cy="7.8" rx="4" ry="5"/><path d="M8.2 12.5h1.6l.7 8.2a1.5 1.5 0 01-3 0z"/><path d="M16 3v6.5M14 3v4.8a2 2 0 004 0V3M16 9.5V21" fill="none" stroke="#fff" stroke-width="1.6" stroke-linecap="round"/>',
t09: '<path d="M14.5 3.2A8.8 8.8 0 1020.8 15 7 7 0 0114.5 3.2z"/><path d="M17 5.5h3l-3 3.2h3" fill="none" stroke="#fff" stroke-width="1.4" stroke-linejoin="round"/>',
t10: '<path d="M12 2.8s-6.5 7.2-6.5 11.6a6.5 6.5 0 0013 0C18.5 10 12 2.8 12 2.8z"/><path d="M9 14.5a3 3 0 002.6 3" fill="none" stroke="rgba(0,0,0,.2)" stroke-width="1.5" stroke-linecap="round"/>',
t11: '<rect x="3.5" y="5" width="17" height="15.5" rx="3"/><path d="M3.5 9.5h17" stroke="rgba(0,0,0,.2)" stroke-width="1.4"/><path d="M8 3v4M16 3v4" stroke="#fff" stroke-width="2" stroke-linecap="round"/><path d="M8 14.6l2.4 2.2 4.6-4.4" fill="none" stroke="rgba(0,0,0,.28)" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/>',
t12: '<path d="M12 2.8l2.8 5.8 6.3.9-4.6 4.4 1.1 6.3L12 17.2l-5.6 3 1.1-6.3L2.9 9.5l6.3-.9z"/>',
t13: '<path d="M12 21v-8.5" stroke="#fff" stroke-width="2" stroke-linecap="round"/><path d="M12 13C12 8 8.5 5.5 4 6c0 4.5 3.2 7.2 8 7zM12 11.5c0-4 3-6.8 7.5-6.5 0 4.2-3 6.8-7.5 6.5z"/>',
t14: '<circle cx="9" cy="9" r="4"/><path d="M9 2v1.4M3.4 9H2M4.1 4.1l1 1M13.9 4.1l-1 1" stroke="#fff" stroke-width="1.6" stroke-linecap="round"/><path d="M7.5 20.5a4.5 4.5 0 01.6-9 6 6 0 0111.4 2.2 3.4 3.4 0 01-.5 6.8z"/>',
t15: '<path d="M4 5.5c2.6-.9 5.4-.5 7.3 1v13c-1.9-1.4-4.7-1.8-7.3-.9zM20 5.5c-2.6-.9-5.4-.5-7.3 1v13c1.9-1.4 4.7-1.8 7.3-.9z"/><path d="M15 9.2l1.2.8 1.6-2" fill="none" stroke="rgba(0,0,0,.25)" stroke-width="1.3" stroke-linecap="round"/>',
t16: '<circle cx="8" cy="7" r="3"/><circle cx="16" cy="7" r="3"/><path d="M2.5 19c0-3.6 2.4-6 5.5-6s5.5 2.4 5.5 6zM10.5 19c0-3.6 2.4-6 5.5-6s5.5 2.4 5.5 6z"/><path d="M12 16.6s-2-1.2-2-2.6c0-.8.6-1.3 1.2-1.3.4 0 .7.2.8.5.1-.3.4-.5.8-.5.6 0 1.2.5 1.2 1.3 0 1.4-2 2.6-2 2.6z" fill="#FFD3DE"/>',
t17: '<path d="M7 19.5a4.5 4.5 0 01-.7-9 6.2 6.2 0 0111.8 1.3A3.9 3.9 0 0117.5 19.5z"/><path d="M8 22l1-2M12 22l1-2M16 22l1-2" stroke="#fff" stroke-width="1.6" stroke-linecap="round"/>',
t18: '<path d="M12 3.5v16.5M6.5 20h11" stroke="#fff" stroke-width="1.8" stroke-linecap="round"/><path d="M4 7.5h16" stroke="#fff" stroke-width="1.6" stroke-linecap="round"/><path d="M2.5 13.5L5 7.5l2.5 6zM16.5 13.5L19 7.5l2.5 6z"/><path d="M2.5 13.5a2.5 2 0 005 0zM16.5 13.5a2.5 2 0 005 0z"/>',
t19: '<circle cx="8" cy="8" r="3.2"/><circle cx="16.5" cy="10.5" r="2.5"/><path d="M2.5 20c0-4 2.4-6.6 5.5-6.6s5.5 2.6 5.5 6.6zM12.5 20c.2-3 1.8-5 4-5s3.8 2 4 5z"/>',
t20: '<circle cx="12" cy="8" r="4.2"/><path d="M4.5 21c0-4.5 3.4-7.4 7.5-7.4s7.5 2.9 7.5 7.4z"/><circle cx="10.2" cy="8.3" r="1.3" fill="none" stroke="rgba(0,0,0,.3)" stroke-width=".9"/><circle cx="13.8" cy="8.3" r="1.3" fill="none" stroke="rgba(0,0,0,.3)" stroke-width=".9"/><path d="M8.4 4.6c1.2-1.4 6-1.4 7.2 0" fill="none" stroke="#fff" stroke-width="1.6" stroke-linecap="round"/>',
t21: '<path d="M4 13a8 8 0 0116 0" fill="none" stroke="#fff" stroke-width="2"/><rect x="2.5" y="12.5" width="5" height="7.5" rx="2"/><rect x="16.5" y="12.5" width="5" height="7.5" rx="2"/><path d="M12 9.5v4.2a1.6 1.6 0 11-1-1.5V9.5h3.2" fill="none" stroke="#fff" stroke-width="1.4"/>',
t22: '<path d="M12 2.8a6.5 6.5 0 00-3.8 11.8V17h7.6v-2.4A6.5 6.5 0 0012 2.8z"/><rect x="8.6" y="18.2" width="6.8" height="2.6" rx="1.2"/><path d="M10.4 8.4l3.2 3.2M13.6 8.4l-3.2 3.2" stroke="rgba(0,0,0,.25)" stroke-width="1.5" stroke-linecap="round"/>',
t23: '<circle cx="12" cy="12" r="2.6" fill="rgba(0,0,0,.18)"/><path d="M12 9.4c-1.4-4 1.4-6.4 0-6.4s1.4 2.4 0 6.4z"/><ellipse cx="12" cy="5.8" rx="2.6" ry="3.6"/><ellipse cx="12" cy="18.2" rx="2.6" ry="3.6"/><ellipse cx="5.8" cy="12" rx="3.6" ry="2.6"/><ellipse cx="18.2" cy="12" rx="3.6" ry="2.6"/><circle cx="12" cy="12" r="2.4" fill="#FFE07A"/>',
t24: '<path d="M4 4h6v2.2a2 2 0 103.6 0V4H20v6h-2.2a2 2 0 100 3.6H20V20h-6v-2.2a2 2 0 10-3.6 0V20H4v-6.4h2.2a2 2 0 100-3.6H4z"/>',
t25: '<circle cx="12" cy="12" r="8.6"/><circle cx="9" cy="10" r="1.2" fill="rgba(0,0,0,.3)"/><circle cx="15" cy="10" r="1.2" fill="rgba(0,0,0,.3)"/><path d="M8 13.6c1.8 2.8 6.2 2.8 8 0" fill="none" stroke="rgba(0,0,0,.3)" stroke-width="1.6" stroke-linecap="round"/>',
t26: '<path d="M3 5h2.4l2.3 10.2h10.4L20.5 8H6.6"/><path d="M3 5h2.4l2.3 10.2h10.4L20.5 8H6.6" fill="none" stroke="#fff" stroke-width="1.8" stroke-linejoin="round"/><circle cx="9" cy="19" r="1.7"/><circle cx="16.5" cy="19" r="1.7"/>',
t27: '<rect x="3.5" y="9" width="17" height="11.5" rx="2"/><rect x="2.5" y="6" width="19" height="4" rx="1.5"/><path d="M12 6v14.5" stroke="rgba(0,0,0,.2)" stroke-width="1.6"/><path d="M12 6c-1.5-3.5-5.5-3-4 0M12 6c1.5-3.5 5.5-3 4 0" fill="none" stroke="#fff" stroke-width="1.6"/>',
t28: '<path d="M3 9.5l9-5.5 9 5.5V20H3z"/><rect x="7" y="13" width="4" height="4" rx=".8" fill="rgba(0,0,0,.18)"/><rect x="13" y="13" width="4" height="7" rx=".8" fill="rgba(0,0,0,.18)"/>',
t29: '<rect x="2.5" y="7.5" width="19" height="10" rx="5"/><path d="M7 10.5v4M5 12.5h4" stroke="rgba(0,0,0,.3)" stroke-width="1.5" stroke-linecap="round"/><circle cx="15.5" cy="11.3" r="1.1" fill="rgba(0,0,0,.3)"/><circle cx="17.8" cy="13.6" r="1.1" fill="rgba(0,0,0,.3)"/>',
t30: '<rect x="5" y="3.5" width="14" height="17.5" rx="2.5"/><rect x="9" y="2" width="6" height="3.4" rx="1.2" fill="rgba(0,0,0,.2)"/><path d="M8 9.5l1 1 2-2M8 14.5l1 1 2-2M13 9.8h3.5M13 14.8h3.5" fill="none" stroke="rgba(0,0,0,.28)" stroke-width="1.4" stroke-linecap="round"/>'
};
function csTI(x) { return CS_TI[x.id] ? '<svg viewBox="0 0 24 24" fill="#fff" aria-hidden="true">' + CS_TI[x.id] + '</svg>' : CS_ICO[x.group]; }
/* 头像:59 张人设照轮着取,同一张卡/行 3 个不重复,相邻两处也不撞(模拟,AGENTS.md 12b,12-31 复核) */
var CS_AVP = (function () { var a = [], i; for (i = 1; i <= 13; i++) a.push('k' + (i < 10 ? '0' : '') + i); for (i = 1; i <= 22; i++) a.push('m' + (i < 10 ? '0' : '') + i); for (i = 1; i <= 14; i++) a.push('p' + (i < 10 ? '0' : '') + i); for (i = 1; i <= 10; i++) a.push('s' + (i < 10 ? '0' : '') + i);
for (i = a.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)), t = a[i]; a[i] = a[j]; a[j] = t; } return a; })();
var csAvK = 0;
function csAvs(n) { var h = '<span class="cav">'; for (var i = 0; i < n; i++) h += '<img src="../assets/img/mom/' + CS_AVP[csAvK++ % CS_AVP.length] + '.jpg" alt="" loading="lazy">'; return h + '</span>'; }
var CS_SEC = { quiz: ['', '查漏补缺,温和掌握孕产育儿知识', 2], psy: ['', '看见情绪,也看见关系', 2], game: ['', '挑战一下,看能拿什么称号', 2], shop: ['', '看看你是哪一类育儿采购玩家', 2] };
function csRowHTML(x, done, i) {
var d = done[x.id], who = (x.sub || '').split('·')[0].trim();
return '<button type="button" class="csr ' + CS_GPAL[x.group] + '" data-test="' + x.id + '"><span class="csr-i">' + CS_ICO[x.group] + '</span>' +
'<span class="csr-m"><b>' + esc(x.title.replace(/^测一测|/, '')) + '</b><small>' + esc(who) + ' · ' + x.n + ' 题<i>' + gcTestedText(x.id) + '</i></small></span>' +
return '<button type="button" class="csr ' + CS_GPAL[x.group] + '" data-test="' + x.id + '"><span class="csr-i s' + (i % 3) + '">' + csTI(x) + '</span>' +
'<span class="csr-m"><b>' + esc(x.title.replace(/^测一测|/, '')) + '</b><small>' + esc(who) + ' · ' + x.n + ' 题' + csAvs(3) + '<i>' + gcTestedText(x.id) + '</i></small></span>' +
'<em>' + (d ? '再测' : '去测') + '</em></button>';
}
var CS_PAL = ['pa', 'pb', 'pc', 'pd', 'pe', 'pf']; /* 6 套封面配色轮流:蜜桃 / 薰衣草 / 奶油蓝 / 浅紫 / 薄荷 / 杏橙 */
@@ -1080,8 +1189,8 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
var top = byHot(TM).slice(0, 3).map(function (y) { return y.id; }).indexOf(x.id);
return '<button type="button" class="ck ' + CS_GPAL[x.group] + '" data-test="' + x.id + '"><span class="cv">' + (CS_BLOBS[x.group] || CS_BLOB) +
(top >= 0 ? '<i class="ck-top t' + (top + 1) + '">TOP' + (top + 1) + '</i>' : '') +
'<b>' + esc(x.title.replace(/^测一测|/, '')) + '</b><small>' + esc(who) + ' · ' + x.n + ' 题</small><em>' + (d ? '再测一次' : '开始测试') + '</em>' + (d ? '<i class="dn">已测</i>' : '') + '</span>' +
'<span class="cnn"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12.6 2.5c.4 3-1.6 4.6-3 6.2C8 10.4 7 12 7 14.3A5 5 0 0012 19.5a5 5 0 005-5.2c0-2-1-3.6-1.9-4.6-.2 1.3-.9 2.2-1.9 2.6.6-3.4-.2-7-.6-9.8z" fill="currentColor"/></svg>' + gcTestedText(x.id) + '</span></button>';
'<i class="ck-wm">' + csTI(x) + '</i><b>' + esc(x.title.replace(/^测一测|/, '')) + '</b><small>' + esc(who) + ' · ' + x.n + ' 题</small><em>' + (d ? '再测一次' : '开始测试') + '</em>' + (d ? '<i class="dn">已测</i>' : '') + '</span>' +
'<span class="cnn">' + csAvs(3) + '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12.6 2.5c.4 3-1.6 4.6-3 6.2C8 10.4 7 12 7 14.3A5 5 0 0012 19.5a5 5 0 005-5.2c0-2-1-3.6-1.9-4.6-.2 1.3-.9 2.2-1.9 2.6.6-3.4-.2-7-.6-9.8z" fill="currentColor"/></svg>' + gcTestedText(x.id) + '</span></button>';
}
/* ---------- 11-04 用户:「测试列表页太安静,要热闹、有创意」 ----------
① banner 下一条「此刻 N 人正在测」(红点呼吸、数字隔 2 秒小跳)+ 战报滚动「谁 刚测出「结果」· 哪个测试」(点了进那个测试);
@@ -1105,50 +1214,72 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
return '<button type="button" class="luck" id="csvGo"><span class="luck-dc" id="csdDc">' + diceSVG(5) + '</span><span class="luck-dc d2">' + diceSVG(3) + '</span>' +
'<span class="luck-t"><b>不知道测哪个?摇一下</b><span class="luck-w"><span id="csdW">' + (left > 0 ? '还有 ' + left + ' 个没测过,交给手气' : '全部测完啦,再摇一个重温') + '</span></span></span>' +
'<em class="luck-b">摇一摇</em><i class="luck-fx" id="csdFx"></i></button>' +
'<div class="csv"><div class="csv-n"><i class="csv-dot"></i>此刻 <b id="csvN" class="num">' + csNowBase().toLocaleString() + '</b> 人正在测</div>' +
'<div class="csv"><div class="csv-n"><i class="csv-dot"></i>此刻 <b id="csvN" class="num">' + csNowBase().toLocaleString() + '</b> 人正在测<span class="csv-av" id="csvAv">' + csAvs(5) + '</span></div>' +
'<div class="csv-r" id="csvR"></div></div>';
}
var csdBusy = false;
/* 11-04 用户:「点摇一摇,整个页面上浮出一个动态效果,结束后再跳到那个测试」→ 全屏浮层:两颗大骰子翻滚 + 老虎机转测试名(越转越慢)→ 落定弹出那个测试的卡(分组配色 + 专属图标)+ 全屏撒彩纸 → 进入 */
function csdRoll(btn) {
if (csdBusy) return; csdBusy = true; haptic(); btn.classList.add('roll');
var dn = csDone(), pool = TM.filter(function (x) { return !dn[x.id]; }); if (!pool.length) pool = TM;
var pk = pool[Math.floor(Math.random() * pool.length)], w = document.getElementById('csdW'), dcs = btn.querySelectorAll('.luck-dc'), i = 0, steps = 16;
(function spin() {
var pk = pool[Math.floor(Math.random() * pool.length)], i = 0, steps = 18;
var ov = document.createElement('div'); ov.className = 'lko';
ov.innerHTML = '<div class="lko-bg"></div><div class="lko-in"><div class="lko-dc"><span class="a">' + diceSVG(6) + '</span><span class="b">' + diceSVG(3) + '</span></div>' +
'<p class="lko-tip">手气摇号中…</p><div class="lko-reel"><span id="lkoR">?</span></div><div class="lko-card" id="lkoC"></div></div><div class="lko-fx" id="lkoFx"></div>';
document.body.appendChild(ov); void ov.offsetWidth; ov.classList.add('on');
var R = ov.querySelector('#lkoR'), dcs = ov.querySelectorAll('.lko-dc span');
setTimeout(function spin() {
var last = i >= steps, t = last ? pk : TM[Math.floor(Math.random() * TM.length)];
w.innerHTML = '<span class="' + (last ? 'hit' : 'sp') + '">' + esc(last ? t.title.replace(/^测一测|/, '') : (CS_SHORT[t.id] || t.title)) + '</span>';
R.className = ''; void R.offsetWidth; R.className = last ? 'hit' : 'sp'; R.textContent = CS_SHORT[t.id] || t.title;
[].forEach.call(dcs, function (d) { d.innerHTML = diceSVG(1 + Math.floor(Math.random() * 6)); });
if (!last) { i++; setTimeout(spin, 40 + i * i * 1.1); return; }
btn.classList.remove('roll'); btn.classList.add('hit'); haptic(); var bb = btn.querySelector('.luck-b'); if (bb) bb.textContent = '就它了!';
var fx = document.getElementById('csdFx'), cols = ['#FF8A65', '#9A7FE0', '#3FAE7A', '#4E8DE6', '#FFC94D', '#F0453A'], h = '';
for (var k = 0; k < 18; k++) { var a = k / 18 * 6.283, r = 40 + Math.random() * 40; h += '<i style="--x:' + Math.round(Math.cos(a) * r) + 'px;--y:' + Math.round(Math.sin(a) * r * .6) + 'px;background:' + cols[k % 6] + '"></i>'; }
if (i % 3 === 0 && navigator.vibrate) try { navigator.vibrate(8); } catch (e) {}
if (!last) { i++; setTimeout(spin, 45 + i * i * 1.15); return; }
ov.classList.add('hit'); haptic();
ov.querySelector('.lko-tip').textContent = '就它了!';
ov.querySelector('#lkoC').innerHTML = '<div class="ck ' + CS_GPAL[pk.group] + '"><span class="cv">' + (CS_BLOBS[pk.group] || CS_BLOB) + '<i class="ck-wm">' + csTI(pk) + '</i><i class="lko-ic">' + csTI(pk) + '</i>' +
'<b>' + esc(pk.title.replace(/^测一测|/, '')) + '</b><small>' + TG[pk.group] + ' · ' + pk.n + ' 题</small><em>马上开测</em></span></div>';
var fx = ov.querySelector('#lkoFx'), cols = ['#FF8A65', '#9A7FE0', '#3FAE7A', '#4E8DE6', '#FFC94D', '#F0453A', '#FF8FB1'], h = '';
for (var k = 0; k < 46; k++) {
var ag = Math.random() * 6.283, r = 120 + Math.random() * 200;
h += '<i style="--x:' + Math.round(Math.cos(ag) * r) + 'px;--y:' + Math.round(Math.sin(ag) * r - 60) + 'px;--r:' + Math.round(Math.random() * 720) + 'deg;background:' + cols[k % 7] + ';animation-delay:' + Math.round(Math.random() * 120) + 'ms;' + (k % 3 ? '' : 'border-radius:50%;') + '"></i>';
}
fx.innerHTML = h;
setTimeout(function () { location.href = ceshiURL(pk.id, true); }, 1100);
})();
setTimeout(function () { location.href = ceshiURL(pk.id, true); }, 1500);
}, 260);
}
window.addEventListener('pageshow', function () { csdBusy = false; var b = document.getElementById('csvGo'); if (b) { b.classList.remove('roll', 'hit'); var bb = b.querySelector('.luck-b'); if (bb) bb.textContent = '摇一摇'; } });
var csvT = 0, csvI = 0, csvRec = [];
window.addEventListener('pageshow', function () { csdBusy = false; [].forEach.call(document.querySelectorAll('.lko'), function (o) { o.parentNode.removeChild(o); }); var b = document.getElementById('csvGo'); if (b) { b.classList.remove('roll', 'hit'); var bb = b.querySelector('.luck-b'); if (bb) bb.textContent = '摇一摇'; } });
var csvT = 0, csvI = 0, csvRec = [], csvRecT = [];
function csvOne() {
var R = window.GC_RES || {}, ids = TM.filter(function (x) { return R[x.id] && R[x.id].length; });
if (!ids.length) return '';
var tp = ids.filter(function (x) { return csvRecT.indexOf(x.id) < 0; }); if (tp.length) ids = tp;
var t = ids[Math.floor(Math.random() * ids.length)], rs = R[t.id], r = rs[Math.floor(Math.random() * rs.length)], k, c = [];
csvRecT.push(t.id); if (csvRecT.length > 6) csvRecT.shift(); /* 最近 6 条不出同一个测试 */
for (k = 0; k < CL_NM.length; k++) if (csvRec.indexOf(k) < 0) c.push(k);
k = c[Math.floor(Math.random() * c.length)]; csvRec.push(k); if (csvRec.length > 14) csvRec.shift();
return '<button type="button" class="csv-i" data-test="' + t.id + '"><img src="../assets/img/mom/' + CL_AV[k] + '.jpg" alt="" width="20" height="20">' +
k = c[Math.floor(Math.random() * c.length)]; csvRec.push(k); if (csvRec.length > 14) csvRec.shift(); /* 同屏 3 行 + 最近 14 个人不重复 */
return '<button type="button" class="csv-i" data-test="' + t.id + '"><img src="../assets/img/mom/' + CL_AV[k] + '.jpg" alt="" width="22" height="22">' +
'<span><em>' + esc(CL_NM[k]) + '</em>刚测出<b>「' + esc(r) + '」</b></span><small>' + esc(CS_SHORT[t.id] || '') + '</small></button>';
}
/* 11-04 用户:「此刻正在测下面一行太少,最多三行滚动」→ 同屏 3 行,新的一条从底下推上来,最上面那条淡出 */
var CSV_H = 30;
function csvLay(b) { [].forEach.call(b.querySelectorAll('.csv-i:not(.gone)'), function (el, i) { el.style.transform = 'translateY(' + i * CSV_H + 'px)'; el.style.opacity = i > 2 ? 0 : 1; }); }
function csLiveRun() {
clearInterval(csvT);
var box = $('#csvR'); if (!box) return;
box.innerHTML = csvOne(); if (box.firstChild) box.firstChild.classList.add('on');
box.innerHTML = csvOne() + csvOne() + csvOne(); csvLay(box);
var base = csNowBase(), n = base, tick = 0;
csvT = setInterval(function () {
if (document.hidden || !document.getElementById('csvR')) return;
tick++;
if (tick % 2 === 0) { /* 战报每 2.6 秒换一条 */
var b = document.getElementById('csvR'), old = b.querySelector('.csv-i.on');
if (tick % 2 === 0) { /* 每 2.6 秒推上来一条 */
var b = document.getElementById('csvR'), first = b.querySelector('.csv-i:not(.gone)');
b.insertAdjacentHTML('beforeend', csvOne());
var nw = b.lastElementChild; void nw.offsetWidth; nw.classList.add('on');
if (old) { old.classList.remove('on'); old.classList.add('up'); setTimeout(function () { if (old.parentNode) old.parentNode.removeChild(old); }, 450); }
var nw = b.lastElementChild; nw.style.transform = 'translateY(' + 3 * CSV_H + 'px)'; nw.style.opacity = 0; void nw.offsetWidth;
if (first) { first.classList.add('gone'); first.style.transform = 'translateY(' + -CSV_H + 'px)'; first.style.opacity = 0; setTimeout(function () { if (first.parentNode) first.parentNode.removeChild(first); }, 500); }
csvLay(b);
}
if (tick % 3 === 0) { /* 头像堆换一个人 */
var av = document.querySelectorAll('#csvAv img'); if (av.length) { var im = av[Math.floor(Math.random() * av.length)]; im.classList.add('sw'); setTimeout(function () { im.src = '../assets/img/mom/' + CS_AVP[csAvK++ % CS_AVP.length] + '.jpg'; im.classList.remove('sw'); }, 220); }
}
n = Math.max(Math.round(base * .93), Math.min(Math.round(base * 1.07), n + Math.round((Math.random() - .45) * 14)));
var e = document.getElementById('csvN'); if (e) { e.textContent = n.toLocaleString(); e.classList.remove('bp'); void e.offsetWidth; e.classList.add('bp'); }
@@ -1164,12 +1295,12 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
[].forEach.call(els, function (el) { el.classList.add('pre'); io.observe(el); });
}
function ceshiListHTML() {
var done = csDone(), gs = ['quiz', 'psy', 'game', 'shop'].filter(function (g) { return !tGrp || tGrp === g; }), k = 0;
var done = csDone(), gs = ['quiz', 'psy', 'game', 'shop'].filter(function (g) { return !tGrp || tGrp === g; }), k = 0; csAvK = 0;
return '<div class="csl">' + gs.map(function (g, gi) {
var l = byHot(TM.filter(function (x) { return x.group === g; })); if (!l.length) return '';
var c = CS_SEC[g], nc = Math.min(6, l.length - l.length % 2);
return (gi ? '<div class="csd"><span>' + (gi === 1 && !tGrp ? '点上方标签,可以只看某一类' : '继续往下看') + '</span></div>' : '') +
'<section class="csg g-' + g + '"><div class="csg-h"><b><i class="csg-ic">' + CS_ICO[g] + '</i>' + TG[g] + '</b><small>' + c[1] + '</small></div>' +
'<section class="csg g-' + g + '"><i class="csg-deco" aria-hidden="true">' + CS_ICO[g] + '</i><div class="csg-h"><b><i class="csg-ic">' + CS_ICO[g] + '</i>' + TG[g] + '<span class="csg-n">' + csAvs(4) + Math.round(l.reduce(function (a, x) { return a + gcTested(x.id); }, 0) / 1e4) + ' 万人测过</span></b><small>' + c[1] + '</small></div>' +
'<div class="ckg c2">' + l.slice(0, nc).map(function (x) { return csCardHTML(x, done, k++); }).join('') + '</div>' +
(l.length > nc ? '<div class="csrl">' + l.slice(nc).map(function (x) { return csRowHTML(x, done, k++); }).join('') + '</div>' : '') + '</section>';
}).join('') + '</div>';

View File

@@ -105,7 +105,7 @@ main{padding:6px 16px 0}
</div>
<div class="wb"><button type="button" id="write"><svg class="ic" viewBox="0 0 24 24"><path d="M12 20h9M16.5 3.5a2.1 2.1 0 013 3L7 19l-4 1 1-4z"/></svg>写新的故事</button></div>
<script src="../topics.js?v=26110293"></script>
<script src="../topics.js?v=26110294"></script>
<script>
(function () {
'use strict';

View File

@@ -7,10 +7,10 @@
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>兜爸心选 · 孕育陪伴</title>
<!-- V:26110293 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<!-- V:26110294 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<link rel="stylesheet" href="mama-box.css">
<link rel="stylesheet" href="night.css">
<link rel="stylesheet" href="js/hero-cd.css?v=26110293">
<link rel="stylesheet" href="js/hero-cd.css?v=26110294">
<!-- 夜晚模式:首屏绘制前就按上次的选择加 class,避免先白后黑闪一下(开关在首页右上角 #nightBtn,逻辑见 app.js) -->
<script>try{if(localStorage.getItem('mmbox.night.v1')==='1'){document.documentElement.classList.add('night');document.querySelector('meta[name=theme-color]').content='#2A2340'}}catch(e){}</script>
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
@@ -2580,17 +2580,17 @@
<script src="/_bridge/avatar-picker.js?v=26101105"></script>
<script src="/_bridge/hand-icons.js?v=26101202"></script>
<script src="js/zodiac-art.js"></script>
<script src="guangchang/topics.js?v=26110293"></script>
<script src="guangchang/topics.js?v=26110294"></script>
<script src="js/app.js"></script>
<script src="js/hero-cd.js?v=26110293"></script>
<script src="js/kit.js?v=26110293"></script>
<script src="js/hero-cd.js?v=26110294"></script>
<script src="js/kit.js?v=26110294"></script>
<script>
/* 11-02 首页「孕妈广场」效果稿:地址带 ?gcv=1~6 时,把 #gcHome 换成 demo/gch/vN.css + vN.js 的版式并滚到这一块。
11-02 用户:「用第一版,放到预览页面上」;后改定彩色卡 → 不带参数也默认用 V6 合并版(广场卡堆 + 其他妈妈也在搜 + 测一测第 4 版彩色卡),不滚动、不显示效果稿角标 */
(function () {
var m = location.search.match(/[?&]gcv=([1-6])(?:&|$)/);
if (!m) window.__gcDefault = 1;
var n = m ? m[1] : '6', l = document.createElement('link'), s = document.createElement('script'), q = m ? Date.now() : 'v=26110293';
var n = m ? m[1] : '6', l = document.createElement('link'), s = document.createElement('script'), q = m ? Date.now() : 'v=26110294';
var dir = n === '4' || n === '6' ? 'js/gch/' : 'demo/gch/'; /* 11-03 上正式:定稿 V6(含它套的 V4)并进 js/gch/,其余效果稿仍在 demo/ */
l.rel = 'stylesheet'; l.href = dir + 'v' + n + '.css?' + q;
s.src = dir + 'v' + n + '.js?' + q;
@@ -2599,7 +2599,7 @@
/* 11-02 品牌露出(用户定 4 处都要):默认加载,?brand=0 可关掉对比;11-03 已并进 js/gch/ */
if (!/[?&]brand=0/.test(location.search)) {
var bl = document.createElement('link'), bs = document.createElement('script');
bl.rel = 'stylesheet'; bl.href = 'js/gch/brand.css?v=26110293'; bs.src = 'js/gch/brand.js?v=26110293';
bl.rel = 'stylesheet'; bl.href = 'js/gch/brand.css?v=26110294'; bs.src = 'js/gch/brand.js?v=26110294';
document.head.appendChild(bl); document.body.appendChild(bs);
}
})();
@@ -2610,7 +2610,7 @@
<script src="js/hero-fx.js"></script>
<!-- 2026-10-05 首页头图:宝宝时不时动一动小手小脚(独立文件,删掉这一行即下线) -->
<script src="js/baby-limbs.js?v=26101201"></script>
<script src="js/coach.js?v=26110293"></script>
<script src="js/coach.js?v=26110294"></script>
<script src="js/birth-flow.js?v=26110201"></script>
<!-- 禁止下拉回弹(2026-10-11 统一规则,与孕期体重同一段):竖向拖动时从手指下往上找还能朝该方向滚的容器,找不到才拦;横滑、双指、可滚列表不受影响 -->

View File

@@ -3,7 +3,7 @@
(function () {
'use strict';
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
var VER = '26110293';
var VER = '26110294';
const $ = (s, c) => (c || document).querySelector(s);
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));

View File

@@ -231,5 +231,5 @@
}
/* feed.js 首页默认不加载(index.html 只引了 topics.js),这里按需拉一次 */
if (window.GC_FEED) init();
else { var fs = document.createElement('script'); fs.src = 'guangchang/feed.js?v=26110293'; fs.onload = fs.onerror = init; document.body.appendChild(fs); }
else { var fs = document.createElement('script'); fs.src = 'guangchang/feed.js?v=26110294'; fs.onload = fs.onerror = init; document.body.appendChild(fs); }
})();

View File

@@ -6,9 +6,9 @@
(function () {
var sec = document.getElementById('gcHome');
if (!sec) return;
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/gch/v4.css?v=26110293';
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/gch/v4.css?v=26110294';
document.head.appendChild(l);
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110293';
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110294';
s.onload = function () { if (sec.querySelector('.g4-foot')) merge(); else sec.addEventListener('gc4-ready', merge, { once: true }); }; /* v4 要先拉 feed.js 才渲染 */
document.body.appendChild(s);

View File

@@ -9,7 +9,7 @@
if (/[?&]kit=0(?:&|$)/.test(location.search)) return;
var box = document.getElementById('kit'), sec = document.getElementById('kitHome');
if (!box || !sec) return;
var V = '26110293';
var V = '26110294';
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/kit.css?v=' + V; document.head.appendChild(l);
document.documentElement.classList.add('has-kit');

View File

@@ -68,7 +68,7 @@
function getJSON(u) { return fetch(u, { cache: 'no-cache' }).then(function (r) { if (!r.ok) throw r.status; return r.json(); }); }
function related(box) {
getJSON('../_shared/idx.json?v=26110293').then(function (idx) {
getJSON('../_shared/idx.json?v=26110294').then(function (idx) {
var me = null; idx.forEach(function (x) { if (x[0] === SLUG) me = x; });
var tag = me ? me[2] : '', h = 0; for (var i = 0; i < SLUG.length; i++) h = (h * 31 + SLUG.charCodeAt(i)) >>> 0;
var rest = idx.filter(function (x) { return x[0] !== SLUG; });
@@ -175,7 +175,7 @@
}
fetch(API + '/comments?kind=topic&target=' + encodeURIComponent(SLUG) + (OID ? '&openid=' + encodeURIComponent(OID) : ''))
.then(function (r) { return r.json(); }).then(function (j) { if (j && j.code === 200) { RC = j.result; paint(); } }).catch(function () {});
getJSON('../_shared/cm/' + SLUG + '.json?v=26110293').then(function (d) { L = d.c || []; paint(); }).catch(function () { paint(); });
getJSON('../_shared/cm/' + SLUG + '.json?v=26110294').then(function (d) { L = d.c || []; paint(); }).catch(function () { paint(); });
}
function extras(el) {