1 line
3.4 KiB
JavaScript
1 line
3.4 KiB
JavaScript
application.register("fictioneer-mobile-menu",class extends Stimulus.Controller{static get targets(){return["frame","bookmarks","panelBookmarks"]}advanced=!!_$(".mobile-menu._advanced-mobile-menu");open=!1;editingBookmarks=!1;currentFrame=null;bookmarkTemplate=_$$$("mobile-bookmark-template");chapterId=_$("article")?.id;connect(){window.FictioneerApp.Controllers.fictioneerMobileMenu=this}toggle(e=null){this.open=e??!this.open,this.advanced?this.#e(this.open):this.#o(this.open)}clickOutside({detail:{target:e}}){this.open&&"site"===e?.id&&this.toggle(!1)}openFrame({params:{frame:e}}){const o=`mobile-frame-${e}`;this.editingBookmarks=!1,this.panelBookmarksTarget.dataset.editing=!1,this.hasFrameTarget&&this.frameTargets.forEach((e=>{e.classList.toggle("_active",e.id===o),e.id===o&&(this.currentFrame=e)}))}back(){this.openFrame({params:{frame:"main"}})}setMobileBookmarks(){const e=window.FictioneerApp.Controllers.fictioneerBookmarks;if(e&&this.hasBookmarksTarget){const o=Object.entries(e.data());if(this.bookmarksTarget.innerHTML="",!o||o.length<1){const e=document.createElement("li");return e.classList.add("no-bookmarks"),e.textContent=this.bookmarksTarget.dataset.empty,void this.bookmarksTarget.appendChild(e)}const t=document.createDocumentFragment();o.forEach((([e,{color:o,progress:r,link:s,chapter:a,"paragraph-id":i}])=>{const n=this.bookmarkTemplate.content.cloneNode(!0),l=n.querySelector(".mobile-menu__bookmark");l.classList.add(`bookmark-${e}`),l.dataset.color=o,n.querySelector(".mobile-menu__bookmark-progress > div > div").style.width=`${r.toFixed(1)}%`,n.querySelector(".mobile-menu__bookmark a").href=`${s}#paragraph-${i}`,n.querySelector(".mobile-menu__bookmark a span").innerText=a,n.querySelector(".mobile-menu-bookmark-delete-button").setAttribute("data-fictioneer-mobile-menu-id-param",e),t.appendChild(n)})),this.bookmarksTarget.appendChild(t)}}deleteBookmark({params:{id:e}}){const o=window.FictioneerApp.Controllers.fictioneerBookmarks;o?(o.remove({params:{id:e}}),this.setMobileBookmarks()):fcn_showNotification("Error: Bookmarks Controller not connected.",3,"warning")}toggleBookmarksEdit(){this.editingBookmarks=!this.editingBookmarks,this.panelBookmarksTarget.dataset.editing=this.editingBookmarks}scrollToComments(){this.#t(_$$$("comments"))}scrollToBookmark(){const e=window.FictioneerApp.Controllers.fictioneerBookmarks;if(!e)return void fcn_showNotification("Error: Bookmarks Controller not connected.",3,"warning");const o=e.data()?.[this.chapterId]?.["paragraph-id"],t=_$(`[data-paragraph-id="${o}"]`);this.#t(t)}changeLightness({currentTarget:e}){fcn_updateDarken(fcn_siteSettings.darken+parseFloat(e.value))}#t(e){this.toggle(!1),e&&setTimeout((()=>{FcnUtils.scrollTo(e)}),200)}#o(e){this.back(),e?(document.body.classList.add("mobile-menu-open","scrolling-down"),document.body.classList.remove("scrolling-up")):document.body.classList.remove("mobile-menu-open")}#e(e){const o=_$$$("wpadminbar")?.offsetHeight??0,t=window.scrollY,r=FcnGlobals.eSite.scrollTop;this.back(),e?(document.body.classList.add("mobile-menu-open","scrolling-down","scrolled-to-top"),document.body.classList.remove("scrolling-up"),FcnGlobals.eSite.classList.add("transformed-scroll","transformed-site"),FcnGlobals.eSite.scrollTop=t-o):(FcnGlobals.eSite.classList.remove("transformed-site","transformed-scroll"),document.body.classList.remove("mobile-menu-open"),document.documentElement.style.scrollBehavior="auto",window.scroll(0,r+o),document.documentElement.style.scrollBehavior="")}}); |