悄悄话置顶笔记:点开为笔记详情 + 留言区(先审后发)+ 100 条模拟祝福评论;去星空看看 → 首页星空页
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -68,7 +68,7 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
|
||||
.qf:active{transform:scale(.985)}
|
||||
/* 11-07 置顶笔记「孕妈悄悄话」(用户:首页不放,在广场内容里发一条置顶笔记,点了进星空页):
|
||||
右列第一张,样子是一张笔记卡 —— 封面换成夜空(星星一闪一闪 + 偶尔一道流星)+ 本周话题大字 + 一句轮播的悄悄话 */
|
||||
.nc.pin .pcv{position:relative;height:calc(var(--cw, 175px) * 1.25);overflow:hidden;color:#fff;
|
||||
.nc.pin .pcv,.dcv .pcv{position:relative;height:calc(var(--cw, 175px) * 1.25);overflow:hidden;color:#fff;
|
||||
background:radial-gradient(120% 70% at 85% 0%,#5A3B72 0%,transparent 60%),radial-gradient(90% 60% at 0% 100%,#4A2C55 0%,transparent 70%),linear-gradient(180deg,#191634 0%,#241D44 55%,#2F2148 100%)}
|
||||
.pcv .psk{position:absolute;inset:0;pointer-events:none}
|
||||
.pcv .psk i{position:absolute;width:6px;height:6px;margin:-3px 0 0 -3px;opacity:.85;filter:drop-shadow(0 0 2px rgba(255,255,255,.7));
|
||||
@@ -89,6 +89,16 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
|
||||
.pcv .pq.out{opacity:0;transform:translateY(5px)}
|
||||
.nb .ntg.k-whs{background:#F0EBFA;color:#7A5BB8}
|
||||
.nc.pin .nf .pav{flex:none;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:linear-gradient(135deg,#3E2F5E,#6B4AA8);color:#FFE2B8;font-size:10px;font-style:normal}
|
||||
/* 置顶笔记详情页:夜空封面 + 「去星空看看」;不要点赞/收藏/关注(这篇是官方置顶,不是某个妈妈的帖子) */
|
||||
.dcv .pcv{height:min(78vw,340px)}
|
||||
.dcv .pcv .pbig{bottom:auto;top:30%}
|
||||
.dcv .pcv .pbig small{font-size:12px}
|
||||
.dcv .pcv .pbig b{font-size:28px}
|
||||
.dcv .pcv .pq{bottom:64px;font-size:13px}
|
||||
.dcv .pcv .ptop{left:14px;top:14px}
|
||||
.pstar{position:absolute;left:14px;bottom:16px;z-index:2;display:inline-flex;align-items:center;gap:4px;height:36px;padding:0 16px;border:0;border-radius:99px;font:inherit;font-size:14px;font-weight:800;color:#4A2E1E;background:linear-gradient(120deg,#FFE2B8,#FFB98F);box-shadow:0 6px 16px -6px rgba(255,185,143,.8)}
|
||||
.pstar:active{transform:scale(.97)}
|
||||
#dt.is-pin #blk,#dt.is-pin #bfv,#dt.is-pin #dfo{display:none}
|
||||
.nc.pin .nf .pgo{margin-left:auto;flex:none;font-size:11px;font-weight:800;color:#7A5BB8}
|
||||
.qf-st{position:absolute;inset:0;pointer-events:none;opacity:.9;
|
||||
background-image:radial-gradient(1.4px 1.4px at 12% 20%,#fff,transparent),radial-gradient(1px 1px at 28% 70%,#fff,transparent),radial-gradient(1.2px 1.2px at 46% 14%,#FFE9B0,transparent),
|
||||
@@ -1030,7 +1040,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
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=26110487').then(function (r) { return r.json(); }).then(function (j) {
|
||||
fetch('cm.json?v=26110611').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) {
|
||||
@@ -1203,28 +1213,38 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
var PIN_WK = (function () { try { var g = JSON.parse(localStorage.getItem('mmbox.gcwk.v1') || 'null'); return g && !g.pp && g.w ? +g.w : 0; } catch (e) { return 0; } })();
|
||||
var PIN_ON = PIN_WK >= 4 && !(window.mbGate && window.mbGate.out);
|
||||
var WHD = null, whRi = 0, whT = null;
|
||||
/* 置顶笔记本身:按每周话题一篇(id = wh-话题起始日),留言走广场评论那套(先审后发,后台「评论审核」页签);
|
||||
模拟祝福评论在 cm.json 的 c['wh-20260928'](100 条,tools/whcm/,AGENTS.md 12c 扩展) */
|
||||
var PIN_TH = window.MB_WH_THEME ? window.MB_WH_THEME() : null;
|
||||
var PIN_ID = 'wh-' + (PIN_TH ? PIN_TH.from.replace(/-/g, '') : '0');
|
||||
var PIN = NBY[PIN_ID] = { id: PIN_ID, pin: 1, title: '孕妈悄悄话 · ' + (PIN_TH ? PIN_TH.name : ''), author: '孕妈悄悄话', stage: '', likes: 0 };
|
||||
function pinCoverHTML(th, l, sky, big) {
|
||||
return '<div class="pcv"><span class="psk" aria-hidden="true">' + sky + '<b class="pmt"></b><b class="pmt m2"></b></span><i class="ptop">置顶</i>' +
|
||||
'<div class="pbig"><small>' + (th ? '本周话题' : '孕妈悄悄话') + '</small><b>' + (th ? (th.lines || [th.name]).map(esc).join('<br>') : '说给宝宝听的悄悄话') + '</b></div>' +
|
||||
'<p class="pq" id="' + (big ? 'pinRl2' : 'pinRl') + '">' + (l.length ? '“' + esc(l[0].text) + '”' : '点一颗星星,听听她们说了什么') + '</p>' +
|
||||
(big ? '<button type="button" class="pstar" data-star="1">去星空看看<svg class="ic" style="width:14px;height:14px"><use href="#i-right"/></svg></button>' : '') + '</div>';
|
||||
}
|
||||
function pinHTML() {
|
||||
var th = (WHD && WHD.theme && WHD.theme.name) ? WHD.theme : (window.MB_WH_THEME ? window.MB_WH_THEME() : null);
|
||||
var l = WHD ? (WHD.list || []).filter(function (x) { return !x.mine; }) : [];
|
||||
var sky = [[14,14,0,-1.2,2.4],[38,8,0,-.3,2],[62,20,1,-2.4,2.8],[86,12,0,-3.1,2.2],[24,34,1,-3.7,2.6],[50,40,0,-1.6,3.2],[80,32,0,-2.2,2.6],[10,52,0,-.8,3],[70,50,1,-1.9,2.4],[90,58,0,-2.8,3]]
|
||||
.map(function (k) { return '<i' + (k[2] ? ' class="b"' : '') + ' style="left:' + k[0] + '%;top:' + k[1] + '%;animation-delay:' + k[3] + 's;animation-duration:' + k[4] + 's"></i>'; }).join('');
|
||||
return '<button type="button" class="nc pin" id="whPin" aria-label="置顶:孕妈悄悄话' + (th ? ',本周话题' + esc(th.name) : '') + '"><div class="cvw"><div class="pcv">' +
|
||||
'<span class="psk" aria-hidden="true">' + sky + '<b class="pmt"></b><b class="pmt m2"></b></span><i class="ptop">置顶</i>' +
|
||||
'<div class="pbig"><small>' + (th ? '本周话题' : '孕妈悄悄话') + '</small><b>' + (th ? (th.lines || [th.name]).map(esc).join('<br>') : '说给宝宝听的悄悄话') + '</b></div>' +
|
||||
'<p class="pq" id="pinRl">' + (l.length ? '“' + esc(l[0].text) + '”' : '点一颗星星,听听她们说了什么') + '</p></div></div>' +
|
||||
var sky = pinSky();
|
||||
return '<button type="button" class="nc pin" id="whPin" data-id="' + PIN_ID + '" aria-label="置顶:孕妈悄悄话' + (th ? ',本周话题' + esc(th.name) : '') + '"><div class="cvw">' + pinCoverHTML(th, l, sky) + '</div>' +
|
||||
'<div class="nb"><h3>每一颗星星,都是一位孕妈的一句话</h3><span class="ntg k-whs">#孕妈悄悄话</span>' +
|
||||
'<div class="nf"><i class="pav" aria-hidden="true"><svg viewBox="0 0 20 20" width="10" height="10"><path d="M10 .5C10.9 7.4 12.6 9.1 19.5 10 12.6 10.9 10.9 12.6 10 19.5 9.1 12.6 7.4 10.9.5 10 7.4 9.1 9.1 7.4 10 .5Z" fill="currentColor"/></svg></i><span class="nm">' + PIN_WK + '周孕妈悄悄话</span><span class="pgo">去看看 ›</span></div></div></button>';
|
||||
}
|
||||
var PIN_SKY = [[14,14,0,-1.2,2.4],[38,8,0,-.3,2],[62,20,1,-2.4,2.8],[86,12,0,-3.1,2.2],[24,34,1,-3.7,2.6],[50,40,0,-1.6,3.2],[80,32,0,-2.2,2.6],[10,52,0,-.8,3],[70,50,1,-1.9,2.4],[90,58,0,-2.8,3]];
|
||||
function pinSky() { return PIN_SKY.map(function (k) { return '<i' + (k[2] ? ' class="b"' : '') + ' style="left:' + k[0] + '%;top:' + k[1] + '%;animation-delay:' + k[3] + 's;animation-duration:' + k[4] + 's"></i>'; }).join(''); }
|
||||
function whRoll() {
|
||||
clearInterval(whT); whRi = 0;
|
||||
var el = document.getElementById('pinRl'), l = WHD ? (WHD.list || []).filter(function (x) { return !x.mine; }) : [];
|
||||
if (!el || !l.length) return;
|
||||
el.textContent = '“' + l[0].text + '”';
|
||||
var els = ['pinRl', 'pinRl2'].map(function (x) { return document.getElementById(x); }).filter(Boolean), l = WHD ? (WHD.list || []).filter(function (x) { return !x.mine; }) : [];
|
||||
if (!els.length || !l.length) return;
|
||||
els.forEach(function (el) { el.textContent = '“' + l[0].text + '”'; });
|
||||
if (l.length < 2) return;
|
||||
whT = setInterval(function () {
|
||||
var e2 = document.getElementById('pinRl'); if (!e2) { clearInterval(whT); return; } if (document.hidden) return;
|
||||
whRi = (whRi + 1) % l.length; e2.classList.add('out');
|
||||
setTimeout(function () { e2.textContent = '“' + l[whRi].text + '”'; e2.classList.remove('out'); }, 260);
|
||||
var es = ['pinRl', 'pinRl2'].map(function (x) { return document.getElementById(x); }).filter(Boolean);
|
||||
if (!es.length) { clearInterval(whT); return; } if (document.hidden) return;
|
||||
whRi = (whRi + 1) % l.length; es.forEach(function (e2) { e2.classList.add('out'); });
|
||||
setTimeout(function () { es.forEach(function (e2) { e2.textContent = '“' + l[whRi].text + '”'; e2.classList.remove('out'); }); }, 260);
|
||||
}, 4000);
|
||||
}
|
||||
if (PIN_ON) fetch('/api/mp/public/mama-box/whisper?openid=' + encodeURIComponent(OPENID || '') + '&week=' + PIN_WK)
|
||||
@@ -1948,7 +1968,6 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
}, true);
|
||||
$('#wf').addEventListener('click', function (e) {
|
||||
if (e.target.closest('[data-mine]')) { haptic(); location.href = mineURL(); return; }
|
||||
if (e.target.closest('#whPin')) { haptic(); var q = new URLSearchParams(location.search); ['t', 'n', 'c'].forEach(function (k) { q.delete(k); }); q.set('wh', '1'); location.href = '../?' + q + location.hash; return; }
|
||||
if (e.target.closest('[data-fav]')) { haptic(); openFav(false); return; }
|
||||
var ts = e.target.closest('[data-test]');
|
||||
if (ts) { haptic(); location.href = ceshiURL(ts.dataset.test, catF === 'ceshi'); return; }
|
||||
@@ -2007,6 +2026,8 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
}
|
||||
function openNote(id, push) {
|
||||
var n = NBY[id]; if (!n) return;
|
||||
if (n.pin) return openPin(n, push);
|
||||
$('#dt').classList.remove('is-pin');
|
||||
var t = TBY[n.t];
|
||||
openId = id;
|
||||
$('#dav').src = avOf(n);
|
||||
@@ -2032,6 +2053,31 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
if (push) { history.pushState({ gcNote: id }, '', setQuery(cur, id)); pushed = true; }
|
||||
else history.replaceState(history.state, '', setQuery(cur, id));
|
||||
}
|
||||
/* 11-07 置顶笔记「孕妈悄悄话」详情:夜空封面(点「去星空看看」进首页星空页)+ 说明 + 留言区(同普通笔记,先审后发) */
|
||||
var PIN_PH = '对宝宝说一句悄悄话…';
|
||||
function openPin(n, push) {
|
||||
openId = n.id;
|
||||
var th = PIN_TH, l = WHD ? (WHD.list || []).filter(function (x) { return !x.mine; }) : [];
|
||||
$('#dt').classList.add('is-pin');
|
||||
$('#dav').src = 'data:image/svg+xml,' + encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#3E2F5E"/><stop offset="1" stop-color="#6B4AA8"/></linearGradient></defs><circle cx="20" cy="20" r="20" fill="url(#g)"/><path transform="translate(10 10)" d="M10 .5C10.9 7.4 12.6 9.1 19.5 10 12.6 10.9 10.9 12.6 10 19.5 9.1 12.6 7.4 10.9.5 10 7.4 9.1 9.1 7.4 10 .5Z" fill="#FFE2B8"/></svg>');
|
||||
$('#dnm').textContent = '孕妈悄悄话';
|
||||
$('#dst').textContent = th ? '本周话题 · ' + th.name : '';
|
||||
$('#dsc').innerHTML = '<div class="dcv">' + pinCoverHTML(th, l, pinSky(), true) + '</div>' +
|
||||
'<div class="dbody"><h2>每一颗星星,都是一位孕妈的一句话</h2><div class="tx">' +
|
||||
'<p>这周的话题是「' + esc(th ? th.name : '说给宝宝听的悄悄话') + '」。' + esc(th && th.tip ? th.tip + '。' : '') + '</p>' +
|
||||
'<p>在下面留言区写一句,审核通过后大家都能看到。点赞多的悄悄话会挂上星空,变成一颗星星,同孕周的妈妈点一下,就能看到它像流星一样划过。</p>' +
|
||||
'<p>一天最多说 3 句,每一句都会被认真对待。</p></div>' +
|
||||
'<div class="tm">孕妈悄悄话 · 置顶</div></div>' +
|
||||
'<div class="cm" id="cmw"><div class="cm-h" id="cmh"></div>' +
|
||||
'<div class="cm-in"><span class="me">我</span><button type="button" id="cmgo">' + PIN_PH + '</button></div>' +
|
||||
'<div id="cml"></div><div class="cm-end">— 没有更多悄悄话了 —</div></div>';
|
||||
renderComments(n); syncBar(n); loadRC(n); whRoll();
|
||||
$('#cin').value = ''; $('#cin').placeholder = PIN_PH; if (CP) CP.clear(); $('#bar').classList.remove('typing'); $('#csend').disabled = true;
|
||||
$('#dsc').scrollTop = 0; $('#dnav').classList.remove('on');
|
||||
var dt = $('#dt'); dt.classList.add('show'); dt.setAttribute('aria-hidden', 'false');
|
||||
if (push) { history.pushState({ gcNote: n.id }, '', setQuery(cur, n.id)); pushed = true; }
|
||||
else history.replaceState(history.state, '', setQuery(cur, n.id));
|
||||
}
|
||||
function hideNote() {
|
||||
var dt = $('#dt'); dt.classList.remove('show'); dt.setAttribute('aria-hidden', 'true');
|
||||
$('#cin').blur();
|
||||
@@ -2073,7 +2119,8 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
}
|
||||
var rr = e.target.closest('[data-rk]');
|
||||
if (rr) { REPLY = { k: rr.dataset.rk, n: rr.dataset.rn }; cin.placeholder = '回复 ' + REPLY.n + ':'; cin.focus(); return; }
|
||||
if (e.target.closest('#cmgo')) { REPLY = null; cin.placeholder = '说点什么…'; $('#cin').focus(); }
|
||||
if (e.target.closest('#cmgo')) { REPLY = null; cin.placeholder = (NBY[openId] || {}).pin ? PIN_PH : '说点什么…'; $('#cin').focus(); }
|
||||
if (e.target.closest('[data-star]')) { haptic(); var q = new URLSearchParams(location.search); ['t', 'n', 'c'].forEach(function (k) { q.delete(k); }); q.set('wh', '1'); location.href = '../?' + q + location.hash; }
|
||||
});
|
||||
$('#blk').addEventListener('click', function () {
|
||||
var n = NBY[openId]; if (!n) return;
|
||||
@@ -2096,7 +2143,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
if (CP) { $('#cemo').innerHTML = MBCmPics.EMO_ICON; $('#cemo').addEventListener('mousedown', function (e) { e.preventDefault(); }); $('#cemo').addEventListener('click', function (e) { e.preventDefault(); $('#bar').classList.add('typing'); CP.toggleEmo(); }); }
|
||||
else { $('#cpic').remove(); $('#cemo').remove(); }
|
||||
cin.addEventListener('focus', function () { $('#bar').classList.add('typing'); });
|
||||
cin.addEventListener('blur', function () { setTimeout(function () { if (!canSend() && !(CP && CP.emoOpen())) { $('#bar').classList.remove('typing'); REPLY = null; cin.placeholder = '说点什么…'; } }, 120); });
|
||||
cin.addEventListener('blur', function () { setTimeout(function () { if (!canSend() && !(CP && CP.emoOpen())) { $('#bar').classList.remove('typing'); REPLY = null; cin.placeholder = (NBY[openId] || {}).pin ? PIN_PH : '说点什么…'; } }, 120); });
|
||||
cin.addEventListener('input', function () { $('#csend').disabled = !canSend(); });
|
||||
cin.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); send(); } });
|
||||
$('#csend').addEventListener('click', send);
|
||||
@@ -2115,7 +2162,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
send.busy = false;
|
||||
if (!j || j.code !== 200) { $('#csend').disabled = !canSend(); toast((j && j.message) || '没发出去,稍后再试'); return; }
|
||||
var rc = RC[n.id] || (RC[n.id] = { list: [], mine: [] }); rc.mine.unshift(j.result);
|
||||
var wasReply = !!REPLY; REPLY = null; cin.placeholder = '说点什么…';
|
||||
var wasReply = !!REPLY; REPLY = null; cin.placeholder = (NBY[openId] || {}).pin ? PIN_PH : '说点什么…';
|
||||
haptic();
|
||||
cin.value = ''; if (CP) CP.clear(); $('#csend').disabled = true; cin.blur(); $('#bar').classList.remove('typing');
|
||||
if (openId === n.id) { renderComments(n); syncBar(n); }
|
||||
@@ -2464,6 +2511,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
||||
/* 11-04 微信转发图:跟着地址走 —— ?n= 笔记(g/<id>.jpg,真实投稿用广场图)、?t= 话题(g/t-<id>.jpg)、?c=ceshi 测试列表、其余广场首页;见 js/share-card.js */
|
||||
if (window.mbShareWatch) window.mbShareWatch(function () {
|
||||
var q = new URLSearchParams(location.search), n = NBY[q.get('n')], t = TBY[q.get('t')];
|
||||
if (n && n.pin) return ['../assets/share/g/home.jpg', '孕妈悄悄话|每一颗星星,都是一位孕妈对宝宝说的一句话']; /* 11-07 置顶笔记暂用广场首页图 */
|
||||
if (n) return n.real ? ['../assets/share/g/home.jpg', n.title] : ['../assets/share/g/' + n.id + '.jpg', n.title];
|
||||
if (t) return ['../assets/share/g/t-' + t.id + '.jpg', '#' + t.name + '#'];
|
||||
if (q.get('c') === 'ceshi') return ['../assets/share/g/ceshi.jpg', '趣味小测试|30 个孕育小测试,1 分钟测出你是哪种孕妈'];
|
||||
|
||||
Reference in New Issue
Block a user