The card below the writing surface only offered cover and scheduling, so paid content could only be reached through the bottom bar's 发布 button. - The card gains a 付费内容 row (rendered only with canPay): a toggle bound to draft.pay.enabled, a status line that reflects whether resources were added, and a 配置价格与付费资源 link. - Turning the toggle on opens the publish drawer and scrolls it to the pay section, so pricing is the next thing the author sees. Entering from the bottom bar keeps the drawer at the top.
10 lines
72 KiB
JavaScript
10 lines
72 KiB
JavaScript
(()=>{"use strict";const e=window.React,t=window.wp.element,a=window.wp.i18n;function n(e,t){const a=e&&(e.message||e.error)||(401===t?"登录状态已失效,请刷新页面重新登录。":"请求失败,请稍后重试。"),n=new Error(String(a));return n.status=t,n.code=e&&e.code?String(e.code):"",n.data=e,n}async function o(e){try{return await e.json()}catch(e){return null}}async function r(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)}),i=await o(r);if(!r.ok)throw n(i,r.status);return i}async function i(e,t,a,r={}){const i=new FormData;i.append("file",t),Object.entries(r).forEach(([e,t])=>i.append(e,t));const l=await fetch(e,{method:"POST",credentials:"same-origin",headers:{"X-WP-Nonce":a},body:i}),c=await o(l);if(!l.ok)throw n(c,l.status);return c}const l={url:"",attachmentId:0,extractCode:"",copyKey:"",copyVal:"",label:"",class:""};function c({row:n,buttonClasses:o,onPickAttachment:r,onSubmit:i,onClose:c}){const[s,d]=(0,t.useState)(()=>n?{url:String(n.url||""),attachmentId:Number(n.attachmentId||0),extractCode:String(n.extractCode||""),copyKey:String(n.copyKey||""),copyVal:String(n.copyVal||""),label:String(n.label||""),class:String(n.class||"")}:{...l}),[u,m]=(0,t.useState)(""),p=(0,t.useRef)(null);(0,t.useEffect)(()=>{p.current?.focus();const e=e=>{"Escape"===e.key&&(e.preventDefault(),c())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[c]);const _=e=>d(t=>({...t,...e}));return(0,e.createElement)("div",{className:"jio-creator-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"jio-creator-resource-title"},(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__backdrop","aria-label":(0,a.__)("关闭","jio"),onClick:c}),(0,e.createElement)("div",{className:"jio-creator-dialog__panel jio-creator-dialog__panel--wide"},(0,e.createElement)("header",{className:"jio-creator-dialog__head"},(0,e.createElement)("h2",{id:"jio-creator-resource-title"},n?(0,a.__)("编辑资源","jio"):(0,a.__)("添加资源","jio")),(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__close",onClick:c,"aria-label":(0,a.__)("关闭","jio")},(0,e.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))),(0,e.createElement)("div",{className:"jio-creator-dialog__body"},(0,e.createElement)("label",{className:"jio-creator-dialog__field"},(0,e.createElement)("span",null,(0,a.__)("下载地址","jio")),(0,e.createElement)("div",{className:"jio-creator-dialog__url"},(0,e.createElement)("input",{ref:p,type:"url",value:s.url,placeholder:(0,a.__)("请输入资源下载地址","jio"),onChange:e=>_({url:e.target.value,attachmentId:0}),onPaste:e=>{const t=e.clipboardData?.getData("text")||"";if(!t)return;const n=t.match(/https?:\/\/\S+/i),o=t.match(/(?:提取码|密码)\s*[::]\s*([A-Za-z0-9]{4,8})/);if(!n&&!o)return;e.preventDefault();const r={attachmentId:0};n&&(r.url=n[0].replace(/[)\],。]+$/u,"")),o&&(r.extractCode=(0,a.sprintf)(/* translators: %s: extraction code */ /* translators: %s: extraction code */
|
||
(0,a.__)("提取码:%s","jio"),o[1]),r.copyKey=(0,a.__)("提取码","jio"),r.copyVal=o[1]),_(r)}}),(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__ghost",onClick:()=>r((e,t)=>_({url:e,attachmentId:t}))},(0,e.createElement)("i",{className:"fa fas fa-upload","aria-hidden":"true"})," ",(0,a.__)("上传附件","jio"))),(0,e.createElement)("span",{className:"jio-creator-dialog__hint"},(0,a.__)("支持直接粘贴网盘分享链接,会自动识别提取码。","jio"))),(0,e.createElement)("label",{className:"jio-creator-dialog__field"},(0,e.createElement)("span",null,(0,a.__)("资源备注","jio")),(0,e.createElement)("input",{type:"text",value:s.extractCode,placeholder:(0,a.__)("例如提取码、解压密码等","jio"),onChange:e=>_({extractCode:e.target.value})})),(0,e.createElement)("div",{className:"jio-creator-dialog__row"},(0,e.createElement)("label",null,(0,e.createElement)("span",null,(0,a.__)("复制名称","jio")),(0,e.createElement)("input",{type:"text",value:s.copyKey,placeholder:(0,a.__)("如:提取码","jio"),onChange:e=>_({copyKey:e.target.value})})),(0,e.createElement)("label",null,(0,e.createElement)("span",null,(0,a.__)("复制内容","jio")),(0,e.createElement)("input",{type:"text",value:s.copyVal,placeholder:(0,a.__)("如:abcd","jio"),onChange:e=>_({copyVal:e.target.value})}))),(0,e.createElement)("span",{className:"jio-creator-dialog__hint"},(0,a.__)("填写后读者可点击按钮复制这段内容。","jio")),(0,e.createElement)("label",{className:"jio-creator-dialog__field"},(0,e.createElement)("span",null,(0,a.__)("自定义按钮文案","jio")),(0,e.createElement)("input",{type:"text",value:s.label,placeholder:(0,a.__)("留空则按网盘自动识别","jio"),onChange:e=>_({label:e.target.value})})),(0,e.createElement)("div",{className:"jio-creator-dialog__field"},(0,e.createElement)("span",null,(0,a.__)("按钮样式","jio")),(0,e.createElement)("div",{className:"jio-creator-swatches"},o.map(t=>(0,e.createElement)("button",{key:t||"default",type:"button",className:`jio-creator-swatch ${t||"b-theme"}${s.class===t?" is-active":""}`,onClick:()=>_({class:t}),title:t||(0,a.__)("默认样式","jio"),"aria-label":t||(0,a.__)("默认样式","jio"),"aria-pressed":s.class===t})))),u&&(0,e.createElement)("p",{className:"jio-creator-error"},u)),(0,e.createElement)("footer",{className:"jio-creator-dialog__foot"},(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__ghost",onClick:c},(0,a.__)("取消","jio")),(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__primary",onClick:()=>{const e=function(e){const t=e.trim();if(!t)return"";try{const e=new URL(t,window.location.href);return"http:"===e.protocol||"https:"===e.protocol?e.href:""}catch(e){return""}}(s.url);if(!e)return void m((0,a.__)("请填写有效的下载地址","jio"));m("");const t=/pan\.baidu\.com|aliyundrive\.com|alipan\.com|pan\.quark\.cn|cloud\.189\.cn|115\.com|lanzou|weiyun|123pan/i.test(e);i({...n||{},type:t?"net_disk":"direct",url:e,attachmentId:Math.max(0,Number(s.attachmentId)||0),extractCode:s.extractCode.trim(),copyKey:s.copyKey.trim(),copyVal:s.copyVal.trim(),label:s.label.trim(),class:s.class})}},(0,a.__)("确认","jio")))))}const s=(e,t=0)=>{const a=Number(e);return Number.isFinite(a)?a:t};function d({pay:n,onChange:o,canDownload:r,privateStorage:i,privateUploads:l,bootstrap:d,onUploadPrivate:u,uploading:m,uploadError:p,onPickAttachment:_}){const[f,b]=(0,t.useState)(null),h=(0,t.useRef)(null),g=e=>o({...n,...e}),y="points"===n.modo,j=String(d.currencySymbol||"¥"),v=d.downloadClasses&&d.downloadClasses.length>0?d.downloadClasses:["","c-blue","b-blue","jb-blue"],E=n.downloads,k=e=>y?(0,a.sprintf)(/* translators: %s: VIP level name */ /* translators: %s: VIP level name */(0,a.__)("%s 积分","jio"),e):(0,a.sprintf)(/* translators: %s: VIP level name */ /* translators: %s: VIP level name */(0,a.__)("%s 价格","jio"),e),w=(t,a,n,o)=>{var r;return(0,e.createElement)("label",{className:"jio-creator-input"},(0,e.createElement)("span",null,t),(0,e.createElement)("span",{className:"jio-creator-price"},o.prefix&&(0,e.createElement)("em",null,o.prefix),(0,e.createElement)("input",{type:"number",min:null!==(r=o.min)&&void 0!==r?r:0,step:o.step,value:a,placeholder:o.placeholder,onChange:e=>n(e.target.value)}),o.suffix&&(0,e.createElement)("em",null,o.suffix)))};return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"jio-creator-switch"},(0,e.createElement)("div",null,(0,e.createElement)("h3",null,(0,a.__)("付费内容","jio")),(0,e.createElement)("p",{className:"jio-creator-muted"},(0,a.__)("开启后,未购买读者只能看到免费部分;添加下载资源后同时出售下载权限。","jio"))),(0,e.createElement)("label",{className:"jio-creator-toggle"},(0,e.createElement)("input",{type:"checkbox",checked:n.enabled,onChange:e=>g({enabled:e.target.checked})}),(0,e.createElement)("span",{"aria-hidden":"true"}))),n.enabled&&(0,e.createElement)("div",{className:"jio-creator-pay"},d.pointsEnabled&&(0,e.createElement)("div",{className:"jio-creator-segment",role:"group","aria-label":(0,a.__)("支付类型","jio")},(0,e.createElement)("button",{type:"button",className:"cash"===n.modo?"is-active":"","aria-pressed":"cash"===n.modo,onClick:()=>g({modo:"cash"})},(0,a.__)("现金支付","jio")),(0,e.createElement)("button",{type:"button",className:"points"===n.modo?"is-active":"","aria-pressed":"points"===n.modo,onClick:()=>g({modo:"points"})},(0,a.__)("积分支付","jio"))),y?w((0,a.__)("设置积分","jio"),String(n.points),e=>g({points:s(e)}),{min:Number(d.pointsMin||0),step:"1",suffix:(0,a.__)("积分","jio"),placeholder:"0"}):w((0,a.__)("设置价格","jio"),n.price,e=>g({price:e}),{min:Number(d.priceMin||0),step:"0.01",prefix:j,placeholder:"0.00"}),d.vipManual&&(d.vip1Enabled||d.vip2Enabled)&&(0,e.createElement)("div",{className:"jio-creator-vip-prices"},d.vip1Enabled&&(y?w(k(String(d.vip1Name||"VIP1")),String(n.vip1Points),e=>g({vip1Points:s(e)}),{step:"1",suffix:(0,a.__)("积分","jio"),placeholder:"0"}):w(k(String(d.vip1Name||"VIP1")),n.vip1Price,e=>g({vip1Price:e}),{step:"0.01",prefix:j,placeholder:"0.00"})),d.vip2Enabled&&(y?w(k(String(d.vip2Name||"VIP2")),String(n.vip2Points),e=>g({vip2Points:s(e)}),{step:"1",suffix:(0,a.__)("积分","jio"),placeholder:"0"}):w(k(String(d.vip2Name||"VIP2")),n.vip2Price,e=>g({vip2Price:e}),{step:"0.01",prefix:j,placeholder:"0.00"})),(0,e.createElement)("p",{className:"jio-creator-muted"},(0,a.__)("会员价不能高于普通价,填 0 表示会员免费。","jio"))),r&&(0,e.createElement)("div",{className:"jio-creator-attachments"},(0,e.createElement)("div",{className:"jio-creator-attachments__head"},(0,e.createElement)("div",null,(0,e.createElement)("h4",null,(0,a.__)("付费下载","jio")),(0,e.createElement)("p",{className:"jio-creator-muted"},(0,a.__)("添加网盘链接或受保护附件,读者付费后才能下载。","jio"))),(0,e.createElement)("div",{className:"jio-creator-attachments__actions"},(0,e.createElement)("button",{type:"button",className:"jio-creator-ghost",onClick:()=>b({row:null,index:-1})},(0,e.createElement)("i",{className:"fa fas fa-plus","aria-hidden":"true"})," ",(0,a.__)("添加资源","jio")),i&&(0,e.createElement)("label",{className:"jio-creator-upload"},(0,e.createElement)("input",{ref:h,type:"file",onChange:e=>{(async e=>{if(!e)return;const t=await u(e);t&&g({enabled:!0,downloads:[...E,t]}),h.current&&(h.current.value="")})(e.target.files?.[0])},disabled:m}),(0,e.createElement)("span",null,m?(0,a.__)("上传中…","jio"):(0,a.__)("上传私有附件","jio"))))),!i&&(0,e.createElement)("p",{className:"jio-creator-muted"},(0,a.__)("私有附件存储尚未配置,只能添加外部下载地址。","jio")),p&&(0,e.createElement)("p",{className:"jio-creator-error"},p),E.length>0&&(0,e.createElement)("ul",{className:"jio-creator-files"},E.map((t,n)=>(0,e.createElement)("li",{key:`${t.assetKey||t.url}-${n}`},(0,e.createElement)("button",{type:"button",className:"jio-creator-files__name",onClick:()=>b({row:t,index:n}),title:(0,a.__)("编辑资源","jio")},(0,e.createElement)("i",{className:t.assetKey?"fa fas fa-lock":"net_disk"===t.type?"fa fas fa-cloud":"fa fas fa-link","aria-hidden":"true"}),t.label||t.extractCode||t.fileName||t.url),t.sizeLabel&&(0,e.createElement)("span",{className:"jio-creator-muted"},t.sizeLabel),(0,e.createElement)("button",{type:"button",className:"jio-creator-files__remove",onClick:()=>g({downloads:E.filter((e,t)=>t!==n)}),"aria-label":(0,a.__)("删除资源","jio")},(0,e.createElement)("i",{className:"fa far fa-trash-alt","aria-hidden":"true"}))))),l.length>0&&(0,e.createElement)("details",{className:"jio-creator-reuse"},(0,e.createElement)("summary",null,(0,a.__)("从已上传资料中选择","jio")),(0,e.createElement)("ul",null,l.filter(e=>!E.some(t=>t.assetKey===e.assetKey)).map(t=>(0,e.createElement)("li",{key:t.assetKey},(0,e.createElement)("span",null,t.fileName),(0,e.createElement)("span",{className:"jio-creator-muted"},t.sizeLabel),(0,e.createElement)("button",{type:"button",onClick:()=>g({enabled:!0,downloads:[...E,{...t,type:"protected",assetKey:t.assetKey}]})},(0,a.__)("使用","jio"))))))),(0,e.createElement)("p",{className:"jio-creator-muted"},(0,a.__)("请确保正文里已用「隐藏内容」标注了付费可见的片段。","jio"))),f&&(0,e.createElement)(c,{row:f.row,buttonClasses:v,onPickAttachment:_,onSubmit:e=>{var t;const a=null!==(t=f?.index)&&void 0!==t?t:-1,n=a>=0?E.map((t,n)=>n===a?e:t):[...E,e];b(null),g({enabled:!0,downloads:n})},onClose:()=>b(null)}))}const u=window.jioCreatorStudio||{},m=u.nonce||"";function p(n){const{draft:o,setDraft:r,capabilities:l,limits:c,taxonomy:s,isPublishedEdit:p,focusPay:_,onClose:f,onSaveDraft:b,onSubmit:h,privateStorage:g,privateUploads:y,saving:j,captcha:v}=n,[E,k]=(0,t.useState)(""),[w,N]=(0,t.useState)(""),[C,S]=(0,t.useState)(!1),x=(0,t.useRef)(null),M=(0,t.useRef)(null),$={freeAllowed:!!u.pay?.freeAllowed,vipManual:!!u.pay?.vipManual,vip1Enabled:!!u.pay?.vip1Enabled,vip2Enabled:!!u.pay?.vip2Enabled,vip1Name:String(u.pay?.vip1Name||""),vip2Name:String(u.pay?.vip2Name||""),pointsEnabled:!!u.pay?.pointsEnabled,downloadClasses:Array.isArray(u.pay?.downloadClasses)?u.pay.downloadClasses:[],currencySymbol:String(u.pay?.currencySymbol||""),priceMin:Number(u.pay?.priceMin||0),priceMax:Number(u.pay?.priceMax||0),pointsMin:Number(u.pay?.pointsMin||0),pointsMax:Number(u.pay?.pointsMax||0)};(0,t.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",""))}},[]),(0,t.useEffect)(()=>{_&&M.current?.scrollIntoView({block:"start",behavior:"smooth"})},[_]);const L=(0,t.useMemo)(()=>(o.title||"").trim().length,[o.title])>=Number(c.titleMin||1),P=()=>{const e=E.trim();if(!e)return;const t=e.split(/[,,\n]+/u).map(e=>e.trim()).filter(Boolean);r({tags:Array.from(new Set([...o.tags,...t]))}),k("")};return(0,e.createElement)("div",{className:"jio-creator-drawer",role:"dialog","aria-modal":"true","aria-labelledby":"jio-creator-publish-title"},(0,e.createElement)("button",{type:"button",className:"jio-creator-drawer__backdrop","aria-label":(0,a.__)("关闭","jio"),onClick:f}),(0,e.createElement)("div",{className:"jio-creator-drawer__panel"},(0,e.createElement)("header",{className:"jio-creator-drawer__head"},(0,e.createElement)("h2",{id:"jio-creator-publish-title"},p?(0,a.__)("提交改稿","jio"):(0,a.__)("发布文章","jio")),(0,e.createElement)("button",{type:"button",className:"jio-creator-drawer__close",onClick:f,"aria-label":(0,a.__)("关闭","jio")},(0,e.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))),(0,e.createElement)("div",{className:"jio-creator-drawer__body"},p&&(0,e.createElement)("p",{className:"jio-creator-drawer__note"},(0,a.__)("审核通过前,读者看到的仍然是当前线上版本。","jio")),(0,e.createElement)("section",{className:"jio-creator-field"},(0,e.createElement)("h3",null,(0,a.__)("分类","jio")),(0,e.createElement)("div",{className:"jio-creator-chips"},0===s.categories.length&&(0,e.createElement)("span",{className:"jio-creator-muted"},(0,a.__)("暂无可选分类","jio")),s.categories.map(t=>(0,e.createElement)("label",{key:t.id,className:"jio-creator-chip"+(o.categories.includes(t.id)?" is-active":"")},(0,e.createElement)("input",{type:"checkbox",checked:o.categories.includes(t.id),onChange:()=>(e=>{const t=o.categories.includes(e);r({categories:t?o.categories.filter(t=>t!==e):[...o.categories,e]})})(t.id)}),(0,e.createElement)("span",null,t.name))))),s.tags&&(0,e.createElement)("section",{className:"jio-creator-field"},(0,e.createElement)("h3",null,(0,a.__)("标签","jio")),(0,e.createElement)("div",{className:"jio-creator-chips"},o.tags.map(t=>(0,e.createElement)("span",{key:t,className:"jio-creator-chip is-active"},(0,e.createElement)("span",null,t),(0,e.createElement)("button",{type:"button",onClick:()=>r({tags:o.tags.filter(e=>e!==t)}),"aria-label":(0,a.sprintf)((0,a.__)("移除标签 %s","jio"),t)},(0,e.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))))),(0,e.createElement)("div",{className:"jio-creator-inline"},(0,e.createElement)("input",{type:"text",value:E,placeholder:(0,a.__)("输入标签,逗号分隔","jio"),onChange:e=>k(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),P())}}),(0,e.createElement)("button",{type:"button",onClick:P},(0,a.__)("添加","jio")))),s.customDefs.map(t=>(0,e.createElement)("section",{className:"jio-creator-field",key:t.key},(0,e.createElement)("h3",null,t.name),(0,e.createElement)("div",{className:"jio-creator-chips"},t.values.map(a=>{const n=o.custom[t.key]||[],i=n.includes(a.key);return(0,e.createElement)("label",{key:a.key,className:"jio-creator-chip"+(i?" is-active":"")},(0,e.createElement)("input",{type:"checkbox",checked:i,onChange:()=>r({custom:{...o.custom,[t.key]:i?n.filter(e=>e!==a.key):[...n,a.key]}})}),(0,e.createElement)("span",null,a.name))})))),l.canPay&&(0,e.createElement)("section",{className:"jio-creator-field",ref:M},(0,e.createElement)(d,{pay:o.pay,onChange:e=>r({pay:e}),canDownload:!!l.canPayDownload,privateStorage:g,privateUploads:y,bootstrap:$,onUploadPrivate:async e=>{N(""),S(!0);try{const t=await i(u.creator.privateUrl,e,m,{post_id:String(o.postId||0)});return{type:"protected",assetKey:String(t.asset_key||""),fileName:String(t.name||e.name),sizeBytes:Number(t.size||e.size),sizeLabel:String(t.size_label||""),label:""}}catch(e){return N(String(e?.message||(0,a.__)("资料上传失败","jio"))),null}finally{S(!1)}},uploading:C,uploadError:w,onPickAttachment:e=>{const t=window.JioSubmitMedia;t&&"function"==typeof t.open?t.open({type:"file",multiple:!1,allowExternal:!1,onSelect:t=>{const a=Array.isArray(t)?t[0]:t;a&&e(String(a.url||""),Number(a.attachment_id||a.id||0))}}):N((0,a.__)("媒体选择器尚未加载,请刷新页面后重试。","jio"))}})),!l.canPay&&l.canSaveDraft&&(0,e.createElement)("p",{className:"jio-creator-muted"},(0,a.__)("当前账号不能设置付费内容。","jio"))),(0,e.createElement)("footer",{className:"jio-creator-drawer__foot"},v&&(0,e.createElement)("div",{className:"jio-creator-drawer__captcha",ref:x}),(0,e.createElement)("div",{className:"jio-creator-drawer__actions"},(0,e.createElement)("button",{type:"button",className:"jio-creator-ghost",onClick:b,disabled:j},(0,a.__)("保存草稿","jio")),(0,e.createElement)("button",{type:"button",className:"jio-creator-primary",onClick:()=>h(!1),disabled:j||!L},p?(0,a.__)("提交审核","jio"):l.canPublishNow?(0,a.__)("发布","jio"):(0,a.__)("提交审核","jio")),l.canPublishNow&&(0,e.createElement)("button",{type:"button",className:"jio-creator-link",onClick:()=>h(!0),disabled:j||!L},(0,a.__)("立即发布","jio"))))))}function _({label:a,icon:n,items:o,ready:r,title:i,active:l=!1,width:c=216,onRememberSelection:s}){const[d,u]=(0,t.useState)(!1),m=(0,t.useRef)(null),p=(0,t.useRef)(null),[_,f]=(0,t.useState)({left:0,top:0,placement:"bottom"});(0,t.useLayoutEffect)(()=>{if(!d)return;const e=()=>{const e=m.current;if(!e)return;const t=e.getBoundingClientRect(),a=p.current?.offsetHeight||240,n=t.bottom+8+a>window.innerHeight&&t.top>a?"top":"bottom",o=Math.min(Math.max(8,t.left+t.width/2-c/2),Math.max(8,window.innerWidth-c-8)),r="bottom"===n?t.bottom+8:t.top-a-8;f({left:o,top:r,placement:n})};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[d,c]),(0,t.useEffect)(()=>{if(!d)return;const e=e=>{const t=e.target;m.current?.contains(t)||p.current?.contains(t)||u(!1)},t=e=>{"Escape"===e.key&&(u(!1),m.current?.focus())},a=()=>u(!1);return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),window.addEventListener("scroll",a,!0),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t),window.removeEventListener("scroll",a,!0)}},[d]);const b=d?(0,t.createPortal)((0,e.createElement)("div",{ref:p,className:`jio-creator__menu is-${_.placement}`,style:{left:`${_.left}px`,top:`${_.top}px`,width:`${c}px`},role:"menu","aria-label":i||a},o.map(t=>(0,e.createElement)("button",{key:t.key,type:"button",role:"menuitemradio","aria-checked":t.active?"true":"false",className:"jio-creator__menu-item"+(t.active?" is-active":""),onMouseDown:e=>e.preventDefault(),onClick:()=>{u(!1),t.onSelect()}},t.swatch?(0,e.createElement)("span",{className:"jio-creator__menu-swatch",style:{background:t.swatch},"aria-hidden":"true"}):(0,e.createElement)("i",{className:`${t.icon||"fa fas fa-check"} jio-creator__menu-icon`,"aria-hidden":"true"}),(0,e.createElement)("span",{className:"jio-creator__menu-text"},(0,e.createElement)("span",{className:"jio-creator__menu-label"},t.label),t.hint&&(0,e.createElement)("span",{className:"jio-creator__menu-hint"},t.hint)),(0,e.createElement)("i",{className:"fa fas fa-check jio-creator__menu-check","aria-hidden":"true"})))),document.body):null;return(0,e.createElement)("div",{className:"jio-creator__tool-menu"},(0,e.createElement)("button",{ref:m,type:"button",className:`jio-creator__tool-btn${l?" is-active":""}${d?" is-open":""}`,disabled:!r,onClick:()=>{s?.(),u(e=>!e)},title:i||a,"aria-label":i||a,"aria-haspopup":"menu","aria-expanded":d?"true":"false"},(0,e.createElement)("i",{className:n,"aria-hidden":"true"}),(0,e.createElement)("span",{className:"jio-creator__tool-label"},a),(0,e.createElement)("i",{className:"fa fas fa-caret-down jio-creator__tool-caret","aria-hidden":"true"})),b)}function f({label:t,icon:a,ready:n,onClick:o,title:r,active:i=!1}){return(0,e.createElement)("button",{type:"button",className:"jio-creator__tool-btn"+(i?" is-active":""),disabled:!n,onClick:o,title:r||t,"aria-label":r||t,"aria-pressed":i||void 0},(0,e.createElement)("i",{className:a,"aria-hidden":"true"}),(0,e.createElement)("span",{className:"jio-creator__tool-label"},t))}const b=[{key:"",label:(0,a.__)("灰色引用","jio"),swatch:"#555555"},{key:"qe_wzk_c-red",label:(0,a.__)("红色引用","jio"),swatch:"#dc3f3f"},{key:"qe_wzk_lan",label:(0,a.__)("蓝色引用","jio"),swatch:"#0092ff"},{key:"qe_wzk_lv",label:(0,a.__)("绿色引用","jio"),swatch:"#23790e"}],h=[{key:"reply",label:(0,a.__)("评论后可查看","jio"),icon:"fa fas fa-comment-dots"},{key:"login",label:(0,a.__)("登录后可查看","jio"),icon:"fa fas fa-sign-in-alt"},{key:"vip",label:(0,a.__)("会员可查看","jio"),icon:"fa fas fa-crown"},{key:"payshow",label:(0,a.__)("付费后可查看","jio"),icon:"fa fas fa-coins"}];function g({ready:t,canUndo:n,canRedo:o,formatValue:r,onFormatChange:i,alignValue:l,blockValue:c,capabilities:s,onCommand:d,onRememberSelection:u,onOpenLink:m,onOpenMedia:p,onInsertBlock:g,onInsertQuote:y,onInsertHidden:j}){const v=[{key:"p",label:(0,a.__)("正文","jio"),icon:"fa fas fa-paragraph"},{key:"h2",label:(0,a.__)("标题 2","jio"),icon:"fa fas fa-heading"},{key:"h3",label:(0,a.__)("标题 3","jio"),icon:"fa fas fa-heading"},{key:"h4",label:(0,a.__)("标题 4","jio"),icon:"fa fas fa-heading"}].map(e=>({...e,active:r===e.key,onSelect:()=>{i(e.key),d("format",e.key)}})),E=[{key:"ul",label:(0,a.__)("无序列表","jio"),icon:"fa fas fa-list-ul"},{key:"ol",label:(0,a.__)("有序列表","jio"),icon:"fa fas fa-list-ol"}].map(e=>({...e,active:c===e.key,onSelect:()=>g(e.key)})),k=[{key:"left",label:(0,a.__)("居左对齐","jio"),icon:"fa fas fa-align-left"},{key:"center",label:(0,a.__)("居中对齐","jio"),icon:"fa fas fa-align-center"},{key:"right",label:(0,a.__)("居右对齐","jio"),icon:"fa fas fa-align-right"}].map(e=>({...e,active:l===e.key,onSelect:()=>d("align",e.key)})),w=b.map(e=>({key:e.key||"default",label:e.label,swatch:e.swatch,active:c===(e.key||"quote"),onSelect:()=>y(e.key)})),N=h.map(e=>({key:e.key,label:e.label,icon:e.icon,onSelect:()=>j(e.key)})),C="center"===l?"fa fas fa-align-center":"right"===l?"fa fas fa-align-right":"fa fas fa-align-left",S="ol"===c?"fa fas fa-list-ol":"fa fas fa-list-ul";return(0,e.createElement)("div",{className:"jio-creator__toolbar-tools",role:"toolbar","aria-label":(0,a.__)("正文编辑工具","jio"),onMouseDown:e=>{u(),e.target.closest("button")&&e.preventDefault()}},(0,e.createElement)("div",{className:"jio-creator__toolbar-group",role:"group","aria-label":(0,a.__)("撤销和重做","jio")},(0,e.createElement)(f,{label:(0,a.__)("撤销","jio"),icon:"fa fas fa-undo",ready:n,onClick:()=>d("undo")}),(0,e.createElement)(f,{label:(0,a.__)("重做","jio"),icon:"fa fas fa-redo",ready:o,onClick:()=>d("redo")})),(0,e.createElement)("span",{className:"jio-creator__toolbar-divider","aria-hidden":"true"}),(0,e.createElement)("div",{className:"jio-creator__toolbar-group",role:"group","aria-label":(0,a.__)("段落样式","jio")},(0,e.createElement)(_,{label:(0,a.__)("标题","jio"),icon:"fa fas fa-heading",items:v,ready:t,width:168,onRememberSelection:u})),(0,e.createElement)("span",{className:"jio-creator__toolbar-divider","aria-hidden":"true"}),(0,e.createElement)("div",{className:"jio-creator__toolbar-group",role:"group","aria-label":(0,a.__)("文字格式","jio")},(0,e.createElement)(f,{label:(0,a.__)("加粗","jio"),icon:"fa fas fa-bold",ready:t,onClick:()=>d("Bold")}),(0,e.createElement)(f,{label:(0,a.__)("斜体","jio"),icon:"fa fas fa-italic",ready:t,onClick:()=>d("Italic")}),(0,e.createElement)(f,{label:(0,a.__)("下划线","jio"),icon:"fa fas fa-underline",ready:t,onClick:()=>d("Underline")})),(0,e.createElement)("span",{className:"jio-creator__toolbar-divider","aria-hidden":"true"}),(0,e.createElement)("div",{className:"jio-creator__toolbar-group",role:"group","aria-label":(0,a.__)("段落块","jio")},(0,e.createElement)(_,{label:(0,a.__)("列表","jio"),icon:S,items:E,ready:t,width:168,onRememberSelection:u,active:"ul"===c||"ol"===c}),(0,e.createElement)(_,{label:(0,a.__)("对齐","jio"),icon:C,items:k,ready:t,width:168,onRememberSelection:u,active:"left"!==l,title:(0,a.__)("对齐方式","jio")}),(0,e.createElement)(_,{label:(0,a.__)("引用","jio"),icon:"fa fas fa-quote-left",items:w,ready:t,width:168,onRememberSelection:u,active:"quote"===c||b.some(e=>e.key===c)}),s.canHide&&(0,e.createElement)(_,{label:(0,a.__)("隐藏","jio"),icon:"fa fas fa-eye-slash",items:N,ready:t,width:190,onRememberSelection:u,title:(0,a.__)("隐藏内容","jio")}),(0,e.createElement)(f,{label:(0,a.__)("分割线","jio"),icon:"fa fas fa-minus",ready:t,onClick:()=>g("divider")}),(0,e.createElement)(f,{label:(0,a.__)("代码块","jio"),icon:"fa fas fa-code",ready:t,onClick:()=>g("code")}),(0,e.createElement)(f,{label:(0,a.__)("注释","jio"),icon:"fa fas fa-comment-dots",ready:t,onClick:()=>g("footnote")}),(0,e.createElement)(f,{label:(0,a.__)("公式","jio"),icon:"fa fas fa-square-root-alt",ready:t,onClick:()=>g("math")}),(0,e.createElement)(f,{label:(0,a.__)("表格","jio"),icon:"fa fas fa-table",ready:t,onClick:()=>g("table")})),(0,e.createElement)("span",{className:"jio-creator__toolbar-divider","aria-hidden":"true"}),(0,e.createElement)("div",{className:"jio-creator__toolbar-group",role:"group","aria-label":(0,a.__)("媒体和链接","jio")},s.canUploadImage&&(0,e.createElement)(f,{label:(0,a.__)("图片","jio"),icon:"fa far fa-image",ready:t,onClick:()=>p("image")}),(s.canUploadVideo||s.canEmbed)&&(0,e.createElement)(f,{label:(0,a.__)("视频","jio"),icon:"fa fas fa-video",ready:t,onClick:()=>p("video")}),(0,e.createElement)(f,{label:(0,a.__)("链接","jio"),icon:"fa fas fa-link",ready:t,onClick:m}),s.canUploadFile&&(0,e.createElement)(f,{label:(0,a.__)("附件","jio"),icon:"fa fas fa-paperclip",ready:t,onClick:()=>p("file")})))}const y=window.jioCreatorStudio||{},j=y.nonce||"",v=e=>String(e).padStart(2,"0");function E(e){return`${e.getFullYear()}-${v(e.getMonth()+1)}-${v(e.getDate())}T${v(e.getHours())}:${v(e.getMinutes())}`}function k({featured:n,canEditCover:o,canSchedule:r,scheduleEnabled:l,scheduleAt:c,pay:s,canPay:d,onFeaturedChange:u,onScheduleChange:m,onPayEnabledChange:p,onOpenPaySettings:_}){const f=(0,t.useRef)(null),[b,h]=(0,t.useState)(!1),[g,v]=(0,t.useState)(""),k=(0,t.useMemo)(()=>E(new Date(Date.now()+3e5)),[]),w="string"==typeof n?.data?.url?n.data.url:"";return(0,e.createElement)("section",{className:"jio-creator__settings","aria-label":(0,a.__)("发布设置","jio")},(0,e.createElement)("h2",{className:"jio-creator__settings-title"},(0,a.__)("发布设置","jio")),o&&(0,e.createElement)("div",{className:"jio-creator__setting-row"},(0,e.createElement)("div",{className:"jio-creator__setting-copy"},(0,e.createElement)("span",{className:"jio-creator__setting-label"},(0,a.__)("添加封面","jio")),(0,e.createElement)("p",{className:"jio-creator__setting-help"},(0,a.__)("用于列表卡片、分享卡片;不设置时自动使用正文首图。","jio"))),(0,e.createElement)("div",{className:"jio-creator__cover-control"},w?(0,e.createElement)(e.Fragment,null,(0,e.createElement)("button",{type:"button",className:"jio-creator__cover-preview",onClick:()=>f.current?.click(),"aria-label":(0,a.__)("更换封面","jio")},(0,e.createElement)("img",{src:w,alt:""})),(0,e.createElement)("button",{type:"button",className:"jio-creator__cover-clear",onClick:()=>u({type:"",data:{}}),"aria-label":(0,a.__)("移除封面","jio")},(0,e.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))):(0,e.createElement)("button",{type:"button",className:"jio-creator__cover-add",onClick:()=>f.current?.click(),disabled:b},(0,e.createElement)("i",{className:"fa fas fa-plus","aria-hidden":"true"}),(0,e.createElement)("span",null,b?(0,a.__)("上传中…","jio"):(0,a.__)("添加封面","jio"))),(0,e.createElement)("input",{ref:f,type:"file",accept:"image/*",className:"jio-creator__cover-input",onChange:()=>{(async()=>{const e=f.current?.files?.[0],t=y.media?.uploadUrl?.image;if(e&&t){v(""),h(!0);try{const n=await i(t,e,j),o=Number(n.attachment_id||n.id||0),r=String(n.url||"");if(!o||!r)throw new Error((0,a.__)("上传后无法读取图片。","jio"));u({type:"image",mediaId:o,data:{id:o,url:r}})}catch(e){v(String(e?.message||(0,a.__)("上传失败","jio")))}finally{h(!1),f.current&&(f.current.value="")}}})()}}))),g&&(0,e.createElement)("p",{className:"jio-creator-error"},g),d&&(0,e.createElement)("div",{className:"jio-creator__setting-row"},(0,e.createElement)("div",{className:"jio-creator__setting-copy"},(0,e.createElement)("span",{className:"jio-creator__setting-label"},(0,a.__)("付费内容","jio")),(0,e.createElement)("p",{className:"jio-creator__setting-help"},s.enabled?s.downloads.length>0?(0,a.sprintf)(/* translators: %d: number of paid download resources */ /* translators: %d: number of paid download resources */
|
||
(0,a.__)("已开启,含 %d 个付费下载资源。","jio"),s.downloads.length):(0,a.__)("已开启,未购买读者只能看到免费部分。","jio"):(0,a.__)("开启后可以设置价格、会员价并添加付费下载资源。","jio")),s.enabled&&(0,e.createElement)("button",{type:"button",className:"jio-creator__setting-link",onClick:_},(0,e.createElement)("i",{className:"fa fas fa-coins","aria-hidden":"true"}),(0,a.__)("配置价格与付费资源","jio"))),(0,e.createElement)("label",{className:"jio-creator-toggle"},(0,e.createElement)("input",{type:"checkbox",checked:s.enabled,onChange:e=>{const t=e.target.checked;p(t),t&&_()}}),(0,e.createElement)("span",{"aria-hidden":"true"}))),(0,e.createElement)("div",{className:"jio-creator__setting-row"},(0,e.createElement)("div",{className:"jio-creator__setting-copy"},(0,e.createElement)("span",{className:"jio-creator__setting-label"},(0,a.__)("定时发布","jio")),(0,e.createElement)("p",{className:"jio-creator__setting-help"},r?(0,a.__)("开启后到点自动发布,发布前不会出现在文章列表。","jio"):(0,a.__)("当前账号提交后需要审核,审核通过后才会发布。","jio"))),(0,e.createElement)("label",{className:"jio-creator-toggle"},(0,e.createElement)("input",{type:"checkbox",checked:l,disabled:!r,onChange:e=>m(e.target.checked,c||E(new Date(Date.now()+36e5)))}),(0,e.createElement)("span",{"aria-hidden":"true"}))),r&&l&&(0,e.createElement)("div",{className:"jio-creator__schedule"},(0,e.createElement)("label",null,(0,e.createElement)("span",null,(0,a.__)("发布时间","jio")),(0,e.createElement)("input",{type:"datetime-local",value:c,min:k,onChange:e=>m(!0,e.target.value)})),(0,e.createElement)("p",{className:"jio-creator-muted"},(0,a.sprintf)(/* translators: %s: site timezone */ /* translators: %s: site timezone */
|
||
(0,a.__)("按站点时区(%s)发布,至少需要晚于当前时间 1 分钟。","jio"),String(y.timezone||"UTC")))))}function w({centerUrl:t,site:n,viewer:o}){const r=String(n.name||""),i=String(o.avatar||""),l=t||"/";return(0,e.createElement)("header",{className:"jio-creator__masthead"},(0,e.createElement)("div",{className:"jio-creator__masthead-left"},(0,e.createElement)("a",{className:"jio-creator__back",href:t||"/","aria-label":(0,a.__)("返回作者中心","jio")},(0,e.createElement)("i",{className:"fa fas fa-angle-left","aria-hidden":"true"})),(0,e.createElement)("a",{className:"jio-creator__brand",href:String(n.home||"/"),"aria-label":r||(0,a.__)("返回首页","jio")},n.logo?(0,e.createElement)("img",{className:"jio-creator__brand-logo",src:String(n.logo),alt:r}):(0,e.createElement)("span",{className:"jio-creator__brand-text"},r))),(0,e.createElement)("a",{className:"jio-creator__me",href:l,"aria-label":(0,a.__)("返回作者中心","jio")},i?(0,e.createElement)("img",{className:"jio-creator__me-avatar",src:i,alt:"",width:32,height:32}):(0,e.createElement)("span",{className:"jio-creator__me-avatar is-placeholder","aria-hidden":"true"},(0,e.createElement)("i",{className:"fa fas fa-user"}))))}function N(e){const t=(e.downloads||[]).map(e=>{const t="string"==typeof e.label?e.label:"",a="string"==typeof e.assetKey?e.assetKey:"";if(a)return{type:"protected",asset_key:a,label:t};const n="string"==typeof e.url?e.url.trim():"";return n?{type:"net_disk"===e.type?"net_disk":"direct",url:n,label:t,extract_code:"string"==typeof e.extractCode?e.extractCode:"",copy_key:"string"==typeof e.copyKey?e.copyKey:"",copy_val:"string"==typeof e.copyVal?e.copyVal:"",class:"string"==typeof e.class?e.class:"",attachment_id:Math.max(0,Number(e.attachmentId)||0)}:null}).filter(Boolean),a="points"===e.modo;return{enabled:!!e.enabled,fields:{pay_type:e.enabled?t.length>0?"download":"reading":"no",pay_modo:a?"points":"0",price:a?"0.00":String(e.price||"0.00"),points_price:a?Math.max(0,Number(e.points)||0):0,vip1_price:a?"0.00":String(e.vip1Price||"0.00"),vip2_price:a?"0.00":String(e.vip2Price||"0.00"),vip1_points:a?Math.max(0,Number(e.vip1Points)||0):0,vip2_points:a?Math.max(0,Number(e.vip2Points)||0):0,pay_limit:Number(e.payLimit)||0,downloads:t}}}const C=e=>e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">");function S(e){if(!e||-1===e.indexOf("data-jio-"))return e;const t=document.createElement("div");return t.innerHTML=e,t.querySelectorAll("[data-jio-math-source]").forEach(e=>{const t=e.getAttribute("data-jio-math-source")||"",a="0"!==e.getAttribute("data-jio-math-display"),n=`[jio_math display="${a?"1":"0"}"]${t}[/jio_math]`,o=e.closest("p");a&&o&&o.textContent?.trim()===e.textContent?.trim()?o.textContent=n:e.replaceWith(document.createTextNode(n))}),t.querySelectorAll("[data-jio-footnote]").forEach(e=>{const t=e.getAttribute("data-jio-footnote")||"";e.replaceWith(document.createTextNode(`[jio_footnote]${t}[/jio_footnote]`))}),t.innerHTML}function x(e){return e&&-1!==e.indexOf("[jio_")?e.replace(/\[jio_math display="([01])"\]([\s\S]*?)\[\/jio_math\]/g,(e,t,a)=>"0"===t?`<span class="jio-math" data-jio-math-source="${C(a)}" data-jio-math-display="0" contenteditable="false">${M(a)}</span>`:`<p><span class="jio-math jio-math--block" data-jio-math-source="${C(a)}" data-jio-math-display="1" contenteditable="false">${M(a)}</span></p>`).replace(/\[jio_footnote\]([\s\S]*?)\[\/jio_footnote\]/g,(e,t)=>`<sup class="jio-footnote-ref" data-jio-footnote="${C((e=>{const t=document.createElement("textarea");return t.innerHTML=e,t.value})(t))}" contenteditable="false">${t}</sup>`):e}const M=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/\^\{([^{}]*)\}|\^(\S)/gu,"<sup>$1$2</sup>").replace(/_\{([^{}]*)\}|_(\S)/gu,"<sub>$1$2</sub>"),$={ready:(0,a.__)("尚未保存","jio"),saving:(0,a.__)("保存中…","jio"),saved:(0,a.__)("已保存","jio"),error:(0,a.__)("保存失败","jio"),conflict:(0,a.__)("内容已在别处更新","jio"),submitting:(0,a.__)("提交中…","jio"),submitted:(0,a.__)("已提交","jio")};function L({value:t}){return(0,e.createElement)("span",{className:`jio-creator__save is-${t.state}`,role:"status","aria-live":"polite"},(0,e.createElement)("i",{className:"fa fas fa-circle","aria-hidden":"true"}),(0,e.createElement)("span",null,$[t.state]||$.ready),"saved"===t.state&&t.at?(0,e.createElement)("time",null,t.at):null)}const P=36e5,q=24*P,I=30*q,R=365*q,D={ready:(0,a.__)("草稿","jio"),saving:(0,a.__)("保存中","jio"),saved:(0,a.__)("草稿","jio"),error:(0,a.__)("保存失败","jio"),conflict:(0,a.__)("冲突","jio"),submitting:(0,a.__)("提交中","jio"),submitted:(0,a.__)("已提交","jio")};function z({charCount:t,saveState:n,isPublishedEdit:o,saving:r,onSaveDraft:i,onPreview:l,onPublish:c}){const s=n.at?function(e,t=Date.now()){const n=Date.parse(e);if(!Number.isFinite(n))return"";const o=Math.max(0,t-n);return o<6e4?(0,a.__)("刚刚","jio"):o<P?(0,a.sprintf)(/* translators: %d: minutes */ /* translators: %d: minutes */
|
||
(0,a.__)("%d分钟前","jio"),Math.floor(o/6e4)):o<q?(0,a.sprintf)(/* translators: %d: hours */ /* translators: %d: hours */
|
||
(0,a.__)("%d小时前","jio"),Math.floor(o/P)):o<I?(0,a.sprintf)(/* translators: %d: days */ /* translators: %d: days */
|
||
(0,a.__)("%d天前","jio"),Math.floor(o/q)):o<R?(0,a.sprintf)(/* translators: %d: months */ /* translators: %d: months */
|
||
(0,a.__)("%d个月前","jio"),Math.floor(o/I)):(0,a.sprintf)(/* translators: %d: years */ /* translators: %d: years */
|
||
(0,a.__)("%d年前","jio"),Math.floor(o/R))}(n.at):"",d=D[n.state]||D.ready;return(0,e.createElement)("footer",{className:"jio-creator__status",role:"contentinfo"},(0,e.createElement)("div",{className:"jio-creator__status-left"},(0,e.createElement)("span",{className:"jio-creator__status-count"},(0,a.__)("字数","jio"),":",t),(0,e.createElement)("span",{className:"jio-creator__status-mode"},(0,a.__)("Markdown 语法输入中","jio"))),(0,e.createElement)("div",{className:"jio-creator__status-meta"},(0,e.createElement)(L,{value:n}),(0,e.createElement)("span",{className:"jio-creator__status-dot","aria-hidden":"true"},"·"),(0,e.createElement)("span",{className:"jio-creator__status-time"},s||d)),(0,e.createElement)("div",{className:"jio-creator__status-actions"},(0,e.createElement)("button",{type:"button",className:"jio-creator__status-ghost",onClick:i,disabled:r},(0,a.__)("保存草稿","jio")),(0,e.createElement)("button",{type:"button",className:"jio-creator__status-ghost",onClick:l,disabled:r},(0,a.__)("预览","jio")),(0,e.createElement)("button",{type:"button",className:"jio-creator__status-primary",onClick:c,disabled:r},o?(0,a.__)("提交改稿","jio"):(0,a.__)("发布","jio"))))}const A=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),U=/<(?:p|div|h[1-6]|ul|ol|li|blockquote|pre|table|figure|section)\b/i,V=e=>{const t=e.trim();return""===t?"<p></p>":U.test(t)?t:`<p>${t}</p>`};const B={reply:{open:"[reply]",close:"[/reply]",label:(0,a.__)("评论后可查看","jio")},login:{open:'[jio_hide mode="login"]',close:"[/jio_hide]",label:(0,a.__)("登录后可查看","jio")},vip:{open:"[vip]",close:"[/vip]",label:(0,a.__)("会员可查看","jio")},payshow:{open:"[payshow]",close:"[/payshow]",label:(0,a.__)("付费后可查看","jio")}},K=(e,t,a)=>Math.min(a,Math.max(t,Number.isFinite(e)?Math.round(e):t)),T={table:(0,a.__)("插入表格","jio"),math:(0,a.__)("插入公式","jio"),footnote:(0,a.__)("插入注释","jio")};function F({kind:n,onSubmit:o,onClose:r}){const[i,l]=(0,t.useState)(3),[c,s]=(0,t.useState)(3),[d,u]=(0,t.useState)(!0),[m,p]=(0,t.useState)(!1),[_,f]=(0,t.useState)("a^2 + b^2 = c^2"),[b,h]=(0,t.useState)(!0),[g,y]=(0,t.useState)(""),j=(0,t.useRef)(null),v=(0,t.useRef)(null),E=(0,t.useRef)(null),k=(0,t.useRef)(null);(0,t.useEffect)(()=>{(v.current||E.current||k.current)?.focus();const e=e=>{"Escape"===e.key&&(e.preventDefault(),r())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[r]);const w=(0,t.useMemo)(()=>"footnote"===n?""!==g.trim():"math"!==n||""!==_.trim(),[n,g,_]);return(0,e.createElement)("div",{className:"jio-creator-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"jio-creator-dialog-title"},(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__backdrop","aria-label":(0,a.__)("关闭","jio"),onClick:r}),(0,e.createElement)("div",{className:"jio-creator-dialog__panel",ref:j},(0,e.createElement)("header",{className:"jio-creator-dialog__head"},(0,e.createElement)("h2",{id:"jio-creator-dialog-title"},T[n]),(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__close",onClick:r,"aria-label":(0,a.__)("关闭","jio")},(0,e.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))),(0,e.createElement)("div",{className:"jio-creator-dialog__body"},"table"===n&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"jio-creator-dialog__row"},(0,e.createElement)("label",null,(0,e.createElement)("span",null,(0,a.__)("行数","jio")),(0,e.createElement)("input",{ref:v,type:"number",min:1,max:20,value:i,onChange:e=>l(Number(e.target.value))})),(0,e.createElement)("label",null,(0,e.createElement)("span",null,(0,a.__)("列数","jio")),(0,e.createElement)("input",{type:"number",min:1,max:10,value:c,onChange:e=>s(Number(e.target.value))}))),(0,e.createElement)("label",{className:"jio-creator-dialog__check"},(0,e.createElement)("input",{type:"checkbox",checked:d,onChange:e=>u(e.target.checked)}),(0,e.createElement)("span",null,(0,a.__)("首行为表头","jio"))),(0,e.createElement)("label",{className:"jio-creator-dialog__check"},(0,e.createElement)("input",{type:"checkbox",checked:m,onChange:e=>p(e.target.checked)}),(0,e.createElement)("span",null,(0,a.__)("隔行变色","jio")))),"math"===n&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("label",{className:"jio-creator-dialog__field"},(0,e.createElement)("span",null,(0,a.__)("公式","jio")),(0,e.createElement)("textarea",{ref:E,rows:3,value:_,onChange:e=>f(e.target.value),placeholder:"a^2 + b^2 = c^2"})),(0,e.createElement)("p",{className:"jio-creator-muted"},(0,a.__)("支持上标 ^ 与下标 _,例如 x^2 与 a_n;暂不支持完整 LaTeX。","jio")),(0,e.createElement)("label",{className:"jio-creator-dialog__check"},(0,e.createElement)("input",{type:"checkbox",checked:b,onChange:e=>h(e.target.checked)}),(0,e.createElement)("span",null,(0,a.__)("独占一行显示","jio")))),"footnote"===n&&(0,e.createElement)("label",{className:"jio-creator-dialog__field"},(0,e.createElement)("span",null,(0,a.__)("注释内容","jio")),(0,e.createElement)("textarea",{ref:k,rows:4,value:g,onChange:e=>y(e.target.value),placeholder:(0,a.__)("填写要补充说明的内容","jio")}))),(0,e.createElement)("footer",{className:"jio-creator-dialog__foot"},(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__ghost",onClick:r},(0,a.__)("取消","jio")),(0,e.createElement)("button",{type:"button",className:"jio-creator-dialog__primary",onClick:()=>{w&&o("table"!==n?"math"!==n?{kind:n,note:g.trim()}:{kind:n,formula:_.trim(),display:b}:{kind:n,rows:K(i,1,20),cols:K(c,1,10),header:d,striped:m})},disabled:!w},(0,a.__)("插入","jio")))))}const O="table,pre,hr,.quote_q,.tinymce-hide,.jio-math--block";function H(e){if(!e||e.removed)return;const t=e.getDoc(),a=e.getContentAreaContainer()?.querySelector("iframe");if(!t||!a)return;const n=Math.max(320,t.documentElement.scrollHeight,t.body?t.body.scrollHeight:0);a.style.height=`${n}px`,a.style.overflow="hidden"}const J="jio-creator__block-selected",W=window.jioCreatorStudio||{},X=W.nonce||"",Y=`jio-studio-${W.sourceId||0}`,Q="jio-creator-content";function G(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Z(e){const t=String(e||"").trim();if(!t)return"";try{const e=new URL(t,window.location.href);return"http:"===e.protocol||"https:"===e.protocol?e.href:""}catch(e){return""}}function ee(e){const t=document.createElement("div");return t.innerHTML=e,(t.textContent||"").replace(/\s+/g,"")}function te(){const[n,o]=(0,t.useState)(()=>function(e){const t=e.pay||{},a=e.categories&&e.categories.selected||[],n=e.tags&&e.tags.items||[];return{postId:Number(e.sourceId||0),versionId:Number(e.versionId||0),rev:Number(e.versionRev||0),title:String(e.title||""),content:String(e.content||""),schedule:{enabled:!1,at:""},categories:a.map(Number),tags:n.slice(),custom:e.custom||{},featured:e.featured||{type:"",data:{}},pay:{enabled:!!t.enabled,modo:"points"===t.payModo?"points":"cash",price:String(t.price||"0.00"),points:Number(t.points||0),vip1Price:String(t.vip1Price||"0.00"),vip2Price:String(t.vip2Price||"0.00"),vip1Points:Number(t.vip1Points||0),vip2Points:Number(t.vip2Points||0),payLimit:Number(t.payLimit||0),downloads:Array.isArray(t.downloads)?t.downloads:[]}}}(W)),i=(0,t.useRef)(n);i.current=n;const l=(0,t.useRef)(null),c=(0,t.useRef)(null),s=(0,t.useRef)(null),d=(0,t.useRef)(!1),u=(0,t.useRef)(()=>{}),[m,_]=(0,t.useState)(!1),[f,b]=(0,t.useState)({canUndo:!1,canRedo:!1}),[h,y]=(0,t.useState)("p"),[j,v]=(0,t.useState)("left"),[E,C]=(0,t.useState)("p"),[M,$]=(0,t.useState)(()=>({state:W.sourceId||W.versionId||W.content?"saved":"ready",at:""})),[L,P]=(0,t.useState)(!1),[q,I]=(0,t.useState)(!1),[R,D]=(0,t.useState)(null),[U,K]=(0,t.useState)(null),[T,te]=(0,t.useState)(null),ae=(0,t.useRef)(!1),ne=(0,t.useRef)(0),oe=W.capabilities||{},re={titleMin:Number(W.limits?.titleMin||1),titleMax:Number(W.limits?.titleMax||30),titlePlaceholder:String(W.limits?.titlePlaceholder||(0,a.__)("请输入标题","jio")),priceMin:Number(W.pay?.priceMin||0),priceMax:Number(W.pay?.priceMax||0),pointsMin:Number(W.pay?.pointsMin||0),pointsMax:Number(W.pay?.pointsMax||0)},ie=!!W.isPublished,le=(0,t.useMemo)(()=>Array.from(ee(n.content)).length,[n.content]),ce=(0,t.useCallback)(e=>{ae.current=!0,ne.current+=1;const t={...i.current,...e};i.current=t,o(t)},[]),se=(0,t.useCallback)(e=>{if(e===i.current.content)return;ae.current=!0,ne.current+=1;const t={...i.current,content:e};i.current=t,o(t)},[]),de=(0,t.useCallback)(e=>{const t=e?.undoManager;t&&b({canUndo:"function"==typeof t.hasUndo&&t.hasUndo(),canRedo:"function"==typeof t.hasRedo&&t.hasRedo()})},[]),ue=(0,t.useCallback)(e=>{const t=e?.selection?.getNode(),a=t?e.dom.getParent(t,"p,h1,h2,h3,h4,h5,h6")||t:null,n=a?.nodeName?.toLowerCase()||"p";y(["h1","h2","h3","h4"].includes(n)?n:"p")},[]),me=(0,t.useCallback)(e=>{const t=e?.selection?.getNode();if(!t)return;const a=e.getBody(),n=String(e.formatter?.match?.(["alignleft","aligncenter","alignright"])||"");v("aligncenter"===n?"center":"alignright"===n?"right":"left");const o=e.dom.getParent(t,".quote_q",a);if(o){const e=Array.from(o.classList).find(e=>0===e.indexOf("qe_wzk_"));return void C(e||"quote")}e.dom.getParent(t,"ul",a)?C("ul"):e.dom.getParent(t,"ol",a)?C("ol"):C("p")},[]),pe=(0,t.useCallback)((e={})=>{const t=i.current;return{post_id:t.postId,version_id:t.versionId,rev:t.rev,title:t.title,content:t.content,categories:t.categories,tags:t.tags,custom:t.custom,featured:t.featured,schedule:{enabled:!!t.schedule.enabled,at:t.schedule.enabled?t.schedule.at:""},pay:N(t.pay),...e}},[]),_e=(0,t.useCallback)(async(e=!1)=>{const t=l.current;t&&!t.removed&&se(S(t.getContent()));const a=i.current;if(!ae.current&&(a.postId>0||a.versionId>0))return!0;const n=ne.current;if(""===a.title.trim()&&""===ee(a.content).trim()&&!/<(?:img|table|pre|hr|iframe|video)/i.test(a.content))return!0;$({state:"saving",at:""});try{const t=await r(W.creator.saveUrl,pe({autosave:e}),X),a={...i.current,postId:Number(t.post_id||i.current.postId||0),versionId:Number(t.version_id||i.current.versionId||0),rev:Number(t.rev||t.versionRev||i.current.rev||0)};window.jioSubmitData&&(window.jioSubmitData.postId=a.postId);const l=ne.current===n;return ae.current=!l,i.current=a,o(a),$({state:l?"saved":"saving",at:l?(new Date).toLocaleTimeString():""}),l}catch(e){return $({state:409===e?.status?"conflict":"error",at:""}),!1}},[pe]);u.current=()=>{_e(!1)};const fe=(0,t.useCallback)(async e=>{if(await _e(!1)){$({state:"submitting",at:""});try{let t="";const n=window.JioCaptcha;if(W.captcha?.enabled&&n&&"function"==typeof n.run){const e=await n.run("front_submit");if(null===e)return $({state:"ready",at:""}),void K({tone:"error",text:(0,a.__)("请先完成人机验证","jio")});t=String(e?.jio_captcha_proof||"")}const o=await r(W.creator.submitUrl,pe({post_id:i.current.postId,version_id:i.current.versionId,rev:i.current.rev,publish_now:e,captcha_proof:t}),X);ae.current=!1,$({state:"submitted",at:""}),K({tone:"ok",text:String(o.message||(0,a.__)("已提交","jio"))}),P(!1);const l=o.url||o.goto||W.urls?.center;l&&window.setTimeout(()=>{window.location.href=l},900)}catch(e){$({state:"error",at:""}),K({tone:"error",text:String(e?.message||(0,a.__)("提交失败","jio"))})}}else K({tone:"error",text:(0,a.__)("内容保存失败,请重试后再提交","jio")})},[pe,_e]),be=(0,t.useCallback)(async()=>{if(await _e(!1))try{const e=await r(W.creator.previewUrl,{post_id:i.current.postId,version_id:i.current.versionId},X);e.url&&window.open(String(e.url),"_blank","noopener")}catch(e){K({tone:"error",text:String(e?.message||(0,a.__)("预览失败","jio"))})}},[_e]),{markLocalSaved:he,clear:ge}=function({key:e,snapshot:a,onFound:n}){const o=(0,t.useRef)(a);o.current=a;const r=(0,t.useRef)(!1);return(0,t.useEffect)(()=>{if(!r.current){r.current=!0;try{const t=window.localStorage.getItem(e);if(!t)return;const o=JSON.parse(t),r="string"==typeof o.at?Date.parse(o.at):NaN;if(!Number.isFinite(r)||Date.now()-r>6048e5)return void window.localStorage.removeItem(e);"string"==typeof o.content&&o.content!==a.content&&n(String(o.at))}catch(t){window.localStorage.removeItem(e)}}},[e,n,a.content]),{markLocalSaved:(0,t.useCallback)(()=>{try{window.localStorage.setItem(e,JSON.stringify(o.current))}catch(e){}},[e]),clear:(0,t.useCallback)(()=>{try{window.localStorage.removeItem(e)}catch(e){}},[e])}}({key:Y,snapshot:{title:n.title,content:n.content,at:(new Date).toISOString()},onFound:e=>te({savedAt:e})}),ye=function({enabled:e,onSave:a,onLocal:n,remoteDelay:o=4e3,localDelay:r=1500}){const i=(0,t.useRef)(null),l=(0,t.useRef)(null),c=(0,t.useRef)(!1),s=(0,t.useRef)(a),d=(0,t.useRef)(n);s.current=a,d.current=n;const u=(0,t.useCallback)(()=>{i.current&&(window.clearTimeout(i.current),i.current=null),l.current&&(window.clearTimeout(l.current),l.current=null)},[]),m=(0,t.useCallback)(async()=>{if(!c.current){c.current=!0;try{await s.current()}finally{c.current=!1}}},[]),p=(0,t.useCallback)(()=>{u(),d.current(),e&&(l.current=window.setTimeout(()=>d.current(),r),i.current=window.setTimeout(()=>{m()},o))},[u,e,m,r,o]);return(0,t.useEffect)(()=>{if(!e)return;const t=()=>{"hidden"===document.visibilityState&&m()},a=()=>{m()};return document.addEventListener("visibilitychange",t),window.addEventListener("blur",a),()=>{document.removeEventListener("visibilitychange",t),window.removeEventListener("blur",a),u()}},[u,e,m]),(0,t.useMemo)(()=>({schedule:p,flush:m,cancel:u}),[u,m,p])}({enabled:!!oe.isLoggedIn,onSave:async()=>{const e=await _e(!0);return e&&ge(),e},onLocal:he}).schedule;(0,t.useEffect)(()=>{ae.current&&ye()},[n,ye]),(0,t.useEffect)(()=>{const e=e=>{ae.current&&(e.preventDefault(),e.returnValue="")};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[]),(0,t.useEffect)(()=>{const e=e=>{(e.metaKey||e.ctrlKey)&&"s"===e.key.toLowerCase()&&(e.preventDefault(),_e(!1))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[_e]),(0,t.useEffect)(()=>{const e=window.wp?.editor;if(!e||"function"!=typeof e.initialize)return void K({tone:"error",text:(0,a.__)("TinyMCE 加载失败,请刷新页面后重试。","jio")});const t={quicktags:!1,tinymce:{menubar:!1,statusbar:!1,resize:!1,toolbar1:"",toolbar2:"",toolbar3:"",plugins:"paste,link,lists,wordpress,wplink",wpautop:!0,body_class:"jio-creator__tinymce",content_css:W.creator?.contentCss||"",content_style:'\nbody {\n\tposition: relative;\n\tmargin: 0;\n\tcolor: #2b2b2b;\n\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;\n\tfont-size: 16px;\n\tline-height: 1.8;\n\tletter-spacing: 0.01em;\n}\np { margin: 0 0 1.1em; }\nh1, h2, h3, h4, h5, h6 { margin: 1.5em 0 0.65em; line-height: 1.4; }\nimg, iframe { max-width: 100%; }\nimg { height: auto; }\n\n/*\n * 块级删除控件。它由 editor-runtime 插进 iframe 的 body,样式必须写在这里:\n * 父页面样式表管不到 iframe 内部,缺这条规则时按钮会退化成正文顶部的常显小方块。\n * 正文是流式布局且 iframe 高度随内容增长,所以按整篇正文定位,而不是相对某个块。\n */\n#jio-block-actions {\n\tposition: absolute;\n\tz-index: 5;\n\ttop: 6px;\n\tleft: 6px;\n\topacity: 0;\n\tpointer-events: none;\n\ttransition: opacity 0.15s ease;\n}\n#jio-block-actions.is-visible {\n\topacity: 1;\n\tpointer-events: auto;\n}\n#jio-block-actions .jio-creator__block-action {\n\tdisplay: inline-flex;\n\theight: 26px;\n\talign-items: center;\n\tgap: 5px;\n\tpadding: 0 9px;\n\tborder: 1px solid #e3e7e5;\n\tborder-radius: 6px;\n\tbackground: #fff;\n\tcolor: #7d8683;\n\tfont: inherit;\n\tfont-size: 12px;\n\tline-height: 1;\n\twhite-space: nowrap;\n\tbox-shadow: 0 2px 8px rgba(24, 39, 34, 0.08);\n\tcursor: pointer;\n}\n#jio-block-actions .jio-creator__block-action-icon {\n\tfont-size: 11px;\n\tline-height: 1;\n}\n#jio-block-actions .jio-creator__block-action:hover {\n\tborder-color: #cdd6d2;\n\tcolor: #4f5957;\n}\n#jio-block-actions.is-selected .jio-creator__block-action {\n\tborder-color: #e0a99b;\n\tbackground: #fdf2ee;\n\tcolor: #b4573f;\n}\n#jio-block-actions.is-selected .jio-creator__block-action:hover {\n\tborder-color: #cf8574;\n\tbackground: #fbe7e1;\n}\n\n/* 第一次点击选中的块:虚线高亮,明确「还没删」。 */\n.jio-creator__block-selected {\n\toutline: 2px dashed rgba(180, 87, 63, 0.55);\n\toutline-offset: 3px;\n\tborder-radius: 4px;\n}\n\n/*\n * 代码块:与前台文章页保持一致,只用 pre > code。\n * 前台由 EnlighterJS 高亮,编辑器里给出同一份底色与等宽排版。\n */\npre {\n\tmargin: 0 0 1.1em;\n\tpadding: 14px 18px;\n\toverflow-x: auto;\n\tborder-radius: 8px;\n\tbackground: #f2f4f5;\n\tcolor: #2b2b2b;\n\tfont-family: Consolas, Monaco, "Courier New", monospace;\n\tfont-size: 13px;\n\tline-height: 1.6;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n}\npre code {\n\tborder: 0;\n\tbackground: transparent;\n\tcolor: inherit;\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tline-height: inherit;\n\tpadding: 0;\n\twhite-space: inherit;\n}\n\n/* 引用:与前台主题的 .quote_q 视觉一致。 */\n.quote_q {\n\tposition: relative;\n\tmargin: 10px 0 20px;\n\tpadding: 1.2em;\n\tborder-radius: 6px;\n\t--quote-color: #555;\n\tcolor: var(--quote-color);\n}\n.quote_q::before {\n\tposition: absolute;\n\tinset: 0;\n\tborder-radius: 6px;\n\tbackground: var(--quote-color);\n\tcontent: \'\';\n\topacity: 0.04;\n}\n.quote_q.quote-mce::after {\n\tposition: absolute;\n\ttop: 20px;\n\tleft: 20px;\n\twidth: 1em;\n\theight: 1em;\n\tcolor: var(--quote-color);\n\tcontent: \'\';\n\tfont-size: 1.2em;\n\tline-height: 1;\n\topacity: 0.6;\n\t/* 引号用图标字体绘制时依赖 FA;这里用内联 SVG 数据,编辑器与前台都不缺图标。 */\n\tbackground: var(--quote-color);\n\t-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath d=\'M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\'/%3E%3C/svg%3E") center / contain no-repeat;\n\tmask: url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath d=\'M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\'/%3E%3C/svg%3E") center / contain no-repeat;\n}\n.quote_q > div {\n\tposition: relative;\n\tmin-height: 24px;\n\tpadding-left: 2em;\n\topacity: 0.7;\n}\n.quote_q > div > :first-child { margin-top: 0; }\n.quote_q > div > :last-child { margin-bottom: 0; }\n.quote_q [contenteditable="true"] {\n\toutline: 0;\n\tborder-radius: 0;\n\tbox-shadow: none;\n}\n.quote_q.qe_wzk_c-red { --quote-color: #dc3f3f; }\n.quote_q.qe_wzk_lan { --quote-color: #0092ff; }\n.quote_q.qe_wzk_lv { --quote-color: #23790e; }\n\n/* 表格。 */\n.jio-content-table {\n\twidth: 100%;\n\tmargin: 0 0 1.1em;\n\tborder-collapse: collapse;\n\tfont-size: 14px;\n}\n.jio-content-table th,\n.jio-content-table td {\n\tpadding: 10px 12px;\n\tborder: 1px solid #e6e9e8;\n\tline-height: 1.6;\n}\n.jio-content-table thead th {\n\tbackground: #f6f8f7;\n\tfont-weight: 600;\n\ttext-align: left;\n}\n.jio-content-table.is-striped tbody tr:nth-child(odd) td { background: #f7f9f8; }\n\n/* 公式:独占一行时居中显示,不铺满整行底色。 */\n.jio-math {\n\tfont-family: "Cambria Math", "Latin Modern Math", "Times New Roman", serif;\n\tfont-size: 1.05em;\n\twhite-space: pre-wrap;\n}\n.jio-math--block {\n\tdisplay: block;\n\tmax-width: 100%;\n\tmargin: 0 auto;\n\tpadding: 2px 0;\n\toverflow-x: auto;\n\ttext-align: center;\n\tbackground: transparent;\n\tborder: 0;\n}\n.jio-math sup, .jio-math sub { font-size: 0.72em; }\n\n/* 隐藏内容:短代码放进 .hide-before / .hide-after,编辑器只显示可读标签。 */\n.tinymce-hide {\n\tposition: relative;\n\tmargin: 18px 0;\n\tpadding: 38px 14px 14px;\n\tborder: 1px dashed rgba(240, 68, 148, 0.35);\n\tborder-radius: 6px;\n\tbackground: rgba(240, 68, 148, 0.04);\n}\n.tinymce-hide > .hide-before,\n.tinymce-hide > .hide-after {\n\tmargin: 0;\n\tfont-family: Consolas, Monaco, monospace;\n\tfont-size: 0;\n\tline-height: 1.5;\n\tcolor: #f04494;\n}\n.tinymce-hide > .hide-before {\n\tposition: absolute;\n\ttop: 10px;\n\tleft: 14px;\n}\n.tinymce-hide > .hide-before::before {\n\tcontent: attr(data-jio-hide-label);\n\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tletter-spacing: 0.02em;\n}\n.tinymce-hide > .hide-after {\n\tdisplay: none;\n}\n.tinymce-hide > [contenteditable="true"] {\n\tmin-height: 38px;\n\tpadding: 10px;\n\tborder-radius: 4px;\n\tbackground: rgba(255, 255, 255, 0.75);\n\toutline: 0;\n}\n.tinymce-hide > [contenteditable="true"] > :first-child { margin-top: 0; }\n.tinymce-hide > [contenteditable="true"] > :last-child { margin-bottom: 0; }\n\n/* 注释:编辑器里显示上标标记,发布后由服务端渲染编号与注释列表。 */\n.jio-footnote-ref {\n\tdisplay: inline-block;\n\tmax-width: 100%;\n\tpadding: 0 6px;\n\tborder-radius: 4px;\n\tbackground: #eef5f2;\n\tcolor: #267665;\n\tfont-size: 0.78em;\n\tline-height: 1.6;\n\tvertical-align: super;\n\tcursor: default;\n}\n.jio-footnote-ref::before {\n\tcontent: \'注 \';\n\topacity: 0.6;\n}\n\n/* 附件链接。 */\n.jio-file-link {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 6px;\n\tpadding: 6px 12px;\n\tborder: 1px solid #e6e9e8;\n\tborder-radius: 6px;\n\tbackground: #f7f8f8;\n\ttext-decoration: none;\n}\n',height:520,placeholder:String(W.limits?.contentPlaceholder||""),setup:e=>{l.current=e,e.on("init",()=>{d.current=!0,_(!0),null!==s.current?(e.setContent(x(s.current)),s.current=null):e.setContent(x(e.getContent())),H(e),function(e){const t=e.getDoc();if(!t||t.getElementById("jio-block-actions"))return;const a=t.createElement("div");a.id="jio-block-actions",a.className="jio-creator__block-actions",a.setAttribute("data-mce-bogus","all"),a.innerHTML='<button type="button" class="jio-creator__block-action" data-jio-block-delete><span class="jio-creator__block-action-icon" aria-hidden="true">✕</span><span class="jio-creator__block-action-text"></span></button>',t.body.appendChild(a);const n=a.querySelector("[data-jio-block-delete]"),o=a.querySelector(".jio-creator__block-action-text");let r=null,i=null;const l=e=>"selected"===e?"再次点击删除此块":"选中此块",c=e=>{a.classList.toggle("is-selected","selected"===e),o&&(o.textContent=l(e));const t=l(e);n?.setAttribute("title",t),n?.setAttribute("aria-label",t)},s=e=>{const n=e.getBoundingClientRect(),o=Math.max(n.left+8,n.right-96);a.style.top=`${n.top+t.documentElement.scrollTop+6}px`,a.style.left=`${o+t.documentElement.scrollLeft}px`},d=e=>{e&&e!==t.body&&("P"!==e.tagName||""!==(e.textContent||"").trim()||e.querySelector("img,iframe,table,pre"))?(r=e,s(e),a.classList.add("is-visible")):a.classList.remove("is-visible")},u=()=>{i&&i.classList.remove(J),i=null,c("idle"),r?d(r):a.classList.remove("is-visible")};t.addEventListener("mouseover",e=>{const a=e.target?.closest?.("table,pre,hr,.quote_q,.tinymce-hide,p");a&&a!==t.body&&(i||d(a))}),t.addEventListener("mouseleave",()=>{r=null,i?s(i):a.classList.remove("is-visible")}),a.addEventListener("mousedown",e=>e.preventDefault()),a.addEventListener("click",t=>{const n=t.target?.closest("[data-jio-block-delete]"),o=i||r;if(!n||!o)return;if(t.preventDefault(),i!==o)return i&&i.classList.remove(J),i=o,o.classList.add(J),c("selected"),s(o),void a.classList.add("is-visible");const l=o,d=l.parentElement;l.classList.remove(J),i=null,r=null,a.classList.remove("is-visible","is-selected"),c("idle"),e.undoManager.transact(()=>{e.dom.remove(l)}),0===e.getBody().children.length&&e.setContent("<p></p>"),d&&0===d.children.length&&e.setContent("<p></p>");const u=e.getBody().firstChild;u&&e.selection.setCursorLocation(u,0),e.nodeChanged(),e.undoManager.add(),H(e)}),t.addEventListener("mousedown",e=>{a.contains(e.target)||i&&u()}),t.addEventListener("keydown",e=>{"Escape"===e.key&&i&&u()}),e.on("Undo Redo SetContent",()=>{i&&!t.body.contains(i)&&(i=null,c("idle"),a.classList.remove("is-visible","is-selected"))})}(e),de(e),ue(e),me(e)}),e.on("NodeChange",()=>{ue(e),me(e)}),e.on("input change Undo Redo AddUndo",()=>{se(S(e.getContent())),de(e),H(e)}),e.on("keydown",t=>{if((t.metaKey||t.ctrlKey)&&83===t.keyCode)return t.preventDefault(),void u.current();!function(e,t){const a=Number(t.keyCode);if(8!==a&&46!==a)return;const n=e.selection;if(!n||!n.isCollapsed())return;const o=e.getBody(),r=n.getNode(),i=(l=r)&&1===l.nodeType&&""===(l.textContent||"").trim()&&!e.dom.getParent(l,O,o)?r:null;var l;const c=i?8===a?i.previousElementSibling:i.nextElementSibling:null;if((e=>!!e&&1===e.nodeType&&!!e.matches?.(O))(c))return t.preventDefault(),e.dom.remove(c),e.nodeChanged(),void e.undoManager.add();const s=e.dom.getParent(r,O,o);if(!s)return;const d=t=>{const a=e.dom.createRng();a.selectNodeContents(s),a.collapse(t);const o=n.getRng();return o&&"function"==typeof o.compareBoundaryPoints&&0===o.compareBoundaryPoints(t?1:3,a)};if(!(8===a&&d(!0)||46===a&&d(!1)))return;t.preventDefault();const u=s.parentElement;e.dom.remove(s),u&&0===u.children.length&&(e.setContent("<p></p>"),e.selection.setCursorLocation(e.getBody().firstChild,0)),e.nodeChanged(),e.undoManager.add()}(e,t)})}}};return e.initialize(Q,t),()=>{e.remove?.(Q),d.current=!1,l.current=null}},[se,me,ue]);const je=(0,t.useCallback)(()=>{try{const e=window.localStorage.getItem(Y);if(e){const t=JSON.parse(e),a={};"string"==typeof t.title&&(a.title=t.title),"string"==typeof t.content&&(a.content=t.content),ce(a),"string"==typeof t.content&&(d.current?l.current?.setContent(t.content):s.current=t.content)}}catch(e){}te(null)},[ce]),ve=(0,t.useCallback)(()=>{const e=l.current;e&&!e.removed&&(c.current=e.selection.getBookmark(2,!0))},[]),Ee=(0,t.useCallback)(()=>{const e=l.current;if(!e||e.removed)return null;if(e.focus(),c.current){try{e.selection.moveToBookmark(c.current)}catch(e){}c.current=null}return e},[]),ke=(0,t.useCallback)((e,t)=>{const a=Ee();if(a){if("undo"===e)a.undoManager.undo();else if("redo"===e)a.undoManager.redo();else if("format"===e){const e=t||"p";a.execCommand("FormatBlock",!1,e),ue(a)}else"align"===e?(a.execCommand("center"===t?"JustifyCenter":"right"===t?"JustifyRight":"JustifyLeft"),me(a)):a.execCommand(e);a.nodeChanged()}},[Ee,me,ue]),we=(0,t.useCallback)(()=>{const e=Ee();if(!e)return;const t=window.wpLink;if(t&&"function"==typeof t.open)return void t.open(e.id);const n=window.prompt((0,a.__)("输入链接地址","jio"),"https://"),o=n?Z(n):"";o&&e.execCommand("mceInsertLink",!1,{href:o})},[Ee]),Ne=(0,t.useCallback)(e=>{const t=Ee();t&&e&&(t.insertContent(e),t.undoManager.add(),t.nodeChanged(),se(S(t.getContent())),de(t),H(t))},[Ee]),Ce=(0,t.useCallback)(e=>{if(ve(),"table"!==e&&"math"!==e&&"footnote"!==e)if("code"!==e){if("ul"===e||"ol"===e){const t=Ee();return void(t&&(t.execCommand("ol"===e?"InsertOrderedList":"InsertUnorderedList"),t.undoManager.add(),t.nodeChanged(),se(S(t.getContent())),me(t)))}"divider"===e&&Ne("<hr><p></p>")}else Ne("<pre><code></code></pre><p></p>");else D(e)},[Ee,Ne,ve,me]),Se=(0,t.useCallback)(e=>{const t=Ee();if(!t)return;if(""===String(t.selection.getContent({format:"html"})||"").trim()){const e=t.selection.getNode();e&&"P"===e.nodeName&&e.parentNode===t.getBody()&&t.selection.select(e)}const a=String(t.selection.getContent({format:"html"})||"").trim();t.undoManager.transact(()=>{t.insertContent(e(a))}),t.nodeChanged(),se(S(t.getContent())),de(t),H(t),me(t)},[Ee,me]),xe=(0,t.useCallback)(e=>{const t=Ee();if(!t)return;const a=t.dom.getParent(t.selection.getNode(),".quote_q");if(a){const n=["quote_q","quote-mce"];return e&&n.push(e),a.className=n.join(" "),t.nodeChanged(),me(t),void se(S(t.getContent()))}Se(t=>function(e,t){const a=["quote_q","quote-mce"];return t&&a.push(t),`<div class="${a.join(" ")}" contenteditable="false"><div contenteditable="true">${V(e)}</div></div><p></p>`}(t,e))},[Ee,me,Se]),Me=(0,t.useCallback)(e=>{const t=Ee();if(!t)return;const a=t.dom.getParent(t.selection.getNode(),".tinymce-hide");if(a)return function(e,t){const a=B[t];e.setAttribute("data-jio-hide-type",t);const n=e.querySelector(":scope > .hide-before"),o=e.querySelector(":scope > .hide-after");n&&(n.textContent=a.open,n.setAttribute("data-jio-hide-label",a.label)),o&&(o.textContent=a.close)}(a,e),t.nodeChanged(),void se(S(t.getContent()));Se(t=>function(e,t){const a=B[e];return`<div class="tinymce-hide" data-jio-hide-type="${e}"><p class="hide-before" data-jio-hide-label="${A(a.label)}">${A(a.open)}</p><div contenteditable="true">${V(t)}</div><p class="hide-after">${A(a.close)}</p></div><p></p>`}(e,t))},[Ee,Se]),$e=(0,t.useCallback)(e=>{D(null),"table"===e.kind?Ne(function({rows:e,cols:t,header:n,striped:o}){const r=Math.max(1,Math.min(20,e)),i=Math.max(1,Math.min(10,t)),l=e=>Array.from({length:i},(t,n)=>`<${e}>${"th"===e?A(`${(0,a.__)("列","jio")} ${n+1}`):""}</${e}>`).join("");let c="";n&&(c+=`<thead><tr>${l("th")}</tr></thead>`);const s=Math.max(1,n?r-1:r);c+=`<tbody>${Array.from({length:s},()=>`<tr>${l("td")}</tr>`).join("")}</tbody>`;const d=["jio-content-table"];return o&&d.push("is-striped"),`<table class="${d.join(" ")}">${c}</table><p></p>`}(e)):"math"===e.kind?Ne(function({formula:e,display:t}){const a=(n=e.trim(),A(n).replace(/\^\{([^{}]*)\}|\^(\S)/gu,"<sup>$1$2</sup>").replace(/_\{([^{}]*)\}|_(\S)/gu,"<sub>$1$2</sub>"));var n;const o=`data-jio-math-source="${A(e.trim())}" data-jio-math-display="${t?"1":"0"}"`;return t?`<p><span class="jio-math jio-math--block" ${o} contenteditable="false">${a}</span></p>`:`<span class="jio-math" ${o}>${a}</span>`}(e)):Ne(function(e){const t=e.trim()||(0,a.__)("注释内容","jio");return`<sup class="jio-footnote-ref" data-jio-footnote="${A(t)}" contenteditable="false">${A(t)}</sup>`}(e.note))},[Ne]),Le=(0,t.useCallback)(e=>{const t=l.current,n=window.JioSubmitMedia;t&&n&&"function"==typeof n.open?(ve(),n.open({type:e,multiple:"image"===e&&void 0,onSelect:t=>{const a=Array.isArray(t)?t:[t],n=Ee();if(!n)return;const o=a.map(t=>{const a=Z(t?.large_url||t?.url);if(!a)return"";const n=Number(t.attachment_id||t.id||0),o=n>0?` data-edit-file-id="${n}"`:"";if("image"===e){const e=Z(t?.url||a),n=e?` data-full-url="${G(e)}"`:"";return`<p><img src="${G(a)}"${o} alt="${G(String(t.name||t.title||""))}"${n}></p>`}if("file"===e){const e=String(t.filename||t.name||a.split("/").pop()||"");return`<p><a class="jio-file-link" href="${G(a)}"${o}><i class="fa fas fa-paperclip" aria-hidden="true"></i> ${G(e)}</a></p>`}return`<div contenteditable="false" data-video-url="${G(a)}" data-video-name="${G(String(t.filename||t.name||a))}"${o} class="new-dplayer post-dplayer dplayer"></div><p></p>`}).join("");o&&(n.insertContent(o),n.nodeChanged(),se(n.getContent()),de(n))},onEmbed:e=>{const t=Ee();t&&(t.insertContent(`${e}<p></p>`),t.nodeChanged(),se(t.getContent()),de(t))}})):K({tone:"error",text:(0,a.__)("媒体工具尚未加载,请刷新页面后重试。","jio")})},[Ee,ve]);return(0,e.createElement)("div",{className:"jio-creator","data-status":W.status||"","data-editor-ready":m?"true":"false"},(0,e.createElement)("div",{className:"jio-creator__top"},(0,e.createElement)(w,{centerUrl:String(W.urls?.center||""),site:W.site||{},viewer:W.viewer||{}}),(0,e.createElement)("header",{className:"jio-creator__bar"},(0,e.createElement)(g,{ready:m,formatValue:h,onFormatChange:y,alignValue:j,blockValue:E,canUndo:f.canUndo,canRedo:f.canRedo,capabilities:oe,onCommand:ke,onRememberSelection:ve,onOpenLink:we,onOpenMedia:Le,onInsertBlock:Ce,onInsertQuote:xe,onInsertHidden:Me}))),T&&(0,e.createElement)("div",{className:"jio-creator__notice",role:"status"},(0,e.createElement)("span",null,(0,a.__)("发现本地未同步的草稿。","jio")),(0,e.createElement)("button",{type:"button",onClick:je},(0,a.__)("恢复","jio")),(0,e.createElement)("button",{type:"button",onClick:()=>te(null)},(0,a.__)("忽略","jio"))),U&&(0,e.createElement)("div",{className:`jio-creator__notice is-${U.tone}`,role:"status"},(0,e.createElement)("span",null,U.text),(0,e.createElement)("button",{type:"button",onClick:()=>K(null),"aria-label":(0,a.__)("关闭","jio")},(0,e.createElement)("i",{className:"fa fas fa-times","aria-hidden":"true"}))),ie&&(0,e.createElement)("p",{className:"jio-creator__hint"},(0,a.__)("这篇改稿不会立即覆盖线上文章;审核通过后才会替换。","jio")),(0,e.createElement)("main",{className:"jio-creator__canvas"},(0,e.createElement)("label",{className:"jio-creator__title"},(0,e.createElement)("span",{className:"screen-reader-text"},(0,a.__)("文章标题","jio")),(0,e.createElement)("textarea",{value:n.title,onChange:e=>ce({title:e.target.value}),rows:1,placeholder:(0,a.sprintf)(/* translators: %d: max title length */ /* translators: %d: max title length */
|
||
(0,a.__)("请输入标题(最多 %d 个字)","jio"),Number(re.titleMax)||100),spellCheck:!1,maxLength:Number(re.titleMax)||100})),(0,e.createElement)("div",{className:"jio-creator__editor","data-editor-ready":m?"true":"false"},(0,e.createElement)("textarea",{id:Q,defaultValue:n.content,onChange:e=>se(e.target.value),"aria-label":(0,a.__)("文章正文","jio")}))),(0,e.createElement)(k,{featured:n.featured,canEditCover:!!oe.canUploadImage,canSchedule:!!oe.canSchedule,scheduleEnabled:!!n.schedule.enabled,scheduleAt:n.schedule.at,pay:n.pay,canPay:!!oe.canPay,onFeaturedChange:e=>ce({featured:e}),onScheduleChange:(e,t)=>ce({schedule:{enabled:e,at:t}}),onPayEnabledChange:e=>ce({pay:{...i.current.pay,enabled:e}}),onOpenPaySettings:()=>{I(!0),P(!0)}}),R&&(0,e.createElement)(F,{kind:R,onSubmit:$e,onClose:()=>D(null)}),(0,e.createElement)(z,{charCount:le,saveState:M,isPublishedEdit:ie,saving:!m||"saving"===M.state||"submitting"===M.state,onSaveDraft:()=>{_e(!1)},onPreview:()=>{be()},onPublish:()=>{I(!1),P(!0)}}),L&&(0,e.createElement)(p,{draft:n,setDraft:ce,capabilities:oe,limits:re,taxonomy:{categories:W.categories&&W.categories.items||[],tags:!!W.tags?.enabled,customDefs:W.customDefs||[]},isPublishedEdit:ie,focusPay:q,onClose:()=>{P(!1),I(!1)},onSaveDraft:()=>{_e(!1)},onSubmit:e=>{fe(e)},privateStorage:!!W.privateStorage,privateUploads:W.privateUploads||[],captcha:!!W.captcha?.enabled,saving:"saving"===M.state||"submitting"===M.state}))}function ae(){const a=document.getElementById("jio-creator-studio");a&&(a.classList.add("is-ready"),(0,t.createRoot)(a).render((0,e.createElement)(te,null)))}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",ae):ae()})(); |