feat(creator-studio): 图片宽度四档与作者行

- 通过 editor.BlockEdit 过滤器给 core/image 增加「半屏 / 中等 / 通栏 / 全宽」
  四档宽度,选中图片时出现在区块工具条;宽度写入 className 并序列化到
  post_content,前台样式即可生效,无需自定义区块或额外元数据
- 前台样式:半屏靠左 50%,中等 72%,通栏跟随正文行宽,全宽突破行宽但受容器
  内边距约束;移动端半屏与全宽回退为整行,避免横向滚动
- 新增作者行(头像 + 昵称 + 身份说明),数据由 CreatorRest::author_payload()
  从服务端给出,前端不自行拼装;无昵称时整行不渲染,头像缺失时回退首字占位
- 作者行放在摘要之后、正文之前

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-06 16:05:19 +08:00
1 parent 79909f449e
commit f5e9420266
11 files changed
+680 -39

No files matched your search

+1 -1
View File
@@ -1 +1 @@
<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-data', 'wp-element', 'wp-i18n', 'wp-wordcount'), 'version' => '82caafe73e40bfbf13d5');
<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-wordcount'), 'version' => '71ff9994e44c86df3517');
+1 -1
View File
@@ -1 +1 @@
.jio-page-submit{background:#fafbfa}.jio-page-submit .float-btn,.jio-page-submit .footer,.jio-page-submit .footer-tabbar,.jio-page-submit .header,.jio-page-submit .jio-float-buttons{display:none!important}.jio-page-submit #main-content.container{max-width:none;padding:0}#jio-creator-studio.is-ready{display:block}.jio-creator{--jc-ink:#243330;--jc-ink-soft:#5c6b66;--jc-paper:#fafbfa;--jc-line:#e2e9e5;--jc-accent:#267665;--jc-accent-strong:#1d5f52;--jc-warn:#b4573f;--jc-bar:60px;-webkit-font-smoothing:antialiased;background:var(--jc-paper);color:var(--jc-ink);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans SC,PingFang SC,Microsoft YaHei,sans-serif;min-height:100vh;min-height:100dvh}.jio-creator *,.jio-creator :after,.jio-creator :before{box-sizing:border-box}.jio-creator button{color:inherit;font:inherit}.jio-creator__bar{align-items:center;backdrop-filter:blur(10px);background:rgba(250,251,250,.92);border-bottom:1px solid var(--jc-line);display:flex;gap:16px;height:var(--jc-bar);padding:0 clamp(16px,4vw,40px);position:sticky;top:0;z-index:30}.jio-creator__back{align-items:center;color:var(--jc-ink-soft);display:inline-flex;gap:6px;text-decoration:none}.jio-creator__back:focus-visible,.jio-creator__back:hover{color:var(--jc-accent)}.jio-creator__brand{color:var(--jc-ink-soft);font-size:13px;letter-spacing:.06em;margin-right:auto}.jio-creator__actions{align-items:center;display:flex;gap:10px}.jio-creator__save{align-items:center;color:var(--jc-ink-soft);display:inline-flex;font-size:13px;gap:6px}.jio-creator__save>i{color:var(--jc-line);font-size:7px}.jio-creator__save time{font-variant-numeric:tabular-nums;opacity:.7}.jio-creator__save.is-saved>i{color:var(--jc-accent)}.jio-creator__save.is-conflict,.jio-creator__save.is-conflict>i,.jio-creator__save.is-error,.jio-creator__save.is-error>i{color:var(--jc-warn)}.jio-creator__btn,.jio-creator__ghost,.jio-creator__primary{align-items:center;border:1px solid transparent;border-radius:8px;cursor:pointer;display:inline-flex;font-size:14px;justify-content:center;min-height:36px;padding:0 16px;transition:background .18s ease,border-color .18s ease,color .18s ease}.jio-creator__ghost{background:transparent;border-color:var(--jc-line)}.jio-creator__ghost:focus-visible,.jio-creator__ghost:hover{border-color:var(--jc-accent);color:var(--jc-accent)}.jio-creator__primary{background:var(--jc-accent);color:#fff}.jio-creator__primary:focus-visible,.jio-creator__primary:hover{background:var(--jc-accent-strong)}.jio-creator__primary:disabled{cursor:not-allowed;opacity:.5}.jio-creator__notice{align-items:center;background:#f1f5f2;border-bottom:1px solid var(--jc-line);color:var(--jc-ink-soft);display:flex;font-size:13px;gap:12px;margin:0 auto;max-width:820px;padding:10px 16px}.jio-creator__notice>span{flex:1}.jio-creator__notice button{background:transparent;border:0;color:var(--jc-accent);cursor:pointer}.jio-creator__notice.is-error{background:#fdf2ee;color:var(--jc-warn)}.jio-creator__hint{color:var(--jc-ink-soft);font-size:13px;margin:18px auto 0;max-width:820px;padding:0 clamp(16px,4vw,40px)}.jio-creator__canvas{margin:0 auto;padding:clamp(20px,4vw,44px) clamp(20px,5vw,52px) 140px;width:min(720px,100%)}.jio-creator__title{display:block;margin-bottom:6px}.jio-creator__title textarea{background:transparent;border:0;color:var(--jc-ink);font-family:Songti SC,"Noto Serif SC","Source Han Serif SC",serif;font-size:clamp(23px,2.6vw,27px);font-weight:500;letter-spacing:.01em;line-height:1.4;min-height:50px;padding:0;resize:none;width:100%}.jio-creator__title textarea:focus{outline:0}.jio-creator__title textarea::-moz-placeholder{color:#b7c2bd}.jio-creator__title textarea::placeholder{color:#b7c2bd}.jio-creator__excerpt{display:block;margin-bottom:22px}.jio-creator__excerpt>span{color:#9aa8a2;display:block;font-size:12px;letter-spacing:.02em;margin-bottom:4px}.jio-creator__excerpt textarea{background:transparent;border:0;color:var(--jc-ink-soft);font-family:inherit;font-size:14px;line-height:1.7;padding:6px 0;resize:none;width:100%}.jio-creator__excerpt textarea:focus{outline:0}.jio-creator__editor{min-height:40vh;position:relative}.jio-creator__editor .block-editor-writing-flow{font-size:16px;letter-spacing:.01em;line-height:1.85}.jio-creator__editor .block-editor-default-block-appender textarea.block-editor-default-block-appender__content{color:#b7c2bd}.jio-creator__editor .block-editor-block-list__layout{padding-bottom:40px}.jio-creator__editor .wp-block{max-width:none}.jio-creator__editor .block-editor-block-list__block{margin-bottom:1.1em;margin-top:0}.jio-creator__editor .block-editor-block-list__block[data-type="core/heading"]{margin-top:1.6em}.jio-creator__editor .block-editor-block-list__block.is-hovered:after,.jio-creator__editor .block-editor-block-list__block.is-selected:after{border-radius:3px;box-shadow:0 0 0 1.5px rgba(38,118,101,.35)}.jio-creator__editor .block-editor-block-contextual-toolbar{margin-left:0}.jio-creator__editor .block-editor-block-contexLine truncated
.jio-page-submit{background:#fafbfa}.jio-page-submit .float-btn,.jio-page-submit .footer,.jio-page-submit .footer-tabbar,.jio-page-submit .header,.jio-page-submit .jio-float-buttons{display:none!important}.jio-page-submit #main-content.container{max-width:none;padding:0}#jio-creator-studio.is-ready{display:block}.jio-creator{--jc-ink:#243330;--jc-ink-soft:#5c6b66;--jc-paper:#fafbfa;--jc-line:#e2e9e5;--jc-accent:#267665;--jc-accent-strong:#1d5f52;--jc-warn:#b4573f;--jc-bar:60px;-webkit-font-smoothing:antialiased;background:var(--jc-paper);color:var(--jc-ink);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans SC,PingFang SC,Microsoft YaHei,sans-serif;min-height:100vh;min-height:100dvh}.jio-creator *,.jio-creator :after,.jio-creator :before{box-sizing:border-box}.jio-creator button{color:inherit;font:inherit}.jio-creator__bar{align-items:center;backdrop-filter:blur(10px);background:rgba(250,251,250,.92);border-bottom:1px solid var(--jc-line);display:flex;gap:16px;height:var(--jc-bar);padding:0 clamp(16px,4vw,40px);position:sticky;top:0;z-index:30}.jio-creator__back{align-items:center;color:var(--jc-ink-soft);display:inline-flex;gap:6px;text-decoration:none}.jio-creator__back:focus-visible,.jio-creator__back:hover{color:var(--jc-accent)}.jio-creator__brand{color:var(--jc-ink-soft);font-size:13px;letter-spacing:.06em;margin-right:auto}.jio-creator__actions{align-items:center;display:flex;gap:10px}.jio-creator__save{align-items:center;color:var(--jc-ink-soft);display:inline-flex;font-size:13px;gap:6px}.jio-creator__save>i{color:var(--jc-line);font-size:7px}.jio-creator__save time{font-variant-numeric:tabular-nums;opacity:.7}.jio-creator__save.is-saved>i{color:var(--jc-accent)}.jio-creator__save.is-conflict,.jio-creator__save.is-conflict>i,.jio-creator__save.is-error,.jio-creator__save.is-error>i{color:var(--jc-warn)}.jio-creator__btn,.jio-creator__ghost,.jio-creator__primary{align-items:center;border:1px solid transparent;border-radius:8px;cursor:pointer;display:inline-flex;font-size:14px;justify-content:center;min-height:36px;padding:0 16px;transition:background .18s ease,border-color .18s ease,color .18s ease}.jio-creator__ghost{background:transparent;border-color:var(--jc-line)}.jio-creator__ghost:focus-visible,.jio-creator__ghost:hover{border-color:var(--jc-accent);color:var(--jc-accent)}.jio-creator__primary{background:var(--jc-accent);color:#fff}.jio-creator__primary:focus-visible,.jio-creator__primary:hover{background:var(--jc-accent-strong)}.jio-creator__primary:disabled{cursor:not-allowed;opacity:.5}.jio-creator__notice{align-items:center;background:#f1f5f2;border-bottom:1px solid var(--jc-line);color:var(--jc-ink-soft);display:flex;font-size:13px;gap:12px;margin:0 auto;max-width:820px;padding:10px 16px}.jio-creator__notice>span{flex:1}.jio-creator__notice button{background:transparent;border:0;color:var(--jc-accent);cursor:pointer}.jio-creator__notice.is-error{background:#fdf2ee;color:var(--jc-warn)}.jio-creator__hint{color:var(--jc-ink-soft);font-size:13px;margin:18px auto 0;max-width:820px;padding:0 clamp(16px,4vw,40px)}.jio-creator__canvas{margin:0 auto;padding:clamp(20px,4vw,44px) clamp(20px,5vw,52px) 140px;width:min(720px,100%)}.jio-creator__title{display:block;margin-bottom:6px}.jio-creator__title textarea{background:transparent;border:0;color:var(--jc-ink);font-family:Songti SC,"Noto Serif SC","Source Han Serif SC",serif;font-size:clamp(23px,2.6vw,27px);font-weight:500;letter-spacing:.01em;line-height:1.4;min-height:50px;padding:0;resize:none;width:100%}.jio-creator__title textarea:focus{outline:0}.jio-creator__title textarea::-moz-placeholder{color:#b7c2bd}.jio-creator__title textarea::placeholder{color:#b7c2bd}.jio-creator__excerpt{display:block;margin-bottom:22px}.jio-creator__excerpt>span{color:#9aa8a2;display:block;font-size:12px;letter-spacing:.02em;margin-bottom:4px}.jio-creator__excerpt textarea{background:transparent;border:0;color:var(--jc-ink-soft);font-family:inherit;font-size:14px;line-height:1.7;padding:6px 0;resize:none;width:100%}.jio-creator__excerpt textarea:focus{outline:0}.jio-creator__editor{min-height:40vh;position:relative}.jio-creator__editor .block-editor-writing-flow{font-size:16px;letter-spacing:.01em;line-height:1.85}.jio-creator__editor .block-editor-default-block-appender textarea.block-editor-default-block-appender__content{color:#b7c2bd}.jio-creator__editor .block-editor-block-list__layout{padding-bottom:40px}.jio-creator__editor .wp-block{max-width:none}.jio-creator__editor .block-editor-block-list__block{margin-bottom:1.1em;margin-top:0}.jio-creator__editor .block-editor-block-list__block[data-type="core/heading"]{margin-top:1.6em}.jio-creator__editor .block-editor-block-list__block.is-hovered:after,.jio-creator__editor .block-editor-block-list__block.is-selected:after{border-radius:3px;box-shadow:0 0 0 1.5px rgba(38,118,101,.35)}.jio-creator__editor .block-editor-block-contextual-toolbar{margin-left:0}.jio-creator__editor .block-editor-block-contexLine truncated
+1 -1
View File
@@ -1 +1 @@
(()=>{"use strict";const e={n:t=>{const a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var r in a)e.o(a,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:a[r]})},o:(e,t)=>Object.hasOwn(e,t)},t=window.React,a=window.wp.element,r=window.wp.blocks,n=window.wp.blockLibrary,o=window.wp.data,i=window.wp.blockEditor,l=window.wp.wordcount,c=window.wp.i18n;function s(e,t){const a=e&&(e.message||e.error)||(401===t?"登录状态已失效,请刷新页面重新登录。":"请求失败,请稍后重试。"),r=new Error(String(a));return r.status=t,r.code=e&&e.code?String(e.code):"",r.data=e,r}async function m(e){try{return await e.json()}catch(e){return null}}async function u(e,t,a){const r=await fetch(e,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":a},body:JSON.stringify(t)}),n=await m(r);if(!r.ok)throw s(n,r.status);return n}async function d(e,t,a,r={}){const n=new FormData;n.append("file",t),Object.entries(r).forEach(([e,t])=>n.append(e,t));const o=await fetch(e,{method:"POST",credentials:"same-origin",headers:{"X-WP-Nonce":a},body:n}),i=await m(o);if(!o.ok)throw s(i,o.status);return i}const p=window.wp.apiFetch;var _=e.n(p);const f=window.jioCreatorStudio||{},b=f.nonce||"";function y(e){const{draft:r,setDraft:n,capabilities:o,limits:i,taxonomy:l,isPublishedEdit:s,onClose:m,onSaveDraft:u,onSubmit:p,privateStorage:_,privateUploads:y,saving:E,captcha:j}=e,[g,h]=(0,a.useState)(""),[w,v]=(0,a.useState)(""),[N,k]=(0,a.useState)(!1),S=(0,a.useRef)(null),C=(0,a.useRef)(null),x=(0,a.useRef)(null);(0,a.useEffect)(()=>{const e=x.current,t=document.getElementById("jio-creator-captcha");if(!e||!t)return;const a=t.parentElement;return e.appendChild(t),t.removeAttribute("hidden"),()=>{a&&(a.appendChild(t),t.setAttribute("hidden",""))}},[]);const I=(0,a.useMemo)(()=>(r.title||"").trim().length,[r.title])>=Number(i.titleMin||1),L=()=>{const e=g.trim();if(!e)return;const t=e.split(/[,,\n]+/u).map(e=>e.trim()).filter(Boolean);n({tags:Array.from(new Set([...r.tags,...t]))}),h("")};return(0,t.createElement)("div",{className:"jio-creator-drawer",role:"dialog","aria-modal":"true","aria-labelledby":"jio-creator-publish-title"},(0,t.createElement)("button",{type:"button",className:"jio-creator-drawer__backdrop","aria-label":(0,c.__)("关闭","jio"),onClick:m}),(0,t.createElement)("div",{className:"jio-creator-drawer__panel"},(0,t.createElement)("header",{className:"jio-creator-drawer__head"},(0,t.createElement)("h2",{id:"jio-creator-publish-title"},s?(0,c.__)("提交改稿","jio"):(0,c.__)("发布文章","jio")),(0,t.createElement)("button",{type:"button",className:"jio-creator-drawer__close",onClick:m,"aria-label":(0,c.__)("关闭","jio")},(0,t.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))),(0,t.createElement)("div",{className:"jio-creator-drawer__body"},s&&(0,t.createElement)("p",{className:"jio-creator-drawer__note"},(0,c.__)("审核通过前,读者看到的仍然是当前线上版本。","jio")),(0,t.createElement)("section",{className:"jio-creator-field"},(0,t.createElement)("h3",null,(0,c.__)("封面","jio")),r.featured?.data?.url?(0,t.createElement)("div",{className:"jio-creator-cover"},(0,t.createElement)("img",{src:String(r.featured.data.url),alt:""}),(0,t.createElement)("button",{type:"button",onClick:()=>n({featured:{type:"",data:{}}}),"aria-label":(0,c.__)("移除封面","jio")},(0,t.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))):o.canUploadImage?(0,t.createElement)("label",{className:"jio-creator-cover-empty"},(0,t.createElement)("input",{ref:S,type:"file",accept:"image/*",onChange:()=>{(async()=>{const e=S.current?.files?.[0];if(e&&f.media?.uploadUrl?.image){v(""),k(!0);try{const t=await d(f.media.uploadUrl.image,e,b),a=Number(t.attachment_id||t.id||0),r=String(t.url||"");if(!a||!r)throw new Error((0,c.__)("上传后无法读取图片。","jio"));n({featured:{type:"image",mediaId:a,data:{id:a,url:r}}})}catch(e){v(String(e?.message||(0,c.__)("上传失败","jio")))}finally{k(!1)}}})()},disabled:N}),(0,t.createElement)("i",{className:"fa fas fa-plus","aria-hidden":"true"}),(0,t.createElement)("span",null,N?(0,c.__)("上传中…","jio"):(0,c.__)("上传封面","jio"))):(0,t.createElement)("p",{className:"jio-creator-muted"},(0,c.__)("当前账号不能设置封面。","jio"))),(0,t.createElement)("section",{className:"jio-creator-field"},(0,t.createElement)("h3",null,(0,c.__)("分类","jio")),(0,t.createElement)("div",{className:"jio-creator-chips"},0===l.categories.length&&(0,t.createElement)("span",{className:"jio-creator-muted"},(0,c.__)("暂无可选分类","jio")),l.categories.map(e=>(0,t.createElement)("label",{key:e.id,className:"jio-creator-chip"+(r.categories.includes(e.id)?" is-active":"")},(0,t.createElement)("input",{type:"checkbox",checked:r.categories.includes(e.id),onChange:()=>(e=>{const t=r.categories.includes(e);n({categories:t?r.categories.filter(t=>t!==e):[...r.cateLine truncated
(()=>{"use strict";const e={n:t=>{const a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var r in a)e.o(a,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:a[r]})},o:(e,t)=>Object.hasOwn(e,t)},t=window.React,a=window.wp.element,r=window.wp.blocks,n=window.wp.blockLibrary,o=window.wp.data,i=window.wp.blockEditor,l=window.wp.wordcount,c=window.wp.i18n;function s(e,t){const a=e&&(e.message||e.error)||(401===t?"登录状态已失效,请刷新页面重新登录。":"请求失败,请稍后重试。"),r=new Error(String(a));return r.status=t,r.code=e&&e.code?String(e.code):"",r.data=e,r}async function m(e){try{return await e.json()}catch(e){return null}}async function u(e,t,a){const r=await fetch(e,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":a},body:JSON.stringify(t)}),n=await m(r);if(!r.ok)throw s(n,r.status);return n}async function d(e,t,a,r={}){const n=new FormData;n.append("file",t),Object.entries(r).forEach(([e,t])=>n.append(e,t));const o=await fetch(e,{method:"POST",credentials:"same-origin",headers:{"X-WP-Nonce":a},body:n}),i=await m(o);if(!o.ok)throw s(i,o.status);return i}const p=window.wp.apiFetch;var _=e.n(p);const f=window.wp.hooks,b=window.wp.compose,y=window.wp.components,E=[{key:"half",label:(0,c.__)("半屏","jio"),className:"jio-img-w--half"},{key:"medium",label:(0,c.__)("中等","jio"),className:"jio-img-w--medium"},{key:"wide",label:(0,c.__)("通栏","jio"),className:"jio-img-w--wide"},{key:"full",label:(0,c.__)("全宽","jio"),className:"jio-img-w--full"}];function j(e){return a=>{if("core/image"!==a.name)return(0,t.createElement)(e,{...a});const r=String(a.attributes?.className||""),n=function(e){const t=E.find(t=>(e||"").split(/\s+/).includes(t.className));return t?t.key:"wide"}(r);return(0,t.createElement)(t.Fragment,null,(0,t.createElement)(e,{...a}),(0,t.createElement)(i.BlockControls,{group:"inline"},(0,t.createElement)(y.ToolbarGroup,{controls:E.map(e=>({title:e.label,children:e.label,isActive:n===e.key,onClick:()=>(e=>{const t=r.split(/\s+/).filter(e=>e&&!E.some(t=>t.className===e));a.setAttributes({className:[...t,e.className].join(" ")})})(e)}))})))}}const g=window.jioCreatorStudio||{},h=g.nonce||"";function w(e){const{draft:r,setDraft:n,capabilities:o,limits:i,taxonomy:l,isPublishedEdit:s,onClose:m,onSaveDraft:u,onSubmit:p,privateStorage:_,privateUploads:f,saving:b,captcha:y}=e,[E,j]=(0,a.useState)(""),[w,v]=(0,a.useState)(""),[N,k]=(0,a.useState)(!1),S=(0,a.useRef)(null),C=(0,a.useRef)(null),I=(0,a.useRef)(null);(0,a.useEffect)(()=>{const e=I.current,t=document.getElementById("jio-creator-captcha");if(!e||!t)return;const a=t.parentElement;return e.appendChild(t),t.removeAttribute("hidden"),()=>{a&&(a.appendChild(t),t.setAttribute("hidden",""))}},[]);const x=(0,a.useMemo)(()=>(r.title||"").trim().length,[r.title])>=Number(i.titleMin||1),L=()=>{const e=E.trim();if(!e)return;const t=e.split(/[,,\n]+/u).map(e=>e.trim()).filter(Boolean);n({tags:Array.from(new Set([...r.tags,...t]))}),j("")};return(0,t.createElement)("div",{className:"jio-creator-drawer",role:"dialog","aria-modal":"true","aria-labelledby":"jio-creator-publish-title"},(0,t.createElement)("button",{type:"button",className:"jio-creator-drawer__backdrop","aria-label":(0,c.__)("关闭","jio"),onClick:m}),(0,t.createElement)("div",{className:"jio-creator-drawer__panel"},(0,t.createElement)("header",{className:"jio-creator-drawer__head"},(0,t.createElement)("h2",{id:"jio-creator-publish-title"},s?(0,c.__)("提交改稿","jio"):(0,c.__)("发布文章","jio")),(0,t.createElement)("button",{type:"button",className:"jio-creator-drawer__close",onClick:m,"aria-label":(0,c.__)("关闭","jio")},(0,t.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))),(0,t.createElement)("div",{className:"jio-creator-drawer__body"},s&&(0,t.createElement)("p",{className:"jio-creator-drawer__note"},(0,c.__)("审核通过前,读者看到的仍然是当前线上版本。","jio")),(0,t.createElement)("section",{className:"jio-creator-field"},(0,t.createElement)("h3",null,(0,c.__)("封面","jio")),r.featured?.data?.url?(0,t.createElement)("div",{className:"jio-creator-cover"},(0,t.createElement)("img",{src:String(r.featured.data.url),alt:""}),(0,t.createElement)("button",{type:"button",onClick:()=>n({featured:{type:"",data:{}}}),"aria-label":(0,c.__)("移除封面","jio")},(0,t.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))):o.canUploadImage?(0,t.createElement)("label",{className:"jio-creator-cover-empty"},(0,t.createElement)("input",{ref:S,type:"file",accept:"image/*",onChange:()=>{(async()=>{const e=S.current?.files?.[0];if(e&&g.media?.uploadUrl?.image){v(""),k(!0);try{const t=await d(g.media.uploadUrl.image,e,h),a=Number(t.attachment_id||t.id||0),r=String(t.url||"");if(!a||!r)throw new Error((0,c.__)("上传后无法读取图片。","jio"));n({featured:{type:"image",mediaId:a,data:{id:a,url:r}}})}catch(e){v(String(e?.Line truncated
+426 -35
View File
@@ -14,9 +14,11 @@
"@wordpress/block-editor": "11.8.0",
"@wordpress/block-library": "^8.8.0",
"@wordpress/blocks": "12.8.0",
"@wordpress/components": "23.8.0",
"@wordpress/components": "^23.8.0",
"@wordpress/compose": "^6.8.0",
"@wordpress/data": "9.5.0",
"@wordpress/element": "5.8.0",
"@wordpress/hooks": "^3.31.0",
"@wordpress/i18n": "4.31.0",
"@wordpress/scripts": "26.4.0",
"@wordpress/wordcount": "3.31.0",
@@ -4834,6 +4836,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/a11y/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/a11y/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -5069,6 +5084,34 @@
"dev": true,
"license": "MIT"
},
"node_modules/@wordpress/block-editor/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/block-editor/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
@@ -5132,6 +5175,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/block-editor/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/block-editor/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -5427,6 +5483,34 @@
"react-dom": "^18.0.0"
}
},
"node_modules/@wordpress/commands/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/commands/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
@@ -5477,6 +5561,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/commands/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/commands/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -5661,23 +5758,22 @@
"license": "0BSD"
},
"node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.8.0.tgz",
"integrity": "sha512-E83cseBNGMhUMBT8IziDS0nn0zAJaJCxA0142NuSn88lLA+3Lihz9kV2djpyZz4kWGl9n2XLvoOtdHxpjJYC+A==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"@wordpress/deprecated": "^3.31.0",
"@wordpress/dom": "^3.31.0",
"@wordpress/element": "^5.8.0",
"@wordpress/is-shallow-equal": "^4.31.0",
"@wordpress/keycodes": "^3.31.0",
"@wordpress/priority-queue": "^2.31.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"clipboard": "^2.0.8",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
@@ -5688,26 +5784,6 @@
"react": "^18.0.0"
}
},
"node_modules/@wordpress/compose/node_modules/@wordpress/element": {
"version": "5.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.35.0.tgz",
"integrity": "sha512-puswpGcIdS+0A2g28uHriMkZqqRCmzFczue5Tk99VNtzBdehyk7Ae+DZ4xw5yT6GqYai8NTqv6MRwCB78uh5Mw==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/react": "^18.2.79",
"@types/react-dom": "^18.2.25",
"@wordpress/escape-html": "^2.58.0",
"change-case": "^4.1.2",
"is-plain-object": "^5.0.0",
"react": "^18.3.0",
"react-dom": "^18.3.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/core-data": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-6.35.0.tgz",
@@ -5941,6 +6017,34 @@
"react-dom": "^18.0.0"
}
},
"node_modules/@wordpress/core-data/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/core-data/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
@@ -5991,6 +6095,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/core-data/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/core-data/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -6141,6 +6258,34 @@
"react": "^18.0.0"
}
},
"node_modules/@wordpress/data/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/data/node_modules/@wordpress/element": {
"version": "5.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.35.0.tgz",
@@ -6221,6 +6366,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/deprecated/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/dom": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-3.58.0.tgz",
@@ -6325,9 +6483,9 @@
}
},
"node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"version": "3.31.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.31.0.tgz",
"integrity": "sha512-dtXTk6miFaqAQmtjuO1Ox11sdkJNMl/Wv402VlPI8Z3QBUyEAH+FMGoHbAwpy3AGHJJb5pFYSRQBNAgZMGZLIw==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
@@ -6475,6 +6633,34 @@
"react": "^18.0.0"
}
},
"node_modules/@wordpress/keyboard-shortcuts/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/keyboard-shortcuts/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
@@ -6552,6 +6738,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/keycodes/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/keycodes/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -6729,6 +6928,34 @@
"react-dom": "^18.0.0"
}
},
"node_modules/@wordpress/preferences/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/preferences/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
@@ -6779,6 +7006,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/preferences/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/preferences/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -7164,6 +7404,34 @@
"react-dom": "^18.0.0"
}
},
"node_modules/@wordpress/reusable-blocks/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/reusable-blocks/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
@@ -7214,6 +7482,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/reusable-blocks/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/reusable-blocks/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -7359,6 +7640,34 @@
"react": "^18.0.0"
}
},
"node_modules/@wordpress/rich-text/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/rich-text/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
@@ -7409,6 +7718,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/rich-text/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/rich-text/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -7837,6 +8159,34 @@
"react-dom": "^18.0.0"
}
},
"node_modules/@wordpress/server-side-render/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/server-side-render/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
@@ -7887,6 +8237,19 @@
"node": ">=12"
}
},
"node_modules/@wordpress/server-side-render/node_modules/@wordpress/hooks": {
"version": "3.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
"integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/server-side-render/node_modules/@wordpress/i18n": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
@@ -8095,6 +8458,34 @@
"react": "^18.0.0"
}
},
"node_modules/@wordpress/viewport/node_modules/@wordpress/compose": {
"version": "6.35.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz",
"integrity": "sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "^7.16.0",
"@types/mousetrap": "^1.6.8",
"@wordpress/deprecated": "^3.58.0",
"@wordpress/dom": "^3.58.0",
"@wordpress/element": "^5.35.0",
"@wordpress/is-shallow-equal": "^4.58.0",
"@wordpress/keycodes": "^3.58.0",
"@wordpress/priority-queue": "^2.58.0",
"@wordpress/undo-manager": "^0.18.0",
"change-case": "^4.1.2",
"clipboard": "^2.0.11",
"mousetrap": "^1.6.5",
"use-memo-one": "^1.1.1"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "^18.0.0"
}
},
"node_modules/@wordpress/viewport/node_modules/@wordpress/data": {
"version": "9.28.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz",
+3 -1
View File
@@ -13,9 +13,11 @@
"@wordpress/block-editor": "11.8.0",
"@wordpress/block-library": "^8.8.0",
"@wordpress/blocks": "12.8.0",
"@wordpress/components": "23.8.0",
"@wordpress/components": "^23.8.0",
"@wordpress/compose": "^6.8.0",
"@wordpress/data": "9.5.0",
"@wordpress/element": "5.8.0",
"@wordpress/hooks": "^3.31.0",
"@wordpress/i18n": "4.31.0",
"@wordpress/scripts": "26.4.0",
"@wordpress/wordcount": "3.31.0",
@@ -67,6 +67,7 @@ const mockBootstrap = {
isLoggedIn: true,
},
limits: { titleMin: 5, titleMax: 30, titlePlaceholder: '请输入标题', contentPlaceholder: '开始写作…' },
author: { name: '预览作者', avatar: '', meta: '' },
privateUploads: [],
privateStorage: false,
media: { maxBytes: 5242880, batch: 6 },
@@ -0,0 +1,40 @@
/**
* 作者行:标题下方的头像 + 昵称(公众号式)。
*
* 数据来自服务端 bootstrap,前端只负责展示;没有作者信息时整行不渲染,
* 避免出现空头像占位。
*
* @package Jio
*/
import { __ } from '@wordpress/i18n';
type Author = {
name?: string;
avatar?: string;
meta?: string;
};
export function AuthorRow({ author }: { author: Author }) {
const name = typeof author?.name === 'string' ? author.name.trim() : '';
if (name === '') {
return null;
}
const avatar = typeof author?.avatar === 'string' ? author.avatar : '';
const meta = typeof author?.meta === 'string' ? author.meta : '';
return (
<div className="jio-creator__author">
{avatar !== '' ? (
<img className="jio-creator__author-avatar" src={avatar} alt="" width={24} height={24} />
) : (
<span className="jio-creator__author-avatar is-placeholder" aria-hidden="true">
{name.slice(0, 1)}
</span>
)}
<span className="jio-creator__author-name">{name}</span>
{meta !== '' && <span className="jio-creator__author-meta">{meta}</span>}
<span className="jio-creator__author-hint">{__('原创内容', 'jio')}</span>
</div>
);
}
@@ -0,0 +1,73 @@
/**
* 图片宽度预设(公众号式四档)。
*
* 通过 block filter 给 core/image 追加「半屏 / 中等 / 通栏 / 全宽」四档宽度,
* 选中图片时出现在区块工具条里。宽度存进图片区块的 className,序列化到
* post_content 后由前台样式生效,不需要自定义区块或额外元数据。
*
* @package Jio
*/
import { addFilter } from '@wordpress/hooks';
import { createHigherOrderComponent } from '@wordpress/compose';
import { BlockControls } from '@wordpress/block-editor';
import { ToolbarGroup } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
const WIDTH_CLASSES = [
{ key: 'half', label: __('半屏', 'jio'), className: 'jio-img-w--half' },
{ key: 'medium', label: __('中等', 'jio'), className: 'jio-img-w--medium' },
{ key: 'wide', label: __('通栏', 'jio'), className: 'jio-img-w--wide' },
{ key: 'full', label: __('全宽', 'jio'), className: 'jio-img-w--full' },
];
function currentPreset(className: string): string {
const found = WIDTH_CLASSES.find((w) => (className || '').split(/\s+/).includes(w.className));
return found ? found.key : 'wide';
}
function withImageWidthControls(BlockEdit: any) {
return (props: any) => {
if (props.name !== 'core/image') {
return <BlockEdit {...props} />;
}
const className = String(props.attributes?.className || '');
const active = currentPreset(className);
const setPreset = (preset: (typeof WIDTH_CLASSES)[number]) => {
const rest = className
.split(/\s+/)
.filter((c) => c && !WIDTH_CLASSES.some((w) => w.className === c));
props.setAttributes({ className: [...rest, preset.className].join(' ') });
};
return (
<>
<BlockEdit {...props} />
<BlockControls group="inline">
<ToolbarGroup
controls={WIDTH_CLASSES.map((preset) => ({
title: preset.label,
// 用文字而不是图标,四档宽度靠标签更易分辨。
children: preset.label,
isActive: active === preset.key,
onClick: () => setPreset(preset),
}))}
/>
</BlockControls>
</>
);
};
}
export function installImageWidthPresets(): void {
if ((window as any).__jioImageWidthInstalled) {
return;
}
(window as any).__jioImageWidthInstalled = true;
addFilter(
'editor.BlockEdit',
'jio/creator-studio/image-width',
createHigherOrderComponent(withImageWidthControls, 'withJioImageWidth')
);
}
+5
View File
@@ -19,8 +19,10 @@ import { __ } from '@wordpress/i18n';
import { apiPost } from './services/api';
import { installApiFetchNonce } from './services/api-fetch';
import { installMediaUploadBridge } from './services/media';
import { installImageWidthPresets } from './extensions/image-width';
import { PublishDrawer } from './panels/publish-drawer';
import { CoverStrip } from './components/cover-strip';
import { AuthorRow } from './components/author-row';
import { InsertPanel, type InsertItem } from './panels/insert-panel';
import { buildInsertGroups } from './utils/insert-items';
import { SaveState, type SaveStateValue } from './components/save-state';
@@ -420,6 +422,8 @@ function Studio(): JSX.Element {
/>
</label>
<AuthorRow author={bootstrap.author || {}} />
<div className="jio-creator__editor">
<BlockEditorProvider
value={blocks}
@@ -497,6 +501,7 @@ function mount() {
}
installApiFetchNonce(nonce);
installMediaUploadBridge(bootstrap, nonce);
installImageWidthPresets();
target.classList.add('is-ready');
createRoot(target).render(<Studio />);
}
@@ -456,6 +456,102 @@ $warn: #b4573f;
}
}
/* ---------- 图片宽度四档 ---------- */
.jio-creator__editor,
.jio-page-submit .entry-content {
.wp-block-image {
margin-left: auto;
margin-right: auto;
img {
display: block;
width: 100%;
height: auto;
border-radius: 6px;
}
}
/* 半屏:围绕正文左侧,右侧留给说明文字。 */
.wp-block-image.jio-img-w--half {
width: 50%;
margin-left: 0;
margin-right: auto;
@media (max-width: 767px) {
width: 100%;
margin-left: auto;
}
}
.wp-block-image.jio-img-w--medium {
width: 72%;
}
.wp-block-image.jio-img-w--wide {
width: 100%;
}
/* 全宽:突破正文行宽,但受容器 padding 约束避免横向滚动。 */
.wp-block-image.jio-img-w--full {
width: calc(100% + clamp(24px, 6vw, 64px));
max-width: none;
margin-left: calc(clamp(24px, 6vw, 64px) / -2);
@media (max-width: 767px) {
width: 100%;
margin-left: 0;
}
}
}
/* ---------- 作者行 ---------- */
.jio-creator__author {
display: flex;
align-items: center;
gap: 8px;
margin: 2px 0 20px;
color: #8c9a94;
font-size: 12px;
}
.jio-creator__author-avatar {
width: 24px;
height: 24px;
flex: 0 0 auto;
border-radius: 50%;
object-fit: cover;
}
.jio-creator__author-avatar.is-placeholder {
display: inline-flex;
align-items: center;
justify-content: center;
background: #e3ece7;
color: #4a5f57;
font-size: 11px;
font-weight: 600;
}
.jio-creator__author-name {
color: #4a5f57;
font-weight: 500;
}
.jio-creator__author-meta {
padding: 1px 6px;
border-radius: 4px;
background: #eef5f2;
color: #3c7d6c;
font-size: 11px;
}
.jio-creator__author-hint {
margin-left: auto;
color: #b0bcb7;
}
/* ---------- 常驻插入按钮 ---------- */
.jio-creator__insert {
+33
View File
@@ -153,6 +153,8 @@ final class CreatorRest {
'titlePlaceholder' => (string) $settings['title_placeholder'],
'contentPlaceholder' => (string) $settings['content_placeholder'],
],
// 作者行数据由服务端给出,前端不自行拼装昵称/头像。
'author' => $this->author_payload($editable, $user_id),
'privateUploads' => $this->private_upload_rows($user_id, $post_id),
'privateStorage' => PrivateAssets::is_available(),
'media' => [
@@ -573,6 +575,37 @@ final class CreatorRest {
];
}
/**
* 作者行数据:昵称、头像与身份说明。
*
* @return array{name:string,avatar:string,meta:string}
*/
private function author_payload(?\WP_Post $editable, int $user_id): array {
$author_id = $editable instanceof \WP_Post ? (int) $editable->post_author : $user_id;
$user = $author_id > 0 ? get_userdata($author_id) : null;
if (!$user) {
return ['name' => '', 'avatar' => '', 'meta' => ''];
}
$avatar = function_exists('jio_get_avatar_url') ? (string) jio_get_avatar_url($author_id, ['size' => 64]) : '';
if ($avatar === '' && function_exists('get_avatar_url')) {
$avatar = (string) get_avatar_url($author_id, ['size' => 64]);
}
$meta = '';
if ($author_id !== $user_id) {
$meta = __('原作者', 'jio');
} elseif (function_exists('jio_get_user_vip_level') && (int) jio_get_user_vip_level($user_id) > 0) {
$meta = sprintf(__('VIP%s', 'jio'), (string) max(1, min(2, (int) jio_get_user_vip_level($user_id))));
}
return [
'name' => (string) $user->display_name,
'avatar' => $avatar,
'meta' => $meta,
];
}
/**
* @param array<string, mixed> $post_meta
* @return array<string, mixed>