-`).length;n.style.height=i*20+40+"px",this.editingComment=t}updateComment(t){let n=t.target;t.preventDefault();let i=n.querySelector("textarea").value,s={text:i,parent_id:this.parentId||null};this.showLoading(n);let u=this.editingComment.getAttribute("comment");window.$http.put(`/comment/${u}`,s).then(c=>{let d=document.createElement("div");d.innerHTML=c.data,this.editingComment.innerHTML=d.children[0].innerHTML,window.$events.success(this.updatedText),window.components.init(this.editingComment),this.closeUpdateForm(),this.editingComment=null}).catch(window.$events.showValidationErrors).then(()=>{this.hideLoading(n)})}deleteComment(t){let n=t.getAttribute("comment");this.showLoading(t.querySelector("[comment-content]")),window.$http.delete(`/comment/${n}`).then(i=>{t.parentNode.removeChild(t),window.$events.success(this.deletedText),this.updateCount(),this.hideForm()})}saveComment(t){t.preventDefault(),t.stopPropagation();let n=this.formInput.value,i={text:n,parent_id:this.parentId||null};this.showLoading(this.form),window.$http.post(`/comment/${this.pageId}`,i).then(s=>{let u=document.createElement("div");u.innerHTML=s.data;let c=u.children[0];this.container.appendChild(c),window.components.init(c),window.$events.success(this.createdText),this.resetForm(),this.updateCount()}).catch(s=>{window.$events.showValidationErrors(s),this.hideLoading(this.form)})}updateCount(){let t=this.container.children.length;this.elem.querySelector("[comments-title]").textContent=window.trans_plural(this.countText,t,{count:t})}resetForm(){this.formInput.value="",this.formContainer.appendChild(this.form),this.hideForm(),this.removeReplyTo(),this.hideLoading(this.form)}showForm(){this.formContainer.style.display="block",this.formContainer.parentNode.style.display="block",this.addButtonContainer.style.display="none",this.formInput.focus(),this.formInput.scrollIntoView({behavior:"smooth"})}hideForm(){this.formContainer.style.display="none",this.formContainer.parentNode.style.display="none",this.getCommentCount()>0?this.elem.appendChild(this.addButtonContainer):this.commentCountBar.appendChild(this.addButtonContainer),this.addButtonContainer.style.display="block"}getCommentCount(){return this.elem.querySelectorAll(".comment-box[comment]").length}setReply(t){this.showForm(),this.parentId=Number(t.getAttribute("local-id")),this.replyToRow.style.display="block";const n=this.replyToRow.querySelector("a");n.textContent=`#${this.parentId}`,n.href=`#comment${this.parentId}`}removeReplyTo(){this.parentId=null,this.replyToRow.style.display="none"}showLoading(t){const n=t.querySelectorAll(".form-group");for(let i of n)i.style.display="none";t.querySelector(".form-group.loading").style.display="block"}hideLoading(t){const n=t.querySelectorAll(".form-group");for(let i of n)i.style.display="block";t.querySelector(".form-group.loading").style.display="none"}}var gv=qx;const vv=Ke(Vs());class zx{constructor(t){if(this.elem=t,this.pageId=t.getAttribute("page-display"),Nt.highlight(),this.setupPointer(),this.setupNavHighlighting(),window.location.hash){let i=window.location.hash.replace(/\%20/g," ").substr(1);this.goToText(i)}const n=document.querySelector(".sidebar-page-nav");n&&_t(n,"a","click",(i,s)=>{i.preventDefault(),window.components["tri-layout"][0].showContent();const u=s.getAttribute("href").substr(1);this.goToText(u),window.history.pushState(null,null,"#"+u)})}goToText(t){const n=document.getElementById(t);if(xa(".page-content [data-highlighted]",i=>{i.removeAttribute("data-highlighted"),i.style.backgroundColor=null}),n!==null)ro(n);else{const i=rg(".page-content > div > *",t);i&&ro(i)}}setupPointer(){let t=document.getElementById("pointer");if(!t)return;t=t.parentNode.removeChild(t);const n=t.querySelector("div.pointer");let i=!1,s=!1,u=!0,c="";_t(t,"input","click",(h,p)=>{p.select(),h.stopPropagation()}),_a(t,["click","focus"],h=>{h.stopPropagation()}),_t(t,"span.icon","click",(h,p)=>{h.stopPropagation(),u=!u,p.querySelector('[data-icon="include"]').style.display=u?"none":"inline",p.querySelector('[data-icon="link"]').style.display=u?"inline":"none",d()}),new vv.default(t.querySelector("button")),_a(document.body,["click","focus"],h=>{if(!i||s)return;t=t.parentElement.removeChild(t),i=!1});let d=h=>{let p=u?window.baseUrl(`/link/${this.pageId}#${c}`):`{{@${this.pageId}#${c}}}`;u&&!p.startsWith("http")&&(p=window.location.protocol+"//"+window.location.host+p),t.querySelector("input").value=p;const g=t.querySelector("#pointer-edit");if(g&&h){const y=g.dataset.editHref,m=h.id,b=h.textContent&&h.textContent.substring(0,50);g.href=`${y}?content-id=${m}&content-text=${encodeURIComponent(b)}`}};xa('.page-content [id^="bkmrk"]',h=>{_a(h,["mouseup","keyup"],p=>{p.stopPropagation();let g=window.getSelection();if(g.toString().length===0)return;c=h.id,d(h),h.parentNode.insertBefore(t,h),t.style.display="block",i=!0,s=!0,requestAnimationFrame(()=>{const y=h.getBoundingClientRect();let m=p.pageX-y.left-164;m<0&&(m=0);const b=m/y.width*100;n.style.left=b+"%",setTimeout(()=>{s=!1},100)})})})}setupNavHighlighting(){if(!("IntersectionObserver"in window)||!("IntersectionObserverEntry"in window)||!("intersectionRatio"in window.IntersectionObserverEntry.prototype))return;let t=document.querySelector(".sidebar-page-nav"),n=document.querySelector(".page-content").querySelectorAll("h1, h2, h3, h4, h5, h6");n.length>0&&t!==null&&i(n);function i(c){let d={rootMargin:"0px 0px 0px 0px",threshold:1},h=new IntersectionObserver(s,d);for(let p of c)h.observe(p)}function s(c,d){for(let h of c){let p=h.intersectionRatio===1;u(h.target.id,p)}}function u(c,d){xa('a[href="#'+c+'"]',h=>{h.closest("li").classList.toggle("current-heading",d)})}}}var bv=zx;function yv(t){let n=new Date(t*1e3),i=n.getHours(),s=n.getMinutes();return`${(i>9?"":"0")+i}:${(s>9?"":"0")+s}`}class Ox{setup(){this.draftsEnabled=this.$opts.draftsEnabled==="true",this.editorType=this.$opts.editorType,this.pageId=Number(this.$opts.pageId),this.isNewDraft=this.$opts.pageNewDraft==="true",this.hasDefaultTitle=this.$opts.isDefaultTitle||!1,this.container=this.$el,this.titleElem=this.$refs.titleContainer.querySelector("input"),this.saveDraftButton=this.$refs.saveDraft,this.discardDraftButton=this.$refs.discardDraft,this.discardDraftWrap=this.$refs.discardDraftWrap,this.draftDisplay=this.$refs.draftDisplay,this.draftDisplayIcon=this.$refs.draftDisplayIcon,this.changelogInput=this.$refs.changelogInput,this.changelogDisplay=this.$refs.changelogDisplay,this.draftText=this.$opts.draftText,this.autosaveFailText=this.$opts.autosaveFailText,this.editingPageText=this.$opts.editingPageText,this.draftDiscardedText=this.$opts.draftDiscardedText,this.setChangelogText=this.$opts.setChangelogText,this.editorHTML="",this.editorMarkdown="",this.autoSave={interval:null,frequency:3e4,last:0},this.pageId!==0&&this.draftsEnabled&&window.setTimeout(()=>{this.startAutoSave()},1e3),this.draftDisplay.innerHTML=this.draftText,this.setupListeners(),this.setInitialFocus()}setupListeners(){window.$events.listen("editor-save-draft",this.saveDraft.bind(this)),window.$events.listen("editor-save-page",this.savePage.bind(this)),window.$events.listen("editor-html-change",t=>{this.editorHTML=t}),window.$events.listen("editor-markdown-change",t=>{this.editorMarkdown=t}),this.changelogInput.addEventListener("change",this.updateChangelogDisplay.bind(this)),ot(this.saveDraftButton,this.saveDraft.bind(this)),ot(this.discardDraftButton,this.discardDraft.bind(this))}setInitialFocus(){if(this.hasDefaultTitle)return this.titleElem.select();window.setTimeout(()=>{window.$events.emit("editor::focus","")},500)}startAutoSave(){let t=this.titleElem.value.trim()+"::"+this.editorHTML;this.autoSaveInterval=window.setInterval(()=>{let n=Date.now()-this.autoSave.last<this.autoSave.frequency/2;if(n)return;const i=this.titleElem.value.trim()+"::"+this.editorHTML;i!==t&&(t=i,this.saveDraft())},this.autoSave.frequency)}savePage(){this.container.closest("form").submit()}async saveDraft(){const t={name:this.titleElem.value.trim(),html:this.editorHTML};this.editorType==="markdown"&&(t.markdown=this.editorMarkdown);try{const n=await window.$http.put(`/ajax/page/${this.pageId}/save-draft`,t);this.isNewDraft||this.toggleDiscardDraftVisibility(!0),this.draftNotifyChange(`${n.data.message} ${yv(n.data.timestamp)}`),this.autoSave.last=Date.now()}catch(n){try{const i=`draft-save-fail-${new Date().toISOString()}`;window.localStorage.setItem(i,JSON.stringify(t))}catch(i){}window.$events.emit("error",this.autosaveFailText)}}draftNotifyChange(t){this.draftDisplay.innerText=t,this.draftDisplayIcon.classList.add("visible"),window.setTimeout(()=>{this.draftDisplayIcon.classList.remove("visible")},2e3)}async discardDraft(){let t;try{t=await window.$http.get(`/ajax/page/${this.pageId}`)}catch(n){return console.error(n)}this.autoSave.interval&&window.clearInterval(this.autoSave.interval),this.draftDisplay.innerText=this.editingPageText,this.toggleDiscardDraftVisibility(!1),window.$events.emit("editor-html-update",t.data.html||""),window.$events.emit("editor-markdown-update",t.data.markdown||t.data.html),this.titleElem.value=t.data.name,window.setTimeout(()=>{this.startAutoSave()},1e3),window.$events.emit("success",this.draftDiscardedText)}updateChangelogDisplay(){let t=this.changelogInput.value.trim();t.length===0?t=this.setChangelogText:t.length>16&&(t=t.slice(0,16)+"..."),this.changelogDisplay.innerText=t}toggleDiscardDraftVisibility(t){this.discardDraftWrap.classList.toggle("hidden",!t)}}var wv=Ox;class Rx{constructor(t){this.elem=t,this.input=t.querySelector("input"),this.resetButton=t.querySelector("[page-picker-reset]"),this.selectButton=t.querySelector("[page-picker-select]"),this.display=t.querySelector("[page-picker-display]"),this.defaultDisplay=t.querySelector("[page-picker-default]"),this.buttonSep=t.querySelector("span.sep"),this.value=this.input.value,this.setupListeners()}setupListeners(){this.selectButton.addEventListener("click",this.showPopup.bind(this)),this.display.parentElement.addEventListener("click",this.showPopup.bind(this)),this.resetButton.addEventListener("click",t=>{this.setValue("","")})}showPopup(){window.EntitySelectorPopup.show(t=>{this.setValue(t.id,t.name)})}setValue(t,n){this.value=t,this.input.value=t,this.controlView(n)}controlView(t){let n=this.value&&this.value!==0;if(Xa(this.resetButton,n),Xa(this.buttonSep,n),Xa(this.defaultDisplay,!n),Xa(this.display,n),n){let i=this.getAssetIdFromVal();this.display.textContent=`#${i}, ${t}`,this.display.href=window.baseUrl(`/link/${i}`)}}getAssetIdFromVal(){return Number(this.value)}}function Xa(t,n){let i=t.tagName==="BUTTON"||t.tagName==="SPAN"?"inline-block":"block";t.style.display=n?i:"none"}var kv=Rx;class Px{constructor(t){this.container=t;const n=t.querySelector("[permissions-table-toggle-all]");n.addEventListener("click",this.toggleAllClick.bind(this));const i=t.querySelectorAll("[permissions-table-toggle-all-in-row]");for(let u of i)u.addEventListener("click",this.toggleRowClick.bind(this));const s=t.querySelectorAll("[permissions-table-toggle-all-in-column]");for(let u of s)u.addEventListener("click",this.toggleColumnClick.bind(this))}toggleAllClick(t){t.preventDefault(),this.toggleAllInElement(this.container)}toggleRowClick(t){t.preventDefault(),this.toggleAllInElement(t.target.closest("tr"))}toggleColumnClick(t){t.preventDefault();const n=t.target.closest("th,td"),i=Array.from(n.parentElement.children).indexOf(n),s=n.closest("table").querySelectorAll("tr"),u=[];for(let c of s){const d=c.children[i];d&&u.push(...d.querySelectorAll("input[type=checkbox]"))}this.toggleAllInputs(u)}toggleAllInElement(t){const n=t.querySelectorAll("input[type=checkbox]");this.toggleAllInputs(n)}toggleAllInputs(t){const n=t.length>0?t[0].checked:!1;for(let i of t)i.checked=!n,i.dispatchEvent(new Event("change"))}}var xv=Px;class Nx{setup(){this.container=this.$el,this.hideButtons=this.$manyRefs.hide||[],this.onkeyup=null,this.onHide=null,this.setupListeners()}setupListeners(){let t=null;this.container.addEventListener("mousedown",n=>{t=n.target}),this.container.addEventListener("click",n=>{if(n.target===this.container&&t===this.container)return this.hide()}),ot(this.hideButtons,n=>this.hide())}hide(t=null){Ka(this.container,240,t),this.onkeyup&&(window.removeEventListener("keyup",this.onkeyup),this.onkeyup=null),this.onHide&&this.onHide()}show(t=null,n=null){Og(this.container,240,t),this.onkeyup=i=>{i.key==="Escape"&&this.hide()},window.addEventListener("keyup",this.onkeyup),this.onHide=n}}var _v=Nx;class Bx{constructor(t){this.elem=t,this.colorInput=t.querySelector("input[type=color]"),this.lightColorInput=t.querySelector('input[name="setting-app-color-light"]'),this.resetButton=t.querySelector("[setting-app-color-picker-reset]"),this.defaultButton=t.querySelector("[setting-app-color-picker-default]"),this.colorInput.addEventListener("change",this.updateColor.bind(this)),this.colorInput.addEventListener("input",this.updateColor.bind(this)),this.resetButton.addEventListener("click",n=>{this.colorInput.value=this.colorInput.dataset.current,this.updateColor()}),this.defaultButton.addEventListener("click",n=>{this.colorInput.value=this.colorInput.dataset.default,this.updateColor()})}updateColor(){const t=this.colorInput.value,n=this.hexToRgb(t),i="rgba("+[n.r,n.g,n.b,"0.15"].join(",")+")";this.lightColorInput.value=i;const s=document.getElementById("custom-styles"),u=s.getAttribute("data-color"),c=s.getAttribute("data-color-light");s.innerHTML=s.innerHTML.split(u).join(t),s.innerHTML=s.innerHTML.split(c).join(i),s.setAttribute("data-color",t),s.setAttribute("data-color-light",i)}hexToRgb(t){const n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return{r:n?parseInt(n[1],16):0,g:n?parseInt(n[2],16):0,b:n?parseInt(n[3],16):0}}}var Cv=Bx;class jx{constructor(t){this.elem=t,this.colorInput=t.querySelector("input[type=color]"),this.resetButton=t.querySelector("[setting-color-picker-reset]"),this.defaultButton=t.querySelector("[setting-color-picker-default]"),this.resetButton.addEventListener("click",n=>{this.colorInput.value=this.colorInput.dataset.current}),this.defaultButton.addEventListener("click",n=>{this.colorInput.value=this.colorInput.dataset.default})}}var Sv=jx;class Hx{constructor(t){this.elem=t,this.input=document.getElementById("books-input"),this.shelfBooksList=t.querySelector("[shelf-sort-assigned-books]"),this.initSortable(),this.setupListeners()}initSortable(){const t=this.elem.querySelectorAll(".scroll-box");for(let n of t)new hi(n,{group:"shelf-books",ghostClass:"primary-background-light",animation:150,onSort:this.onChange.bind(this)})}setupListeners(){this.elem.addEventListener("click",t=>{const n=t.target.closest(".scroll-box-item:not(.instruction)");n&&(t.preventDefault(),this.sortItemClick(n))})}sortItemClick(t){const n=this.elem.querySelectorAll(".scroll-box"),i=Array.from(n).filter(s=>t.parentElement!==s);i.length>0&&i[0].appendChild(t),this.onChange()}onChange(){const t=Array.from(this.shelfBooksList.querySelectorAll("[data-id]"));this.input.value=t.map(n=>n.getAttribute("data-id")).join(",")}}var Ev=Hx;class Ux{constructor(t){this.elem=t,this.toggleElem=t.querySelector(".sidebar-toggle"),this.toggleElem.addEventListener("click",this.toggle.bind(this))}toggle(t=!0){this.elem.classList.toggle("open")}}var Dv=Ux;class Wx{setup(){this.container=this.$el,this.handleSelector=this.$opts.handleSelector;const t=new hi(this.container,{handle:this.handleSelector,animation:150,onSort:()=>{this.$emit("sort",{ids:t.toArray()})},setData(n,i){const s=i.getAttribute("data-drag-content");if(s){const u=JSON.parse(s);for(const[c,d]of Object.entries(u))n.setData(c,d)}},revertOnSpill:!0,dropBubble:!0,dragoverBubble:!1})}}var Av=Wx;class $x{setup(){this.$el.addEventListener("change",()=>{const t=this.$el.closest("form");t&&t.submit()})}}var Tv=$x;class Gx{setup(){this.tabContentsByName={},this.tabButtonsByName={},this.allContents=[],this.allButtons=[];for(const[t,n]of Object.entries(this.$manyRefs||{})){if(t.startsWith("toggle")){const i=t.replace("toggle","").toLowerCase();ot(n,s=>this.show(i)),this.allButtons.push(...n),this.tabButtonsByName[i]=n}if(t.startsWith("content")){const i=t.replace("content","").toLowerCase();this.tabContentsByName[i]=n,this.allContents.push(...n)}}}show(t){this.allContents.forEach(s=>{s.classList.add("hidden"),s.classList.remove("selected")}),this.allButtons.forEach(s=>s.classList.remove("selected"));const n=this.tabContentsByName[t]||[],i=this.tabButtonsByName[t]||[];n.length>0&&(n.forEach(s=>{s.classList.remove("hidden"),s.classList.add("selected")}),i.forEach(s=>s.classList.add("selected")))}}var Lv=Gx;class Kx{setup(){this.addRemoveComponentEl=this.$refs.addRemove,this.container=this.$el,this.rowSelector=this.$opts.rowSelector,this.setupListeners()}setupListeners(){this.container.addEventListener("change",t=>{const n=this.addRemoveComponentEl.components["add-remove-rows"];this.hasEmptyRows()||n.add()})}hasEmptyRows(){const t=this.container.querySelectorAll(this.rowSelector),n=[...t].find(i=>[...i.querySelectorAll("input")].filter(s=>s.value).length===0);return n!==void 0}}var Iv=Kx;class Vx{constructor(t){this.elem=t,this.list=t.querySelector("[template-manager-list]"),this.searching=!1,_t(this.elem,"[template-action]","click",this.handleTemplateActionClick.bind(this)),_t(this.elem,".pagination a","click",this.handlePaginationClick.bind(this)),_t(this.elem,".template-item-content","click",this.handleTemplateItemClick.bind(this)),_t(this.elem,".template-item","dragstart",this.handleTemplateItemDragStart.bind(this)),this.setupSearchBox()}handleTemplateItemClick(t,n){const i=n.closest("[template-id]").getAttribute("template-id");this.insertTemplate(i,"replace")}handleTemplateItemDragStart(t,n){const i=n.closest("[template-id]").getAttribute("template-id");t.dataTransfer.setData("bookstack/template",i),t.dataTransfer.setData("text/plain",i)}handleTemplateActionClick(t,n){t.stopPropagation();const i=n.getAttribute("template-action"),s=n.closest("[template-id]").getAttribute("template-id");this.insertTemplate(s,i)}async insertTemplate(t,n="replace"){const i=await window.$http.get(`/templates/${t}`),s="editor::"+n;window.$events.emit(s,i.data)}async handlePaginationClick(t,n){t.preventDefault();const i=n.getAttribute("href"),s=await window.$http.get(i);this.list.innerHTML=s.data}setupSearchBox(){const t=this.elem.querySelector(".search-box");if(!t)return;const n=t.querySelector("input"),i=t.querySelector("button"),s=t.querySelector("button.search-box-cancel");async function u(){const c=n.value,d=await window.$http.get("/templates",{search:c});s.style.display=c?"block":"none",this.list.innerHTML=d.data}u=u.bind(this),t.addEventListener("keypress",c=>{c.key==="Enter"&&(c.preventDefault(),u())}),i.addEventListener("click",c=>{u()}),s.addEventListener("click",c=>{n.value="",u()})}}var Fv=Vx;class Yx{constructor(t){this.elem=t,this.input=t.querySelector("input[type=hidden]"),this.checkbox=t.querySelector("input[type=checkbox]"),this.checkbox.addEventListener("change",this.stateChange.bind(this))}stateChange(){this.input.value=this.checkbox.checked?"true":"false";const t=new Event("change");this.input.dispatchEvent(t)}}var Mv=Yx;class Xx{constructor(t){this.elem=t,this.lastLayoutType="none",this.onDestroy=null,this.scrollCache={content:0,info:0},this.lastTabShown="content",this.mobileTabClick=this.mobileTabClick.bind(this),this.updateLayout(),window.addEventListener("resize",n=>{this.updateLayout()},{passive:!0})}updateLayout(){let t="tablet";if(window.innerWidth<=1e3&&(t="mobile"),window.innerWidth>=1400&&(t="desktop"),t===this.lastLayoutType)return;this.onDestroy&&(this.onDestroy(),this.onDestroy=null),t==="desktop"?this.setupDesktop():t==="mobile"&&this.setupMobile(),this.lastLayoutType=t}setupMobile(){const t=document.querySelectorAll("[tri-layout-mobile-tab]");for(let n of t)n.addEventListener("click",this.mobileTabClick);this.onDestroy=()=>{for(let n of t)n.removeEventListener("click",this.mobileTabClick)}}setupDesktop(){}mobileTabClick(t){const n=t.target.getAttribute("tri-layout-mobile-tab");this.showTab(n)}showContent(){this.showTab("content",!1)}showTab(t,n=!0){this.scrollCache[this.lastTabShown]=document.documentElement.scrollTop;const i=document.querySelectorAll(".tri-layout-mobile-tab");for(let u of i){const c=u.getAttribute("tri-layout-mobile-tab")===t;u.classList.toggle("active",c)}const s=t==="info";if(this.elem.classList.toggle("show-info",s),n){const u=document.querySelector("header"),c=u.getBoundingClientRect().bottom;document.documentElement.scrollTop=this.scrollCache[t]||c,setTimeout(()=>{document.documentElement.scrollTop=this.scrollCache[t]||c},50)}this.lastTabShown=t}}var qv=Xx;class Zx{setup(){this.input=this.$refs.input,this.userInfoContainer=this.$refs.userInfo,this.hide=this.$el.components.dropdown.hide,_t(this.$el,"a.dropdown-search-item","click",this.selectUser.bind(this))}selectUser(t,n){const i=n.getAttribute("data-id");this.input.value=i,this.userInfoContainer.innerHTML=n.innerHTML,this.hide()}}var zv=Zx;function Ov(t,n,i){const s=new bo(t.clipboardData||t.dataTransfer);if(!s.hasItems()||s.containsTabularData())return;const u=s.getImages();for(const c of u){const d="image-"+Math.random().toString(16).slice(2),h=window.baseUrl("/loading.gif");t.preventDefault(),setTimeout(()=>{n.insertContent(`<p><img src="${h}" id="${d}"></p>`),Qx(c,i).then(p=>{const g=p.name.replace(/"/g,""),y=`<img src="${p.thumbs.display}" alt="${g}" />`,m=n.dom.create("a",{target:"_blank",href:p.url},y);n.dom.replace(m,d)}).catch(p=>{n.dom.remove(d),window.$events.emit("error",i.imageUploadErrorText),console.log(p)})},10)}}async function Qx(t,n){if(t===null||t.type.indexOf("image")!==0)throw new Error("Not an image file");let i="png";if(t.name){let d=t.name.match(/\.(.+)$/);d.length>1&&(i=d[1])}const s="image-"+Date.now()+"."+i,u=new FormData;u.append("file",t,s),u.append("uploaded_to",n.pageId);const c=await window.$http.post(window.baseUrl("/images/gallery"),u);return c.data}function Jx(t){for(let n=1;n<5;n++)t.shortcuts.add("meta+"+n,"",["FormatBlock",!1,"h"+(n+1)]);t.shortcuts.add("meta+5","",["FormatBlock",!1,"p"]),t.shortcuts.add("meta+d","",["FormatBlock",!1,"p"]),t.shortcuts.add("meta+6","",["FormatBlock",!1,"blockquote"]),t.shortcuts.add("meta+q","",["FormatBlock",!1,"blockquote"]),t.shortcuts.add("meta+7","",["codeeditor",!1,"pre"]),t.shortcuts.add("meta+e","",["codeeditor",!1,"pre"]),t.shortcuts.add("meta+8","",["FormatBlock",!1,"code"]),t.shortcuts.add("meta+shift+E","",["FormatBlock",!1,"code"]),t.shortcuts.add("meta+S","",()=>{window.$events.emit("editor-save-draft")}),t.shortcuts.add("meta+13","",()=>{window.$events.emit("editor-save-page")}),t.shortcuts.add("meta+9","",function(){const n=t.selection.getNode(),i=n?n.closest(".callout"):null,s=["info","success","warning","danger"],u=s.findIndex(h=>i&&i.classList.contains(h)),c=(u+1)%s.length,d=s[c];t.formatter.apply("callout"+d)})}function e_(t){window.$http.get(window.baseUrl("/custom-head-content")).then(n=>{if(!n.data)return;let i=t.getDoc().querySelector("head");i.innerHTML+=n.data})}function t_(){function t(s){return s.className==="CodeMirrorContainer"}function n(s){const u=s.selection.getNode();if(!t(u)){const h=s.selection.getNode().textContent;window.components.first("code-editor").open(h,"",(p,g)=>{const y=document.createElement("div");y.innerHTML=`<pre><code class="language-${g}"></code></pre>`,y.querySelector("code").innerText=p,s.formatter.toggle("pre");const m=s.selection.getNode();s.dom.setHTML(m,y.querySelector("pre").innerHTML),s.fire("SetContent"),s.focus()});return}let c=u.hasAttribute("data-lang")?u.getAttribute("data-lang"):"",d=u.querySelector("textarea").textContent;window.components.first("code-editor").open(d,c,(h,p)=>{const g=u.querySelector(".CodeMirror"),y=g.CodeMirror;y&&(Nt.setContent(y,h),Nt.setMode(y,p,h));const m=u.querySelector("textarea");m&&(m.textContent=h),u.setAttribute("data-lang",p),s.focus()})}function i(s){const u=s.querySelector("textarea"),c=u.textContent,d=s.getAttribute("data-lang");s.removeAttribute("contentEditable");const h=document.createElement("pre"),p=document.createElement("code");p.classList.add(`language-${d}`),p.textContent=c,h.appendChild(p),s.parentElement.replaceChild(h,s)}window.tinymce.PluginManager.add("codeeditor",function(s,u){const c=s.$;s.addButton("codeeditor",{text:"Code block",icon:!1,cmd:"codeeditor"}),s.addCommand("codeeditor",()=>{n(s)}),s.on("PreProcess",function(d){c("div.CodeMirrorContainer",d.node).each((h,p)=>{i(p)})}),s.on("dblclick",d=>{let h=s.selection.getNode();if(!t(h))return;n(s)}),s.on("SetContent",function(){c(".CodeMirrorContainer").filter((h,p)=>typeof p.querySelector(".CodeMirror").CodeMirror=="undefined").each((h,p)=>{i(p)});const d=c("body > pre").filter((h,p)=>p.contentEditable!=="false");if(!d.length)return;s.undoManager.transact(function(){d.each((h,p)=>{Nt.wysiwygView(p)})})})})}function n_(t,n,i,s){let u=null,c=null;function d(m){return m.hasAttribute("drawio-diagram")}function h(m,b=null){u=m,c=b,window.ImageManager.show(function(w){if(b){let D=b.querySelector("img");u.dom.setAttrib(D,"src",w.url),u.dom.setAttrib(b,"drawio-diagram",w.id)}else{let D=`<div drawio-diagram="${w.id}" contenteditable="false"><img src="${w.url}"></div>`;u.insertContent(D)}},"drawio")}function p(m,b=null){u=m,c=b,dn.show(t,y,g)}async function g(m){const b="image-"+Math.random().toString(16).slice(2),w=window.baseUrl("/loading.gif");if(c){dn.close();let D=c.querySelector("img");try{const E=await dn.upload(m,i);u.dom.setAttrib(D,"src",E.url),u.dom.setAttrib(c,"drawio-diagram",E.id)}catch(E){window.$events.emit("error",s.imageUploadErrorText),console.log(E)}return}setTimeout(async()=>{u.insertContent(`<div drawio-diagram contenteditable="false"><img src="${w}" id="${b}"></div>`),dn.close();try{const D=await dn.upload(m,i);u.dom.setAttrib(b,"src",D.url),u.dom.get(b).parentNode.setAttribute("drawio-diagram",D.id)}catch(D){u.dom.remove(b),window.$events.emit("error",s.imageUploadErrorText),console.log(D)}},5)}function y(){if(!c)return Promise.resolve("");let m=c.getAttribute("drawio-diagram");return dn.load(m)}window.tinymce.PluginManager.add("drawio",function(m,b){m.addCommand("drawio",()=>{const w=m.selection.getNode();p(m,d(w)?w:null)}),m.addButton("drawio",{type:"splitbutton",tooltip:"Drawing",image:`data:image/svg+xml;base64,${btoa(`<svg viewBox="0 0 24 24" fill="${n?"#BBB":"#000000"}" xmlns="http://www.w3.org/2000/svg">
+`).length;n.style.height=i*20+40+"px",this.editingComment=t}updateComment(t){let n=t.target;t.preventDefault();let i=n.querySelector("textarea").value,s={text:i,parent_id:this.parentId||null};this.showLoading(n);let u=this.editingComment.getAttribute("comment");window.$http.put(`/comment/${u}`,s).then(c=>{let d=document.createElement("div");d.innerHTML=c.data,this.editingComment.innerHTML=d.children[0].innerHTML,window.$events.success(this.updatedText),window.components.init(this.editingComment),this.closeUpdateForm(),this.editingComment=null}).catch(window.$events.showValidationErrors).then(()=>{this.hideLoading(n)})}deleteComment(t){let n=t.getAttribute("comment");this.showLoading(t.querySelector("[comment-content]")),window.$http.delete(`/comment/${n}`).then(i=>{t.parentNode.removeChild(t),window.$events.success(this.deletedText),this.updateCount(),this.hideForm()})}saveComment(t){t.preventDefault(),t.stopPropagation();let n=this.formInput.value,i={text:n,parent_id:this.parentId||null};this.showLoading(this.form),window.$http.post(`/comment/${this.pageId}`,i).then(s=>{let u=document.createElement("div");u.innerHTML=s.data;let c=u.children[0];this.container.appendChild(c),window.components.init(c),window.$events.success(this.createdText),this.resetForm(),this.updateCount()}).catch(s=>{window.$events.showValidationErrors(s),this.hideLoading(this.form)})}updateCount(){let t=this.container.children.length;this.elem.querySelector("[comments-title]").textContent=window.trans_plural(this.countText,t,{count:t})}resetForm(){this.formInput.value="",this.formContainer.appendChild(this.form),this.hideForm(),this.removeReplyTo(),this.hideLoading(this.form)}showForm(){this.formContainer.style.display="block",this.formContainer.parentNode.style.display="block",this.addButtonContainer.style.display="none",this.formInput.focus(),this.formInput.scrollIntoView({behavior:"smooth"})}hideForm(){this.formContainer.style.display="none",this.formContainer.parentNode.style.display="none",this.getCommentCount()>0?this.elem.appendChild(this.addButtonContainer):this.commentCountBar.appendChild(this.addButtonContainer),this.addButtonContainer.style.display="block"}getCommentCount(){return this.elem.querySelectorAll(".comment-box[comment]").length}setReply(t){this.showForm(),this.parentId=Number(t.getAttribute("local-id")),this.replyToRow.style.display="block";const n=this.replyToRow.querySelector("a");n.textContent=`#${this.parentId}`,n.href=`#comment${this.parentId}`}removeReplyTo(){this.parentId=null,this.replyToRow.style.display="none"}showLoading(t){const n=t.querySelectorAll(".form-group");for(let i of n)i.style.display="none";t.querySelector(".form-group.loading").style.display="block"}hideLoading(t){const n=t.querySelectorAll(".form-group");for(let i of n)i.style.display="block";t.querySelector(".form-group.loading").style.display="none"}}var gv=qx;const vv=Ke(Vs());class zx{constructor(t){if(this.elem=t,this.pageId=t.getAttribute("page-display"),Nt.highlight(),this.setupPointer(),this.setupNavHighlighting(),window.location.hash){let i=window.location.hash.replace(/\%20/g," ").substr(1);this.goToText(i)}const n=document.querySelector(".sidebar-page-nav");n&&_t(n,"a","click",(i,s)=>{i.preventDefault(),window.components["tri-layout"][0].showContent();const u=s.getAttribute("href").substr(1);this.goToText(u),window.history.pushState(null,null,"#"+u)})}goToText(t){const n=document.getElementById(t);if(xa(".page-content [data-highlighted]",i=>{i.removeAttribute("data-highlighted"),i.style.backgroundColor=null}),n!==null)ro(n);else{const i=rg(".page-content > div > *",t);i&&ro(i)}}setupPointer(){let t=document.getElementById("pointer");if(!t)return;t=t.parentNode.removeChild(t);const n=t.querySelector("div.pointer");let i=!1,s=!1,u=!0,c="";_t(t,"input","click",(h,p)=>{p.select(),h.stopPropagation()}),_a(t,["click","focus"],h=>{h.stopPropagation()}),_t(t,"span.icon","click",(h,p)=>{h.stopPropagation(),u=!u,p.querySelector('[data-icon="include"]').style.display=u?"none":"inline",p.querySelector('[data-icon="link"]').style.display=u?"inline":"none",d()}),new vv.default(t.querySelector("button")),_a(document.body,["click","focus"],h=>{if(!i||s)return;t=t.parentElement.removeChild(t),i=!1});let d=h=>{let p=u?window.baseUrl(`/link/${this.pageId}#${c}`):`{{@${this.pageId}#${c}}}`;u&&!p.startsWith("http")&&(p=window.location.protocol+"//"+window.location.host+p),t.querySelector("input").value=p;const g=t.querySelector("#pointer-edit");if(g&&h){const y=g.dataset.editHref,m=h.id,b=h.textContent&&h.textContent.substring(0,50);g.href=`${y}?content-id=${m}&content-text=${encodeURIComponent(b)}`}};xa('.page-content [id^="bkmrk"]',h=>{_a(h,["mouseup","keyup"],p=>{p.stopPropagation();let g=window.getSelection();if(g.toString().length===0)return;c=h.id,d(h),h.parentNode.insertBefore(t,h),t.style.display="block",i=!0,s=!0,requestAnimationFrame(()=>{const y=h.getBoundingClientRect();let m=p.pageX-y.left-164;m<0&&(m=0);const b=m/y.width*100;n.style.left=b+"%",setTimeout(()=>{s=!1},100)})})})}setupNavHighlighting(){if(!("IntersectionObserver"in window)||!("IntersectionObserverEntry"in window)||!("intersectionRatio"in window.IntersectionObserverEntry.prototype))return;let t=document.querySelector(".sidebar-page-nav"),n=document.querySelector(".page-content").querySelectorAll("h1, h2, h3, h4, h5, h6");n.length>0&&t!==null&&i(n);function i(c){let d={rootMargin:"0px 0px 0px 0px",threshold:1},h=new IntersectionObserver(s,d);for(let p of c)h.observe(p)}function s(c,d){for(let h of c){let p=h.intersectionRatio===1;u(h.target.id,p)}}function u(c,d){xa('a[href="#'+c+'"]',h=>{h.closest("li").classList.toggle("current-heading",d)})}}}var bv=zx;function yv(t){let n=new Date(t*1e3),i=n.getHours(),s=n.getMinutes();return`${(i>9?"":"0")+i}:${(s>9?"":"0")+s}`}class Ox{setup(){this.draftsEnabled=this.$opts.draftsEnabled==="true",this.editorType=this.$opts.editorType,this.pageId=Number(this.$opts.pageId),this.isNewDraft=this.$opts.pageNewDraft==="true",this.hasDefaultTitle=this.$opts.hasDefaultTitle||!1,this.container=this.$el,this.titleElem=this.$refs.titleContainer.querySelector("input"),this.saveDraftButton=this.$refs.saveDraft,this.discardDraftButton=this.$refs.discardDraft,this.discardDraftWrap=this.$refs.discardDraftWrap,this.draftDisplay=this.$refs.draftDisplay,this.draftDisplayIcon=this.$refs.draftDisplayIcon,this.changelogInput=this.$refs.changelogInput,this.changelogDisplay=this.$refs.changelogDisplay,this.draftText=this.$opts.draftText,this.autosaveFailText=this.$opts.autosaveFailText,this.editingPageText=this.$opts.editingPageText,this.draftDiscardedText=this.$opts.draftDiscardedText,this.setChangelogText=this.$opts.setChangelogText,this.editorHTML="",this.editorMarkdown="",this.autoSave={interval:null,frequency:3e4,last:0},this.pageId!==0&&this.draftsEnabled&&window.setTimeout(()=>{this.startAutoSave()},1e3),this.draftDisplay.innerHTML=this.draftText,this.setupListeners(),this.setInitialFocus()}setupListeners(){window.$events.listen("editor-save-draft",this.saveDraft.bind(this)),window.$events.listen("editor-save-page",this.savePage.bind(this)),window.$events.listen("editor-html-change",t=>{this.editorHTML=t}),window.$events.listen("editor-markdown-change",t=>{this.editorMarkdown=t}),this.changelogInput.addEventListener("change",this.updateChangelogDisplay.bind(this)),ot(this.saveDraftButton,this.saveDraft.bind(this)),ot(this.discardDraftButton,this.discardDraft.bind(this))}setInitialFocus(){if(console.log({HAS:this.hasDefaultTitle}),this.hasDefaultTitle)return this.titleElem.select();window.setTimeout(()=>{window.$events.emit("editor::focus","")},500)}startAutoSave(){let t=this.titleElem.value.trim()+"::"+this.editorHTML;this.autoSaveInterval=window.setInterval(()=>{let n=Date.now()-this.autoSave.last<this.autoSave.frequency/2;if(n)return;const i=this.titleElem.value.trim()+"::"+this.editorHTML;i!==t&&(t=i,this.saveDraft())},this.autoSave.frequency)}savePage(){this.container.closest("form").submit()}async saveDraft(){const t={name:this.titleElem.value.trim(),html:this.editorHTML};this.editorType==="markdown"&&(t.markdown=this.editorMarkdown);try{const n=await window.$http.put(`/ajax/page/${this.pageId}/save-draft`,t);this.isNewDraft||this.toggleDiscardDraftVisibility(!0),this.draftNotifyChange(`${n.data.message} ${yv(n.data.timestamp)}`),this.autoSave.last=Date.now()}catch(n){try{const i=`draft-save-fail-${new Date().toISOString()}`;window.localStorage.setItem(i,JSON.stringify(t))}catch(i){}window.$events.emit("error",this.autosaveFailText)}}draftNotifyChange(t){this.draftDisplay.innerText=t,this.draftDisplayIcon.classList.add("visible"),window.setTimeout(()=>{this.draftDisplayIcon.classList.remove("visible")},2e3)}async discardDraft(){let t;try{t=await window.$http.get(`/ajax/page/${this.pageId}`)}catch(n){return console.error(n)}this.autoSave.interval&&window.clearInterval(this.autoSave.interval),this.draftDisplay.innerText=this.editingPageText,this.toggleDiscardDraftVisibility(!1),window.$events.emit("editor-html-update",t.data.html||""),window.$events.emit("editor-markdown-update",t.data.markdown||t.data.html),this.titleElem.value=t.data.name,window.setTimeout(()=>{this.startAutoSave()},1e3),window.$events.emit("success",this.draftDiscardedText)}updateChangelogDisplay(){let t=this.changelogInput.value.trim();t.length===0?t=this.setChangelogText:t.length>16&&(t=t.slice(0,16)+"..."),this.changelogDisplay.innerText=t}toggleDiscardDraftVisibility(t){this.discardDraftWrap.classList.toggle("hidden",!t)}}var wv=Ox;class Rx{constructor(t){this.elem=t,this.input=t.querySelector("input"),this.resetButton=t.querySelector("[page-picker-reset]"),this.selectButton=t.querySelector("[page-picker-select]"),this.display=t.querySelector("[page-picker-display]"),this.defaultDisplay=t.querySelector("[page-picker-default]"),this.buttonSep=t.querySelector("span.sep"),this.value=this.input.value,this.setupListeners()}setupListeners(){this.selectButton.addEventListener("click",this.showPopup.bind(this)),this.display.parentElement.addEventListener("click",this.showPopup.bind(this)),this.resetButton.addEventListener("click",t=>{this.setValue("","")})}showPopup(){window.EntitySelectorPopup.show(t=>{this.setValue(t.id,t.name)})}setValue(t,n){this.value=t,this.input.value=t,this.controlView(n)}controlView(t){let n=this.value&&this.value!==0;if(Xa(this.resetButton,n),Xa(this.buttonSep,n),Xa(this.defaultDisplay,!n),Xa(this.display,n),n){let i=this.getAssetIdFromVal();this.display.textContent=`#${i}, ${t}`,this.display.href=window.baseUrl(`/link/${i}`)}}getAssetIdFromVal(){return Number(this.value)}}function Xa(t,n){let i=t.tagName==="BUTTON"||t.tagName==="SPAN"?"inline-block":"block";t.style.display=n?i:"none"}var kv=Rx;class Px{constructor(t){this.container=t;const n=t.querySelector("[permissions-table-toggle-all]");n.addEventListener("click",this.toggleAllClick.bind(this));const i=t.querySelectorAll("[permissions-table-toggle-all-in-row]");for(let u of i)u.addEventListener("click",this.toggleRowClick.bind(this));const s=t.querySelectorAll("[permissions-table-toggle-all-in-column]");for(let u of s)u.addEventListener("click",this.toggleColumnClick.bind(this))}toggleAllClick(t){t.preventDefault(),this.toggleAllInElement(this.container)}toggleRowClick(t){t.preventDefault(),this.toggleAllInElement(t.target.closest("tr"))}toggleColumnClick(t){t.preventDefault();const n=t.target.closest("th,td"),i=Array.from(n.parentElement.children).indexOf(n),s=n.closest("table").querySelectorAll("tr"),u=[];for(let c of s){const d=c.children[i];d&&u.push(...d.querySelectorAll("input[type=checkbox]"))}this.toggleAllInputs(u)}toggleAllInElement(t){const n=t.querySelectorAll("input[type=checkbox]");this.toggleAllInputs(n)}toggleAllInputs(t){const n=t.length>0?t[0].checked:!1;for(let i of t)i.checked=!n,i.dispatchEvent(new Event("change"))}}var xv=Px;class Nx{setup(){this.container=this.$el,this.hideButtons=this.$manyRefs.hide||[],this.onkeyup=null,this.onHide=null,this.setupListeners()}setupListeners(){let t=null;this.container.addEventListener("mousedown",n=>{t=n.target}),this.container.addEventListener("click",n=>{if(n.target===this.container&&t===this.container)return this.hide()}),ot(this.hideButtons,n=>this.hide())}hide(t=null){Ka(this.container,240,t),this.onkeyup&&(window.removeEventListener("keyup",this.onkeyup),this.onkeyup=null),this.onHide&&this.onHide()}show(t=null,n=null){Og(this.container,240,t),this.onkeyup=i=>{i.key==="Escape"&&this.hide()},window.addEventListener("keyup",this.onkeyup),this.onHide=n}}var _v=Nx;class Bx{constructor(t){this.elem=t,this.colorInput=t.querySelector("input[type=color]"),this.lightColorInput=t.querySelector('input[name="setting-app-color-light"]'),this.resetButton=t.querySelector("[setting-app-color-picker-reset]"),this.defaultButton=t.querySelector("[setting-app-color-picker-default]"),this.colorInput.addEventListener("change",this.updateColor.bind(this)),this.colorInput.addEventListener("input",this.updateColor.bind(this)),this.resetButton.addEventListener("click",n=>{this.colorInput.value=this.colorInput.dataset.current,this.updateColor()}),this.defaultButton.addEventListener("click",n=>{this.colorInput.value=this.colorInput.dataset.default,this.updateColor()})}updateColor(){const t=this.colorInput.value,n=this.hexToRgb(t),i="rgba("+[n.r,n.g,n.b,"0.15"].join(",")+")";this.lightColorInput.value=i;const s=document.getElementById("custom-styles"),u=s.getAttribute("data-color"),c=s.getAttribute("data-color-light");s.innerHTML=s.innerHTML.split(u).join(t),s.innerHTML=s.innerHTML.split(c).join(i),s.setAttribute("data-color",t),s.setAttribute("data-color-light",i)}hexToRgb(t){const n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return{r:n?parseInt(n[1],16):0,g:n?parseInt(n[2],16):0,b:n?parseInt(n[3],16):0}}}var Cv=Bx;class jx{constructor(t){this.elem=t,this.colorInput=t.querySelector("input[type=color]"),this.resetButton=t.querySelector("[setting-color-picker-reset]"),this.defaultButton=t.querySelector("[setting-color-picker-default]"),this.resetButton.addEventListener("click",n=>{this.colorInput.value=this.colorInput.dataset.current}),this.defaultButton.addEventListener("click",n=>{this.colorInput.value=this.colorInput.dataset.default})}}var Sv=jx;class Hx{constructor(t){this.elem=t,this.input=document.getElementById("books-input"),this.shelfBooksList=t.querySelector("[shelf-sort-assigned-books]"),this.initSortable(),this.setupListeners()}initSortable(){const t=this.elem.querySelectorAll(".scroll-box");for(let n of t)new hi(n,{group:"shelf-books",ghostClass:"primary-background-light",animation:150,onSort:this.onChange.bind(this)})}setupListeners(){this.elem.addEventListener("click",t=>{const n=t.target.closest(".scroll-box-item:not(.instruction)");n&&(t.preventDefault(),this.sortItemClick(n))})}sortItemClick(t){const n=this.elem.querySelectorAll(".scroll-box"),i=Array.from(n).filter(s=>t.parentElement!==s);i.length>0&&i[0].appendChild(t),this.onChange()}onChange(){const t=Array.from(this.shelfBooksList.querySelectorAll("[data-id]"));this.input.value=t.map(n=>n.getAttribute("data-id")).join(",")}}var Ev=Hx;class Ux{constructor(t){this.elem=t,this.toggleElem=t.querySelector(".sidebar-toggle"),this.toggleElem.addEventListener("click",this.toggle.bind(this))}toggle(t=!0){this.elem.classList.toggle("open")}}var Dv=Ux;class Wx{setup(){this.container=this.$el,this.handleSelector=this.$opts.handleSelector;const t=new hi(this.container,{handle:this.handleSelector,animation:150,onSort:()=>{this.$emit("sort",{ids:t.toArray()})},setData(n,i){const s=i.getAttribute("data-drag-content");if(s){const u=JSON.parse(s);for(const[c,d]of Object.entries(u))n.setData(c,d)}},revertOnSpill:!0,dropBubble:!0,dragoverBubble:!1})}}var Av=Wx;class $x{setup(){this.$el.addEventListener("change",()=>{const t=this.$el.closest("form");t&&t.submit()})}}var Tv=$x;class Gx{setup(){this.tabContentsByName={},this.tabButtonsByName={},this.allContents=[],this.allButtons=[];for(const[t,n]of Object.entries(this.$manyRefs||{})){if(t.startsWith("toggle")){const i=t.replace("toggle","").toLowerCase();ot(n,s=>this.show(i)),this.allButtons.push(...n),this.tabButtonsByName[i]=n}if(t.startsWith("content")){const i=t.replace("content","").toLowerCase();this.tabContentsByName[i]=n,this.allContents.push(...n)}}}show(t){this.allContents.forEach(s=>{s.classList.add("hidden"),s.classList.remove("selected")}),this.allButtons.forEach(s=>s.classList.remove("selected"));const n=this.tabContentsByName[t]||[],i=this.tabButtonsByName[t]||[];n.length>0&&(n.forEach(s=>{s.classList.remove("hidden"),s.classList.add("selected")}),i.forEach(s=>s.classList.add("selected")))}}var Lv=Gx;class Kx{setup(){this.addRemoveComponentEl=this.$refs.addRemove,this.container=this.$el,this.rowSelector=this.$opts.rowSelector,this.setupListeners()}setupListeners(){this.container.addEventListener("change",t=>{const n=this.addRemoveComponentEl.components["add-remove-rows"];this.hasEmptyRows()||n.add()})}hasEmptyRows(){const t=this.container.querySelectorAll(this.rowSelector),n=[...t].find(i=>[...i.querySelectorAll("input")].filter(s=>s.value).length===0);return n!==void 0}}var Iv=Kx;class Vx{constructor(t){this.elem=t,this.list=t.querySelector("[template-manager-list]"),this.searching=!1,_t(this.elem,"[template-action]","click",this.handleTemplateActionClick.bind(this)),_t(this.elem,".pagination a","click",this.handlePaginationClick.bind(this)),_t(this.elem,".template-item-content","click",this.handleTemplateItemClick.bind(this)),_t(this.elem,".template-item","dragstart",this.handleTemplateItemDragStart.bind(this)),this.setupSearchBox()}handleTemplateItemClick(t,n){const i=n.closest("[template-id]").getAttribute("template-id");this.insertTemplate(i,"replace")}handleTemplateItemDragStart(t,n){const i=n.closest("[template-id]").getAttribute("template-id");t.dataTransfer.setData("bookstack/template",i),t.dataTransfer.setData("text/plain",i)}handleTemplateActionClick(t,n){t.stopPropagation();const i=n.getAttribute("template-action"),s=n.closest("[template-id]").getAttribute("template-id");this.insertTemplate(s,i)}async insertTemplate(t,n="replace"){const i=await window.$http.get(`/templates/${t}`),s="editor::"+n;window.$events.emit(s,i.data)}async handlePaginationClick(t,n){t.preventDefault();const i=n.getAttribute("href"),s=await window.$http.get(i);this.list.innerHTML=s.data}setupSearchBox(){const t=this.elem.querySelector(".search-box");if(!t)return;const n=t.querySelector("input"),i=t.querySelector("button"),s=t.querySelector("button.search-box-cancel");async function u(){const c=n.value,d=await window.$http.get("/templates",{search:c});s.style.display=c?"block":"none",this.list.innerHTML=d.data}u=u.bind(this),t.addEventListener("keypress",c=>{c.key==="Enter"&&(c.preventDefault(),u())}),i.addEventListener("click",c=>{u()}),s.addEventListener("click",c=>{n.value="",u()})}}var Fv=Vx;class Yx{constructor(t){this.elem=t,this.input=t.querySelector("input[type=hidden]"),this.checkbox=t.querySelector("input[type=checkbox]"),this.checkbox.addEventListener("change",this.stateChange.bind(this))}stateChange(){this.input.value=this.checkbox.checked?"true":"false";const t=new Event("change");this.input.dispatchEvent(t)}}var Mv=Yx;class Xx{constructor(t){this.elem=t,this.lastLayoutType="none",this.onDestroy=null,this.scrollCache={content:0,info:0},this.lastTabShown="content",this.mobileTabClick=this.mobileTabClick.bind(this),this.updateLayout(),window.addEventListener("resize",n=>{this.updateLayout()},{passive:!0})}updateLayout(){let t="tablet";if(window.innerWidth<=1e3&&(t="mobile"),window.innerWidth>=1400&&(t="desktop"),t===this.lastLayoutType)return;this.onDestroy&&(this.onDestroy(),this.onDestroy=null),t==="desktop"?this.setupDesktop():t==="mobile"&&this.setupMobile(),this.lastLayoutType=t}setupMobile(){const t=document.querySelectorAll("[tri-layout-mobile-tab]");for(let n of t)n.addEventListener("click",this.mobileTabClick);this.onDestroy=()=>{for(let n of t)n.removeEventListener("click",this.mobileTabClick)}}setupDesktop(){}mobileTabClick(t){const n=t.target.getAttribute("tri-layout-mobile-tab");this.showTab(n)}showContent(){this.showTab("content",!1)}showTab(t,n=!0){this.scrollCache[this.lastTabShown]=document.documentElement.scrollTop;const i=document.querySelectorAll(".tri-layout-mobile-tab");for(let u of i){const c=u.getAttribute("tri-layout-mobile-tab")===t;u.classList.toggle("active",c)}const s=t==="info";if(this.elem.classList.toggle("show-info",s),n){const u=document.querySelector("header"),c=u.getBoundingClientRect().bottom;document.documentElement.scrollTop=this.scrollCache[t]||c,setTimeout(()=>{document.documentElement.scrollTop=this.scrollCache[t]||c},50)}this.lastTabShown=t}}var qv=Xx;class Zx{setup(){this.input=this.$refs.input,this.userInfoContainer=this.$refs.userInfo,this.hide=this.$el.components.dropdown.hide,_t(this.$el,"a.dropdown-search-item","click",this.selectUser.bind(this))}selectUser(t,n){const i=n.getAttribute("data-id");this.input.value=i,this.userInfoContainer.innerHTML=n.innerHTML,this.hide()}}var zv=Zx;function Ov(t,n,i){const s=new bo(t.clipboardData||t.dataTransfer);if(!s.hasItems()||s.containsTabularData())return;const u=s.getImages();for(const c of u){const d="image-"+Math.random().toString(16).slice(2),h=window.baseUrl("/loading.gif");t.preventDefault(),setTimeout(()=>{n.insertContent(`<p><img src="${h}" id="${d}"></p>`),Qx(c,i).then(p=>{const g=p.name.replace(/"/g,""),y=`<img src="${p.thumbs.display}" alt="${g}" />`,m=n.dom.create("a",{target:"_blank",href:p.url},y);n.dom.replace(m,d)}).catch(p=>{n.dom.remove(d),window.$events.emit("error",i.imageUploadErrorText),console.log(p)})},10)}}async function Qx(t,n){if(t===null||t.type.indexOf("image")!==0)throw new Error("Not an image file");let i="png";if(t.name){let d=t.name.match(/\.(.+)$/);d.length>1&&(i=d[1])}const s="image-"+Date.now()+"."+i,u=new FormData;u.append("file",t,s),u.append("uploaded_to",n.pageId);const c=await window.$http.post(window.baseUrl("/images/gallery"),u);return c.data}function Jx(t){for(let n=1;n<5;n++)t.shortcuts.add("meta+"+n,"",["FormatBlock",!1,"h"+(n+1)]);t.shortcuts.add("meta+5","",["FormatBlock",!1,"p"]),t.shortcuts.add("meta+d","",["FormatBlock",!1,"p"]),t.shortcuts.add("meta+6","",["FormatBlock",!1,"blockquote"]),t.shortcuts.add("meta+q","",["FormatBlock",!1,"blockquote"]),t.shortcuts.add("meta+7","",["codeeditor",!1,"pre"]),t.shortcuts.add("meta+e","",["codeeditor",!1,"pre"]),t.shortcuts.add("meta+8","",["FormatBlock",!1,"code"]),t.shortcuts.add("meta+shift+E","",["FormatBlock",!1,"code"]),t.shortcuts.add("meta+S","",()=>{window.$events.emit("editor-save-draft")}),t.shortcuts.add("meta+13","",()=>{window.$events.emit("editor-save-page")}),t.shortcuts.add("meta+9","",function(){const n=t.selection.getNode(),i=n?n.closest(".callout"):null,s=["info","success","warning","danger"],u=s.findIndex(h=>i&&i.classList.contains(h)),c=(u+1)%s.length,d=s[c];t.formatter.apply("callout"+d)})}function e_(t){window.$http.get(window.baseUrl("/custom-head-content")).then(n=>{if(!n.data)return;let i=t.getDoc().querySelector("head");i.innerHTML+=n.data})}function t_(){function t(s){return s.className==="CodeMirrorContainer"}function n(s){const u=s.selection.getNode();if(!t(u)){const h=s.selection.getNode().textContent;window.components.first("code-editor").open(h,"",(p,g)=>{const y=document.createElement("div");y.innerHTML=`<pre><code class="language-${g}"></code></pre>`,y.querySelector("code").innerText=p,s.formatter.toggle("pre");const m=s.selection.getNode();s.dom.setHTML(m,y.querySelector("pre").innerHTML),s.fire("SetContent"),s.focus()});return}let c=u.hasAttribute("data-lang")?u.getAttribute("data-lang"):"",d=u.querySelector("textarea").textContent;window.components.first("code-editor").open(d,c,(h,p)=>{const g=u.querySelector(".CodeMirror"),y=g.CodeMirror;y&&(Nt.setContent(y,h),Nt.setMode(y,p,h));const m=u.querySelector("textarea");m&&(m.textContent=h),u.setAttribute("data-lang",p),s.focus()})}function i(s){const u=s.querySelector("textarea"),c=u.textContent,d=s.getAttribute("data-lang");s.removeAttribute("contentEditable");const h=document.createElement("pre"),p=document.createElement("code");p.classList.add(`language-${d}`),p.textContent=c,h.appendChild(p),s.parentElement.replaceChild(h,s)}window.tinymce.PluginManager.add("codeeditor",function(s,u){const c=s.$;s.addButton("codeeditor",{text:"Code block",icon:!1,cmd:"codeeditor"}),s.addCommand("codeeditor",()=>{n(s)}),s.on("PreProcess",function(d){c("div.CodeMirrorContainer",d.node).each((h,p)=>{i(p)})}),s.on("dblclick",d=>{let h=s.selection.getNode();if(!t(h))return;n(s)}),s.on("SetContent",function(){c(".CodeMirrorContainer").filter((h,p)=>typeof p.querySelector(".CodeMirror").CodeMirror=="undefined").each((h,p)=>{i(p)});const d=c("body > pre").filter((h,p)=>p.contentEditable!=="false");if(!d.length)return;s.undoManager.transact(function(){d.each((h,p)=>{Nt.wysiwygView(p)})})})})}function n_(t,n,i,s){let u=null,c=null;function d(m){return m.hasAttribute("drawio-diagram")}function h(m,b=null){u=m,c=b,window.ImageManager.show(function(w){if(b){let D=b.querySelector("img");u.dom.setAttrib(D,"src",w.url),u.dom.setAttrib(b,"drawio-diagram",w.id)}else{let D=`<div drawio-diagram="${w.id}" contenteditable="false"><img src="${w.url}"></div>`;u.insertContent(D)}},"drawio")}function p(m,b=null){u=m,c=b,dn.show(t,y,g)}async function g(m){const b="image-"+Math.random().toString(16).slice(2),w=window.baseUrl("/loading.gif");if(c){dn.close();let D=c.querySelector("img");try{const E=await dn.upload(m,i);u.dom.setAttrib(D,"src",E.url),u.dom.setAttrib(c,"drawio-diagram",E.id)}catch(E){window.$events.emit("error",s.imageUploadErrorText),console.log(E)}return}setTimeout(async()=>{u.insertContent(`<div drawio-diagram contenteditable="false"><img src="${w}" id="${b}"></div>`),dn.close();try{const D=await dn.upload(m,i);u.dom.setAttrib(b,"src",D.url),u.dom.get(b).parentNode.setAttribute("drawio-diagram",D.id)}catch(D){u.dom.remove(b),window.$events.emit("error",s.imageUploadErrorText),console.log(D)}},5)}function y(){if(!c)return Promise.resolve("");let m=c.getAttribute("drawio-diagram");return dn.load(m)}window.tinymce.PluginManager.add("drawio",function(m,b){m.addCommand("drawio",()=>{const w=m.selection.getNode();p(m,d(w)?w:null)}),m.addButton("drawio",{type:"splitbutton",tooltip:"Drawing",image:`data:image/svg+xml;base64,${btoa(`<svg viewBox="0 0 24 24" fill="${n?"#BBB":"#000000"}" xmlns="http://www.w3.org/2000/svg">