UNPKG

typecho-core

Version:

An element-drived engine working well with XHR-intensive front-end. Originally designed for Typecho.

1 lines 8.78 kB
!function(e,t){"use strict";const o=TypechoCore.state("citizenRoot");function r(e="",t){return[o+"carol/carolEditor.css",o+"carol/carolEditor.js",o+"daryl/darylEditor.js",o+"carol/carol.js","/common/themes/citizen/assets/carol/config-compiled.js?v="+e,t?"https://registry.npmmirror.com/typecho-core/latest/files/citizen/carol/carolExtends.min.js":""]}const n={".cm-cursor":{borderLeftColor:"var(--color-base--subtle)"},".cm-gutters":{color:"var(--color-base--subtle)",backgroundColor:"var(--color-surface-3)",border:"none",transition:"var(--transition-background)"},".cm-activeLine":{backgroundColor:"var(--background-color-quiet--hover)"},".cm-activeLineGutter":{transition:"var(--transition-background)",backgroundColor:"var(--color-surface-4)"},".cm-tooltip":{border:"none",backgroundColor:"var(--color-surface-3)"},".cm-selectionBackground":{backgroundColor:"var(--color-surface-4) !important"},".cm-selectionMatch":{backgroundColor:"var(--color-surface-4)"}};TypechoCore.Callback.EditorDraft=function(e,o){if(e.success){if(e.draftId){t.getElementById("cid")&&(t.getElementById("cid").value=e.draftId)}if(e.time){const o=t.getElementById("statusTips"),r=t.getElementById("draftNotice"),n=t.createElement("p"),c=`当前正在编辑的是未发布的草稿,最后一次保存于:<b>${e.time}</b>。`;if(!o)return;r?r.innerHTML=c:(n.classList.add("edit-draft-notice"),n.id="draftNotice",n.innerHTML=c,TypechoCore.ui.setupHtmlInsert(o,n,0,!1))}}},TypechoCore.Processor.alertBeforeUnload=e=>e.returnValue="不会保存修改。仍然离开?",TypechoCore.Element.classicEditor=async function(o){const c=o.closest(".editor-container"),i=TypechoCore.ui.inspector(c,"正在加载工作区。"),s=r(o.dataset.version,!!o.dataset.externalSmiley);await TypechoCore.engine.requestResource(s),Carol.setCodeMirrorThemeConfig(n),Carol.init(o,(function(o){e.addEventListener("beforeunload",TypechoCore.Processor.alertBeforeUnload),TypechoCore.utils.bindKey((function(){if(""===t.getElementById("title").value)return TypechoCore.ui.flashMessage("应至少提供一个标题,才能执行快速保存。");t.getElementById("save").click()}),(e=>(e.ctrlKey||e.metaKey)&&83===e.which)),setTimeout(i.remove,450)}),{toolbar:{useSticky:!0},customButtons:{}}),TypechoCore.xhr.registerOnce(Carol.destroy,"send"),TypechoCore.xhr.registerOnce((()=>{e.removeEventListener("beforeunload",TypechoCore.Processor.alertBeforeUnload)}),"send")},TypechoCore.Element.instantEditor=function(o){const c=t.getElementById(o.dataset.editor),i=o.dataset.version,s=!!o.dataset.externalSmiley,a=o.dataset.typechoSecurityTk,d=o.dataset.cid,l=t.querySelector(".p-cover");o.addEventListener("click",(function(u){l&&(l.style.opacity=".5");const p=TypechoCore.ui.inspectorButton(o),m=function(e){const t=e.ui.view.toolbar.element,r=o.closest(".container");r.classList.add("instant-editor"),TypechoCore.ui.setupHtmlInsert(r,t,-1,!1,"editor-toolbar"),TypechoCore.utils.bindKey((function(){Carol.actionFromButton(!0,e.getData())}),(e=>(e.ctrlKey||e.metaKey)&&83===e.which)),p.remove()};let y=t.getElementById("comments");y||(y=t.querySelector('[data-typecho-init="discussion"]')),y&&(y.title="快速编辑模式。评论功能已禁用。");const h=r(i,s);TypechoCore.engine.requestResource(h).then((t=>{TypechoCore.xhr.request({method:"POST",url:"/action/contents-post-edit",data:{do:"fastPublish",_:a,cid:d,preheat:d},responseType:"json",success:async t=>{l&&l.remove(),Carol.setContentId(d),Carol.setSecurityToken(a),Carol.setCodeMirrorThemeConfig(n),c.innerHTML=t.text;const o=t.draft;if(o&&o.parent){const r=o.cid,i=o.text,s=o.modified;function u(){c.innerHTML=i,Carol.setContentId(r)}const p="此文章包含草稿。草稿保存于 "+new Date(1e3*s).toLocaleTimeString()+"。编辑它的草稿,还是编辑当前已经发布的此文章本身?";await TypechoCore.ui.dialog("检测到草稿",p,[{text:"编辑草稿",callback:u},{text:"编辑已发布文章",type:"primary"}],!1)}e.addEventListener("beforeunload",TypechoCore.Processor.alertBeforeUnload),Carol.init(c,m),TypechoCore.xhr.registerOnce(Carol.destroy),TypechoCore.xhr.registerOnce((()=>{e.removeEventListener("beforeunload",TypechoCore.Processor.alertBeforeUnload)}),"send")}})}))}))},TypechoCore.Element.commentEditorCarol=function(e,o,n,c,i,s){e.addEventListener("click",(function(){let a;TypechoCore.ui.inspectorButton(e),a=TypechoCore.State.commentEditorInstance?t.createElement("div"):TypechoCore.ui.inspector(n,"正在加载评论编辑器。");const d=r(c,i);TypechoCore.engine.requestResource(d).then((function(){Carol.init(o,(t=>{s(t,e,o,a)}),{placeholder:null,removePlugins:["ActionButton","Heading","Template","Table","FormatPainter","HtmlEmbed","Image","ImageInsertUrlUIHack","LinkImage","MediaEmbed","MediaEmbedToolbar"],toolbar:{items:["undo","redo","bold","italic","underline","strikethrough","fontSize","fontColor","style","link","code","blockQuote","codeBlock",{label:"段落控制",items:["alignment","numberedList","bulletedList","multiLevelList","outdent","indent"]},"smiley","accessibilityHelp"]}})}))}))},TypechoCore.Element.sourceEditor=async function(t){await TypechoCore.engine.requestResource(o+"daryl/darylEditor.js");const r=e.DarylEditor;function c(e){r.create(e,n,e.dataset.language)}if("TEXTAREA"!==t.tagName){t.querySelectorAll("textarea[data-language]").forEach((e=>c(e)))}else c(t);TypechoCore.xhr.registerOnce(r.destroy,"click")},TypechoCore.Element.writerHelper=function(e){const o=t.querySelector("select[name = visibility]");function r(e){const o=e.value,r=t.querySelector(".p-password");"password"===o?r.classList.remove("hidden"):r.classList.add("hidden")}r(o),o.addEventListener("input",(()=>r(o)))},TypechoCore.Element.timePicker=async function(e){const o=$(e);await TypechoCore.engine.requestResource(["https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-y/jqueryui/1.12.1/jquery-ui.min.js","https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-y/jquery.mask/1.14.16/jquery.mask.min.js","https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-y/jquery-ui-timepicker-addon/1.6.3/jquery-ui-timepicker-addon.min.js","https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery-ui-timepicker-addon/1.6.3/jquery-ui-timepicker-addon.min.css"]),$.fn.datetimepicker&&$.fn.mask?(o.mask("9999-99-99 99:99").datetimepicker({currentText:"现在",prevText:"上一月",nextText:"下一月",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],closeText:"完成",timeOnlyTitle:"选择时间",timeText:"时间",hourText:"时",amNames:["上午","A"],pmNames:["下午","P"],minuteText:"分",secondText:"秒",dateFormat:"yy-mm-dd",timezone:o.data("timezone")/60,hour:(new Date).getHours(),minute:(new Date).getMinutes()}),TypechoCore.xhr.registerOnce((()=>{t.querySelector(".ui-datepicker").remove()}))):console.error("jQuery DateTimePicker 或 Mask 未加载。")},TypechoCore.Element.tagsHelper=async function(e){const o=$(e);if(await TypechoCore.engine.requestResource(["https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-y/jquery-tokeninput/1.7.0/jquery.tokeninput.min.js"]),void 0===$.fn.tokenInput)return console.error("jQuery TokenInput 未加载。");const r=t.querySelector("[data-tags-info]").dataset.tagsInfo,n=e.dataset.tagClass,c=[],i="p-token--dropdown",s=e.value.split(",");for(let e=0;e<s.length;e++){const t=s[e];t&&c.push({id:t,tags:t})}o.tokenInput(r,{allowFreeTagging:!0,allowTabOut:!0,propertyToSearch:"tags",tokenValue:"tags",searchingText:"处理中...",searchDelay:200,preventDuplicates:!0,hintText:"请输入标签名。",noResultsText:"此标签不存在,回车即可创建。",prePopulate:c,animateDropdown:!1,classes:{token:"p-token",selectedToken:"p-token--selected",tokenDelete:"p-token--delete",tokenList:"p-token--list u-inputWidget-input",inputToken:"p-token--input",focused:"p-token--focused",dropdown:i,dropdownItem:"p-token--dropdownItem",dropdownItem2:"p-token--dropdownItemB",selectedDropdownItem:"p-token--dropdownSelected"},onResult:function(e,t,o){return t?(e||(e=[]),e[0]&&e[0].id===t||e.unshift({id:o,tags:o}),e.slice(0,5)):e}}),t.querySelectorAll("."+n).forEach((e=>{e.addEventListener("click",(()=>{const t=e.innerText;o.tokenInput("add",{id:t,tags:t})}))})),TypechoCore.xhr.registerOnce((function(){o.tokenInput("destroy"),t.querySelector("."+i).remove()}))},TypechoCore.register("source-editor"),TypechoCore.register("classic-editor"),TypechoCore.register("instant-editor"),TypechoCore.register("writer-helper"),TypechoCore.register("tags-helper"),TypechoCore.register("time-picker")}(window,document);