{if(t.success){let e=fcn_getUserData();e=t.data,e.lastLoaded=Date.now(),fcn_setUserData(e);const n=new CustomEvent("fcnUserDataReady",{detail:{data:t.data,time:new Date},bubbles:!0,cancelable:!1});document.dispatchEvent(n)}else{const e=fcn_getUserData();e.lastLoaded=Date.now(),e.loggedIn=!1,fcn_setUserData(e);const n=new CustomEvent("fcnUserDataFailed",{detail:{response:t,time:new Date},bubbles:!0,cancelable:!1});document.dispatchEvent(n)}})).catch((t=>{localStorage.removeItem("fcnUserData");const e=new CustomEvent("fcnUserDataError",{detail:{error:t,time:new Date},bubbles:!0,cancelable:!1});document.dispatchEvent(e)}))}function fcn_unsetOauth(t){const e=prompt(t.dataset.warning);if(!e||e.toLowerCase()!=t.dataset.confirm.toLowerCase())return
;const n=_$$$(`oauth-${t.dataset.channel}`);n.classList.add("ajax-in-progress"),fcn_ajaxPost(payload={action:"fictioneer_ajax_unset_my_oauth",nonce:t.dataset.nonce,channel:t.dataset.channel,id:t.dataset.id}).then((t=>{t.success?(n.classList.remove("_connected"),n.classList.add("_disconnected"),n.querySelector("button").remove(),fcn_showNotification(n.dataset.unset)):(n.style.background="var(--notice-warning-background)",fcn_showNotification(t.data.failure??t.data.error??fictioneer_tl.notification.error,5,"warning"),(t.data.error||t.data.failure)&&console.error("Error:",t.data.error??t.data.failure))})).catch((t=>{t.status&&t.statusText&&(n.style.background="var(--notice-warning-background)",fcn_showNotification(`${t.status}: ${t.statusText}`,5,"warning")),console.error(t)})).then((()=>{n.classList.remove("ajax-in-progress")}))}function fcn_deleteMyAccount(t){if(_$$$("button-delete-my-account").hasAttribute("disabled"))return;const e=prompt(t.dataset.warning);e&&e.toLowerCase()==t.dataset.confirm.toLowerCase()&&(_$$$("button-delete-my-account").setAttribute("disabled",!0),fcn_ajaxPost({action:"fictioneer_ajax_delete_my_account",nonce:t.dataset.nonce,id:t.dataset.id}).then((t=>{t.success?(localStorage.removeItem("fcnAuth"),localStorage.removeItem("fcnProfileAvatar"),location.reload()):(_$$$("button-delete-my-account").innerHTML=t.data.button,fcn_showNotification(t.data.failure??t.data.error??fictioneer_tl.notification.error,5,"warning"),(t.data.error||t.data.failure)&&console.error("Error:",t.data.error??t.data.failure))})).catch((t=>{t.status&&t.statusText&&(fcn_showNotification(`${t.status}: ${t.statusText}`,5,"warning"),_$$$("button-delete-my-account").innerHTML=response.data.button),console.error(t)})))}_$$('[data-click-action*="toggle-chapter-order"]').forEach((t=>{t.addEventListener("click",(t=>{fcn_isToggling||(fcn_isToggling=!0,setTimeout((()=>fcn_isToggling=!1),50),fcn_storySettings.order="asc"===t.currentTarget.dataset.order?"desc":"asc",fcn_setStorySettings(fcn_storySettings),fcn_applyStorySettings())}))})),_$$('[data-click-action*="toggle-chapter-view"]').forEach((t=>{t.addEventListener("click",(t=>{fcn_isToggling||(fcn_isToggling=!0,setTimeout((()=>fcn_isToggling=!1),50),fcn_storySettings.view="list"===t.currentTarget.dataset.view?"grid":"list",fcn_setStorySettings(fcn_storySettings),fcn_applyStorySettings())}))})),_$$(".chapter-group__folding-toggle").forEach((t=>{t.addEventListener("click",(t=>{const e=t.currentTarget.closest(".chapter-group[data-folded]");e&&(e.dataset.folded="true"==e.dataset.folded?"false":"true")}))})),_$$(".tabs__item").forEach((t=>{t.addEventListener("click",(t=>{fcn_toggleStoryTab(t.currentTarget)}))})),_$(".comment-section")?.addEventListener("click",(t=>{t.target?.classList.contains("load-more-comments-button")&&fcn_loadStoryComments(t.target)})),_$$('[data-action="download-epub"]').forEach((t=>{t.addEventListener("click",(t=>{t.preventDefault(),t.currentTarget.classList.contains("ajax-in-progress")||(t.currentTarget.classList.add("ajax-in-progress"),fcn_startEpubDownload(t.currentTarget))}))})),document.addEventListener("DOMContentLoaded",(()=>{fcn_isLoggedIn&&!fcn_theRoot.dataset.ajaxAuth&&fcn_getProfileImage()})),fcn_theRoot.dataset.ajaxAuth&&document.addEventListener("fcnAuthReady",(()=>{fcn_getProfileImage()})),fcn_theRoot.dataset.ajaxAuth?document.addEventListener("fcnAuthReady",(()=>{fcn_fetchUserData()})):document.addEventListener("DOMContentLoaded",(()=>{fcn_isLoggedIn&&fcn_fetchUserData()})),_$$(".button-unset-oauth").forEach((t=>{t.addEventListener("click",(t=>{fcn_unsetOauth(t.currentTarget)}))})),_$$$("button-delete-my-account")?.addEventListener("click",(t=>{fcn_deleteMyAccount(t.currentTarget)}));const fcn_profileDataTranslations=_$$$("profile-data-translations")?.dataset;function fcn_dataDeletionPrompt(t){const e=prompt(t.dataset.warning);return!(!e||e.toLowerCase()!=t.dataset.confirm.toLowerCase())}function fcn_clearData(t,e){const n=t.closest(".card");localStorage.removeItem("fcnBookshelfContent"),n.classList.add("ajax-in-progress"),t.remove(),fcn_ajaxPost({action:e,fcn_fast_ajax:1,nonce:t.dataset.nonce}).then((t=>{t.success?n.querySelector(".card__content").innerHTML=t.data.success:(fcn_showNotification(t.data.failure??t.data.error??fictioneer_tl.notification.error,10,"warning"),(t.data.error||t.data.failure)&&console.error("Error:",t.data.error??t.data.failure))})).catch((t=>{t.status&&t.statusText&&fcn_showNotification(`${t.status}: ${t.statusText}`,10,"warning"),console.error(t)})).then((()=>{n.classList.remove("ajax-in-progress")}))}_$(".button-clear-comments")?.addEventListener("click",(t=>{fcn_dataDeletionPrompt(t.currentTarget)&&fcn_clearData(t.currentTarget,"fictioneer_ajax_clear_my_comments")})),_$(".button-clear-comment-subscriptions")?.addEventListener("click",(t=>{fcn_dataDeletionPrompt(t.currentTarget)&&fcn_clearData(t.currentTarget,"fictioneer_ajax_clear_my_comment_subscriptions")})),_$(".button-clear-checkmarks")?.addEventListener("click",(t=>{if(!fcn_dataDeletionPrompt(t.currentTarget))return;const e=fcn_getUserData();e.checkmarks={data:{},updated:Date.now()},fcn_setUserData(e),fcn_updateCheckmarksView(),fcn_clearData(t.currentTarget,"fictioneer_ajax_clear_my_checkmarks",!0)})),_$(".button-clear-reminders")?.addEventListener("click",(t=>{if(!fcn_dataDeletionPrompt(t.currentTarget))return;const e=fcn_getUserData();e.reminders={data:{}},fcn_setUserData(e),fcn_updateRemindersView(),fcn_clearData(t.currentTarget,"fictioneer_ajax_clear_my_reminders",!0)})),_$(".button-clear-follows")?.addEventListener("click",(t=>{if(!fcn_dataDeletionPrompt(t.currentTarget))return;const e=fcn_getUserData();e.follows={data:{}},fcn_setUserData(e),fcn_updateFollowsView(),fcn_clearData(t.currentTarget,"fictioneer_ajax_clear_my_follows",!0)})),_$(".button-clear-bookmarks")?.addEventListener("click",(t=>{if(!fcn_dataDeletionPrompt(t.currentTarget))return;const e=fcn_getUserData();e.bookmarks="{}",fcn_setUserData(e),fcn_bookmarks.data={},t.currentTarget.closest(".card").querySelector(".card__content").innerHTML=fcn_profileDataTranslations.clearedSuccess,fcn_setBookmarks(fcn_bookmarks)}));const fcn_jumpToBookmarkButtons=_$$(".button--bookmark"),fcn_mobileBookmarkJump=_$$$("mobile-menu-bookmark-jump"),fcn_mobileBookmarkList=_$(".mobile-menu__bookmark-list"),fcn_bookmarksSmallCardBlock=_$(".bookmarks-block"),fcn_bookmarksSmallCardTemplate=_$(".bookmark-small-card-template");var fcn_bookmarks,fcn_userBookmarksTimeout;function fcn_initializeLocalBookmarks(){fcn_setBookmarks(fcn_bookmarks=fcn_getBookmarks(),!0),fcn_updateBookmarksView()}function fcn_initializeUserBookmarks(t){fcn_setBookmarks(JSON.parse(t.detail.data.bookmarks),!0),fcn_updateBookmarksView()}function fcn_getBookmarks(){let t=fcn_parseJSON(localStorage.getItem("fcnChapterBookmarks"))??{data:{}};return Array.isArray(t.data)&&0===t.data.length&&(t.data={}),t=fcn_fixBookmarks(t),!t||Object.keys(t).length<1?{data:{}}:t}function fcn_fixBookmarks(t){const e={};for(const n in t.data)if(n.startsWith("ch-")){const a=fcn_fixBookmarksNode(t.data[n]);a&&(e[n]=a)}return{data:e}}function fcn_fixBookmarksNode(t){const e={},n={"paragraph-id":"",progress:0,date:"",color:"",chapter:"",link:"",thumb:"",image:"",story:"",content:""};for(const a in n){if(typeof t[a]!=typeof n[a])return null;e[a]=t[a]}const a=new Date(e.date);return a&&"[object Date]"===Object.prototype.toString.call(a)&&!isNaN(a)||(e.date=(new Date).toISOString()),("number"!=typeof e.progress||e.progress<0)&&(e.progress=0),e}function fcn_setBookmarks(t,e=!1){if("object"==typeof t){if(fcn_bookmarks=t,localStorage.setItem("fcnChapterBookmarks",JSON.stringify(t)),fcn_isLoggedIn){const e=fcn_getUserData();e&&(e.bookmarks=JSON.stringify(t),fcn_setUserData(e))}e||fcn_saveUserBookmarks(t)}}function fcn_updateBookmarksView(){if(!fcn_bookmarks||!fcn_bookmarks.data)return;const t=_$(".profile-bookmarks-stats"),e=Object.keys(fcn_bookmarks.data).length;t&&(t.innerHTML=t.innerHTML.replace("%s",e)),e>0&&_$$(".icon-menu-bookmarks").forEach((t=>{t.classList.remove("hidden")})),fcn_showBookmarkCards(),fcn_showChapterBookmark()}function fcn_saveUserBookmarks(t){fcn_isLoggedIn&&(clearTimeout(fcn_userBookmarksTimeout),t=fcn_fixBookmarks(t),fcn_userBookmarksTimeout=setTimeout((()=>{fcn_ajaxPost({action:"fictioneer_ajax_save_bookmarks",fcn_fast_ajax:1,bookmarks:JSON.stringify(t)}).then((t=>{t.success||(fcn_showNotification(t.data.failure??t.data.error??fictioneer_tl.notification.error,3,"warning"),(t.data.error||t.data.failure)&&console.error("Error:",t.data.error??t.data.failure))})).catch((t=>{t.status&&t.statusText&&fcn_showNotification(`${t.status}: ${t.statusText}`,3,"warning"),console.error(t)}))}),fictioneer_ajax.post_debounce_rate))}function fcn_toggleBookmark(t,e="none"){fcn_bookmarks=fcn_getBookmarks();const n=_$(".chapter__article"),a=_$(".current-bookmark");if(!n)return;const o=fcn_bookmarks.data[n.id];if(o&&o["paragraph-id"]==t&&a)"none"!=e&&e!=o.color?(_$(".current-bookmark").dataset.bookmarkColor=e,o.color=e):fcn_removeBookmark(n.id);else{Object.keys(fcn_bookmarks.data).length>=50&&fcn_removeBookmark(Object.keys(fcn_bookmarks.data)[0]);const o=_$(`[data-paragraph-id="${t}"]`),c=_$$$("chapter-bookmark-data").dataset;fcn_bookmarks.data[n.id]={"paragraph-id":t,progress:100*(fcn_offset(o).top-fcn_offset(o.parentElement).top)/o.parentElement.clientHeight,date:(new Date).toISOString(),color:e,chapter:c.title.trim(),link:c.link,thumb:c.thumb,image:c.image,story:c.storyTitle.trim(),content:o.querySelector("span").innerHTML.substring(0,128)+"…"},fcn_jumpToBookmarkButtons.forEach((t=>{t.classList.remove("hidden")})),fcn_mobileBookmarkJump?.removeAttribute("hidden"),a?.classList.remove("current-bookmark"),o.classList.add("current-bookmark"),o.setAttribute("data-bookmark-color",e)}fcn_setMobileMenuBookmarks(),fcn_setBookmarks(fcn_bookmarks)}function fcn_showChapterBookmark(){_$(".current-bookmark")?.classList.remove("current-bookmark");const t=_$(".chapter__article");if(!t||!fcn_bookmarks.data[t.id])return;const e=fcn_bookmarks.data[t.id]["paragraph-id"],n=_$(`[data-paragraph-id="${e}"]`),a=fcn_bookmarks.data[t.id].color??"none";e&&n&&(fcn_jumpToBookmarkButtons.forEach((t=>{t.classList.remove("hidden")})),fcn_mobileBookmarkJump?.removeAttribute("hidden"),n.classList.add("current-bookmark"),n.setAttribute("data-bookmark-color",a))}function fcn_setMobileMenuBookmarks(){fcn_mobileBookmarkList.innerHTML="";const t=Object.entries(fcn_bookmarks.data),e=_$("#mobile-bookmark-template");if(t.length>0){const n=document.createDocumentFragment();t.forEach((([t,{color:a,progress:o,link:c,chapter:s,"paragraph-id":i}])=>{const r=e.content.cloneNode(!0),l=r.querySelector(".mobile-menu__bookmark");l.classList.add(`bookmark-${t}`),l.dataset.color=a,r.querySelector(".mobile-menu__bookmark-progress > div > div").style.width=`${o.toFixed(1)}%`,r.querySelector(".mobile-menu__bookmark a").href=`${c}#paragraph-${i}`,r.querySelector(".mobile-menu__bookmark a span").innerText=s,r.querySelector(".mobile-menu-bookmark-delete-button").setAttribute("data-bookmark-id",t),n.appendChild(r)})),fcn_mobileBookmarkList.appendChild(n),fcn_bookmarkDeleteHandler(_$$(".mobile-menu-bookmark-delete-button"))}else{const t=document.createElement("li");t.classList.add("no-bookmarks"),t.textContent=fcn_mobileBookmarkList.dataset.empty,fcn_mobileBookmarkList.appendChild(t)}}function fcn_showBookmarkCards(){if(!fcn_bookmarks||!fcn_bookmarksSmallCardBlock||!fcn_bookmarksSmallCardTemplate||Object.keys(fcn_bookmarks.data).length<1||_$(".bookmark-card"))return;fcn_bookmarksSmallCardBlock.classList.remove("hidden"),_$(".bookmarks-block__no-bookmarks")?.remove(),_$$(".show-if-bookmarks").forEach((t=>t.classList.remove("hidden")));let t=parseInt(fcn_bookmarksSmallCardBlock.dataset.count);const e=document.createDocumentFragment();Object.entries(fcn_bookmarks.data).sort(((t,e)=>new Date(e[1].date)-new Date(t[1].date))).forEach((([n,{color:a,progress:o,link:c,chapter:s,"paragraph-id":i,date:r,image:l,thumb:f,content:d}])=>{if(0==t)return;t--;const _=fcn_bookmarksSmallCardTemplate.content.cloneNode(!0),u=new Date(r).toLocaleDateString(navigator.language??"en-US",{year:"2-digit",month:"short",day:"numeric"});l&&_.querySelector(".bookmark-card__image")?(_.querySelector(".bookmark-card__image").href=l,_.querySelector(".bookmark-card__image img").src=f):_.querySelector(".bookmark-card__image")?.remove(),_.querySelector(".bookmark-card__excerpt").innerHTML+=d,_.querySelector(".bookmark-card").classList.add(`bookmark-${n}`),_.querySelector(".bookmark-card").dataset.color=a,_.querySelector(".bookmark-card__title > a").href=`${c}#paragraph-${i}`,_.querySelector(".bookmark-card__title > a").innerText=s,_.querySelector(".bookmark-card__percentage").innerText=`${o.toFixed(1)} %`,_.querySelector(".bookmark-card__progress").style.width=`calc(${o.toFixed(1)}% - var(--bookmark-progress-offset, 0px))`,_.querySelector("time").innerText=u,_.querySelector(".button-delete-bookmark").setAttribute("data-bookmark-id",n),e.appendChild(_)})),fcn_bookmarksSmallCardBlock.querySelector("ul").appendChild(e),fcn_bookmarkDeleteHandler(_$$(".button-delete-bookmark"))}function fcn_bookmarkDeleteHandler(t){("object"==typeof t?t:[t]).forEach((t=>{t.addEventListener("click",(t=>{fcn_removeBookmark(t.currentTarget.dataset.bookmarkId),fcn_setBookmarks(fcn_bookmarks),Object.keys(fcn_bookmarks.data).length<1&&(_$(".bookmarks-block")?.classList.add("hidden"),_$$(".show-if-bookmarks").forEach((t=>{t.classList.add("hidden")})))}))}))}function fcn_removeBookmark(t){const e=_$(".chapter__article"),n=_$(".current-bookmark");delete fcn_bookmarks.data[t],e&&e.id==t&&(fcn_jumpToBookmarkButtons.forEach((t=>{t.classList.add("hidden")})),fcn_mobileBookmarkJump?.setAttribute("hidden",!0),n&&(n.classList.remove("current-bookmark"),n.removeAttribute("data-bookmark-color"))),_$$(`.bookmark-${t}`)?.forEach((t=>{t.remove()}))}fcn_initializeLocalBookmarks(),document.addEventListener("fcnUserDataReady",(t=>{fcn_initializeUserBookmarks(t)})),fcn_jumpToBookmarkButtons.forEach((t=>{t.addEventListener("click",(()=>{_$(`[data-paragraph-id="${fcn_bookmarks.data[_$("article").id]["paragraph-id"]}"]`).scrollIntoView({behavior:"smooth"})}))}));const fcn_followsMenuItem=_$$$("follow-menu-button");var fcn_userFollowsTimeout,fcn_follows,fcn_checkmarks,fcn_userCheckmarksTimeout,fcn_userRemindersTimeout,fcn_reminders;function fcn_initializeFollows(t){const e=t.detail.data.follows;!1!==e&&(Array.isArray(e.data)&&0===e.data.length&&(e.data={}),fcn_follows=e,fcn_updateFollowsView(),localStorage.removeItem("fcnBookshelfContent"))}function fcn_toggleFollow(t){const e=fcn_getUserData();if(fcn_follows&&e.follows){if(localStorage.removeItem("fcnBookshelfContent"),JSON.stringify(fcn_follows.data[t])!==JSON.stringify(e.follows.data[t]))return fcn_follows=e.follows,fcn_showNotification(fictioneer_tl.notification.followsResynchronized),void fcn_updateFollowsView();fcn_follows.data[t]?delete fcn_follows.data[t]:fcn_follows.data[t]={story_id:parseInt(t),timestamp:Date.now()},e.follows.data[t]=fcn_follows.data[t],e.lastLoaded=0,fcn_setUserData(e),fcn_updateFollowsView(),clearTimeout(fcn_userFollowsTimeout),fcn_userFollowsTimeout=setTimeout((()=>{fcn_ajaxPost({action:"fictioneer_ajax_toggle_follow",fcn_fast_ajax:1,story_id:t,set:!!fcn_follows.data[t]}).then((t=>{t.success||(fcn_showNotification(t.data.failure??t.data.error??fictioneer_tl.notification.error,5,"warning"),(t.data.error||t.data.failure)&&console.error("Error:",t.data.error??t.data.failure))})).catch((t=>{429===t.status?fcn_showNotification(fictioneer_tl.notification.slowDown,3,"warning"):t.status&&t.statusText&&fcn_showNotification(`${t.status}: ${t.statusText}`,5,"warning"),console.error(t)}))}),fictioneer_ajax.post_debounce_rate)}}function fcn_updateFollowsView(){const t=fcn_getUserData();if(!fcn_follows||!t.follows)return;_$$(".button-follow-story").forEach((t=>{t.classList.toggle("_followed",!!fcn_follows?.data[t.dataset.storyId])})),_$$(".card").forEach((t=>{t.classList.toggle("has-follow",!!fcn_follows?.data[t.dataset.storyId])}));const e=parseInt(fcn_follows.new)>0;_$$(".mark-follows-read, .follows-alert-number, .mobile-menu-button").forEach((t=>{t.classList.toggle("_new",e),e>0&&(t.dataset.newCount=fcn_follows.new)}))}function fcn_setupFollowsHTML(){fcn_followsMenuItem.classList.contains("_loaded")||fcn_ajaxGet({action:"fictioneer_ajax_get_follows_notifications",fcn_fast_ajax:1}).then((t=>{if(t.data.html){const e=_$$$("follow-menu-scroll");e&&(e.innerHTML=t.data.html);const n=_$$$("mobile-menu-follows-list");n&&(n.innerHTML=t.data.html),!1===fcn_getUserData().loggedIn&&(fcn_prepareLogin(),fcn_fetchUserData())}})).catch((t=>{429===t.status?fcn_showNotification(fictioneer_tl.notification.slowDown,3,"warning"):t.status&&t.statusText&&fcn_showNotification(`${t.status}: ${t.statusText}`,5,"warning"),_$$$("follow-menu-scroll")?.remove(),_$$$("mobile-menu-follows-list")?.remove()})).then((()=>{fcn_followsMenuItem.classList.add("_loaded")}))}function fcn_markFollowsRead(){if(!fcn_followsMenuItem.classList.contains("_new")||!fcn_followsMenuItem.classList.contains("_loaded"))return;_$$(".mark-follows-read, .follows-alert-number, .follow-item, .mobile-menu-button").forEach((t=>{t.classList.remove("_new")}));const t=fcn_getUserData();t.new=0,t.lastLoaded=0,fcn_setUserData(t),fcn_ajaxPost({action:"fictioneer_ajax_mark_follows_read",fcn_fast_ajax:1}).catch((t=>{t.status&&t.statusText&&fcn_showNotification(`${t.status}: ${t.statusText}`,5,"warning")}))}function fcn_initializeCheckmarks(t){const e=t.detail.data.checkmarks;!1!==e&&(Array.isArray(e.data)&&0===e.data.length&&(e.data={}),fcn_checkmarks=e,fcn_updateCheckmarksView(),localStorage.removeItem("fcnBookshelfContent"),_$$("button.checkmark").forEach((t=>{t.addEventListener("click",(t=>{fcn_clickCheckmark(t.currentTarget)}))})))}function fcn_toggleCheckmark(t,e,n=null,a=null,o="toggle"){const c=fcn_getUserData();if(fcn_checkmarks&&c.checkmarks){if(localStorage.removeItem("fcnBookshelfContent"),"toggle"===o&&JSON.stringify(fcn_checkmarks.data[t])!==JSON.stringify(c.checkmarks.data[t]))return fcn_checkmarks=c.checkmarks,fcn_showNotification(fictioneer_tl.notification.checkmarksResynchronized),void fcn_updateCheckmarksView();if(fcn_checkmarks.data[t]||(fcn_checkmarks.data[t]=[]),c.checkmarks.data[t]||(c.checkmarks.data[t]=[]),n&&"progress"===e&&!fcn_checkmarks.data[t].includes(n)&&fcn_checkmarks.data[t].push(n),n&&"chapter"===e)if(!fcn_checkmarks.data[t].includes(n)&&"unset"!==o||"set"===o)fcn_checkmarks.data[t].push(n),a&&(a.classList.add("marked"),a.setAttribute("aria-checked",!0));else{fcn_removeItemOnce(fcn_checkmarks.data[t],n),a&&(a.classList.remove("marked"),a.setAttribute("aria-checked",!1)),fcn_removeItemOnce(fcn_checkmarks.data[t],t);const e=_$('button[data-type="story"]');e&&(e.classList.remove("marked"),e.setAttribute("aria-checked",!1))}if("story"===e){const e=(fcn_checkmarks.data[t].includes(t)||"unset"===o)&&"set"!==o;fcn_checkmarks.data[t]=[],e||(_$$("button.checkmark").forEach((e=>{fcn_checkmarks.data[t].push(parseInt(e.dataset.id))})),fcn_checkmarks.data[t].includes(t)||fcn_checkmarks.data[t].push(t))}fcn_checkmarks.data[t]=fcn_checkmarks.data[t].filter(((t,e,n)=>n.indexOf(t)==e)),c.checkmarks.data[t]=fcn_checkmarks.data[t],c.lastLoaded=0,fcn_setUserData(c),fcn_updateCheckmarksView(),clearTimeout(fcn_userCheckmarksTimeout),fcn_userCheckmarksTimeout=setTimeout((()=>{fcn_updateCheckmarks(t,fcn_checkmarks.data[t])}),fictioneer_ajax.post_debounce_rate)}}function fcn_clickCheckmark(t){fcn_toggleCheckmark(parseInt(t.dataset.storyId),t.dataset.type,parseInt(t.dataset.id),t)}function fcn_updateCheckmarks(t,e=null){fcn_ajaxPost({action:"fictioneer_ajax_set_checkmark",fcn_fast_ajax:1,story_id:t,update:(e=e||fcn_getUserData().checkmarks.data[t]).join(" ")}).then((t=>{t.success||(fcn_showNotification(t.data.failure??t.data.error??fictioneer_tl.notification.error,3,"warning"),(t.data.error||t.data.failure)&&console.error("Error:",t.data.error??t.data.failure))})).catch((t=>{t.status&&t.statusText&&fcn_showNotification(`${t.status}: ${t.statusText}`,5,"warning"),console.error(t)}))}function fcn_updateCheckmarksView(){const t=fcn_getUserData(),e=t.checkmarks;if(!e)return;const n=parseInt(fcn_theBody.dataset.storyId);if(n){const a=e.data[n]&&e.data[n].includes(n);if(a){let a=!1;_$$("button.checkmark").forEach((t=>{const o=parseInt(t.dataset.id);e.data[n].includes(o)||(e.data[n].push(o),a=!0)})),a&&(t.checkmarks=e,fcn_setUserData(t),fcn_updateCheckmarks(n,e.data[n]))}_$$$("ribbon-read")?.classList.toggle("hidden",!a)}_$$("button.checkmark").forEach((t=>{const n=parseInt(t.dataset.storyId);if(e.data[n]){const a=e.data[n].includes(parseInt(t.dataset.id));t.classList.toggle("marked",a),t.setAttribute("aria-checked",a)}})),_$$(".card").forEach((t=>{const n=parseInt(t.dataset.storyId),a=e.data[n]&&(e.data[n].includes(parseInt(t.dataset.checkId))||e.data[n].includes(n));t.classList.toggle("has-checkmark",1==a)}))}function fcn_initializeReminders(t){const e=t.detail.data.reminders;!1!==e&&(Array.isArray(e.data)&&0===e.data.length&&(e.data={}),fcn_reminders=e,fcn_updateRemindersView(),localStorage.removeItem("fcnBookshelfContent"))}function fcn_toggleReminder(t){const e=fcn_getUserData();if(fcn_reminders&&e.reminders){if(localStorage.removeItem("fcnBookshelfContent"),JSON.stringify(fcn_reminders.data[t])!==JSON.stringify(e.reminders.data[t]))return fcn_reminders=e.reminders,fcn_showNotification(fictioneer_tl.notification.remindersResynchronized),void fcn_updateRemindersView();fcn_reminders.data[t]?delete fcn_reminders.data[t]:fcn_reminders.data[t]={story_id:parseInt(t),timestamp:Date.now()},e.reminders.data[t]=fcn_reminders.data[t],e.lastLoaded=0,fcn_setUserData(e),fcn_updateRemindersView(),clearTimeout(fcn_userRemindersTimeout),fcn_userRemindersTimeout=setTimeout((()=>{fcn_ajaxPost({action:"fictioneer_ajax_toggle_reminder",fcn_fast_ajax:1,story_id:t,set:!!fcn_reminders.data[t]}).then((t=>{t.success||(fcn_showNotification(t.data.failure??t.data.error??fictioneer_tl.notification.error,5,"warning"),(t.data.error||t.data.failure)&&console.error("Error:",t.data.error??t.data.failure))})).catch((t=>{429===t.status?fcn_showNotification(fictioneer_tl.notification.slowDown,3,"warning"):t.status&&t.statusText&&fcn_showNotification(`${t.status}: ${t.statusText}`,5,"warning"),console.error(t)}))}),fictioneer_ajax.post_debounce_rate)}}function fcn_updateRemindersView(){const t=fcn_getUserData();fcn_reminders&&t.reminders&&(_$$(".button-read-later").forEach((t=>{t.classList.toggle("_remembered",!!fcn_reminders.data[t.dataset.storyId])})),_$$(".card").forEach((t=>{t.classList.toggle("has-reminder",!!fcn_reminders.data[t.dataset.storyId])})))}function fcn_addJSTrap(){const t=document.querySelector(".comment-form");t&&t.appendChild(fcn_html`
diff --git a/js/head-inline.min.js b/js/head-inline.min.js
index 4fc19c9f..a765fa1a 100644
--- a/js/head-inline.min.js
+++ b/js/head-inline.min.js
@@ -1 +1 @@
-!function(){if("undefined"!=typeof localStorage){const e=localStorage.getItem("fcnLightmode"),t=document.documentElement;let a,o=localStorage.getItem("fcnSiteSettings");if(o&&(o=JSON.parse(o))&&null!==o&&"object"==typeof o){Object.entries(o).forEach((([e,s])=>{switch(e){case"minimal":t.classList.toggle("minimal",s);break;case"darken":a=s>=0?1+s**2:1-s**2,t.style.setProperty("--darken",`(${a} + var(--lightness-offset))`);break;case"saturation":case"font-lightness":case"font-saturation":a=s>=0?1+s**2:1-s**2,t.style.setProperty(`--${e}`,`(${a} + var(--${e}-offset))`);break;case"hue-rotate":a=Number.isInteger(o["hue-rotate"])?o["hue-rotate"]:0,t.style.setProperty("--hue-rotate",`(${a}deg + var(--hue-offset))`);break;default:t.classList.toggle(`no-${e}`,!s)}})),t.dataset.fontWeight=o["font-weight"]?o["font-weight"]:"default",t.dataset.theme=o["site-theme"]&&!t.dataset.forceChildTheme?o["site-theme"]:"default";let e=getComputedStyle(document.documentElement).getPropertyValue("--theme-color-base").trim().split(" ");const s=o.darken?o.darken:0,r=o.saturation?o.saturation:0,n=o["hue-rotate"]?o["hue-rotate"]:0,l=s>=0?1+s**2:1-s**2;o=r>=0?1+r**2:1-r**2,e=`hsl(${(parseInt(e[0])+n)%360}deg ${(parseInt(e[1])*o).toFixed(2)}% ${(parseInt(e[2])*l).toFixed(2)}%)`,document.querySelector("meta[name=theme-color]").setAttribute("content",e)}e&&(t.dataset.mode="true"==e?"light":"dark")}}(),document.documentElement.classList.remove("no-js");
\ No newline at end of file
+!function(){if("undefined"!=typeof localStorage){const e=localStorage.getItem("fcnLightmode"),t=document.documentElement;let a,o=localStorage.getItem("fcnSiteSettings");if(o&&(o=JSON.parse(o))&&null!==o&&"object"==typeof o){Object.entries(o).forEach((([e,s])=>{switch(e){case"minimal":t.classList.toggle("minimal",s);break;case"taxonomies":t.classList.toggle("no-taxonomies",!s);break;case"darken":a=s>=0?1+s**2:1-s**2,t.style.setProperty("--darken",`(${a} + var(--lightness-offset))`);break;case"saturation":case"font-lightness":case"font-saturation":a=s>=0?1+s**2:1-s**2,t.style.setProperty(`--${e}`,`(${a} + var(--${e}-offset))`);break;case"hue-rotate":a=Number.isInteger(o["hue-rotate"])?o["hue-rotate"]:0,t.style.setProperty("--hue-rotate",`(${a}deg + var(--hue-offset))`);break;default:t.classList.toggle(`no-${e}`,!s)}})),t.dataset.fontWeight=o["font-weight"]?o["font-weight"]:"default",t.dataset.theme=o["site-theme"]&&!t.dataset.forceChildTheme?o["site-theme"]:"default";let e=getComputedStyle(document.documentElement).getPropertyValue("--theme-color-base").trim().split(" ");const s=o.darken?o.darken:0,r=o.saturation?o.saturation:0,n=o["hue-rotate"]?o["hue-rotate"]:0,l=s>=0?1+s**2:1-s**2;o=r>=0?1+r**2:1-r**2,e=`hsl(${(parseInt(e[0])+n)%360}deg ${(parseInt(e[1])*o).toFixed(2)}% ${(parseInt(e[2])*l).toFixed(2)}%)`,document.querySelector("meta[name=theme-color]").setAttribute("content",e)}e&&(t.dataset.mode="true"==e?"light":"dark")}}(),document.documentElement.classList.remove("no-js");
\ No newline at end of file
diff --git a/partials/_modal-site-settings.php b/partials/_modal-site-settings.php
index 67785ced..31f064b6 100644
--- a/partials/_modal-site-settings.php
+++ b/partials/_modal-site-settings.php
@@ -45,6 +45,10 @@ defined( 'ABSPATH' ) OR exit;
+
+
+
+
diff --git a/src/js/application.js b/src/js/application.js
index f1029c4f..c4afe622 100644
--- a/src/js/application.js
+++ b/src/js/application.js
@@ -782,6 +782,7 @@ const /** @const {String[]} */ fcn_settingEvents = [
'background-textures',
'polygons',
'covers',
+ 'taxonomies',
'text-shadows',
'minimal',
'chapter-progress-bar'
@@ -1214,6 +1215,7 @@ function fcn_defaultSiteSettings() {
'background-textures': true,
'polygons': true,
'covers': true,
+ 'taxonomies': true,
'text-shadows': false,
'minimal': false,
'chapter-progress-bar': true,
diff --git a/src/js/head-inline.js b/src/js/head-inline.js
index a16cd18c..ea08facb 100644
--- a/src/js/head-inline.js
+++ b/src/js/head-inline.js
@@ -12,6 +12,9 @@
case 'minimal':
root.classList.toggle('minimal', value);
break;
+ case 'taxonomies':
+ root.classList.toggle('no-taxonomies', !value);
+ break;
case 'darken':
modifier = value >= 0 ? 1 + value ** 2 : 1 - value ** 2;
root.style.setProperty('--darken', `(${modifier} + var(--lightness-offset))`); // Beware darken and lightness!
diff --git a/src/scss/_card.scss b/src/scss/_card.scss
index e4e3fa50..709be779 100644
--- a/src/scss/_card.scss
+++ b/src/scss/_card.scss
@@ -1029,6 +1029,26 @@
}
}
+:root.no-taxonomies :is(.cell-tax, .story__taxonomies-space),
+:root.no-taxonomies .card__tag-list > .tag-pill {
+ display: none;
+ content-visibility: hidden;
+}
+
+:root.no-taxonomies .card._recommendation:not(._seamless) .cell-tax {
+ display: block;
+ content-visibility: visible;
+ margin-top: 0;
+ margin-bottom: var(--this-spacing);
+ height: 0;
+ overflow: hidden;
+
+ > :is(span, a, div) {
+ display: none;
+ content-visibility: hidden;
+ }
+}
+
:root:not(.no-covers) .card._vertical:not(._seamless) .card__info-toggle:not(.last-clicked) {
padding-top: calc(2 * var(--this-spacing));
padding-right: calc(2 * var(--this-spacing));
diff --git a/src/scss/_story.scss b/src/scss/_story.scss
index 214fa25e..4272672d 100644
--- a/src/scss/_story.scss
+++ b/src/scss/_story.scss
@@ -100,20 +100,6 @@ $header_breakpoint: 640px;
}
}
- &._no-tax {
- grid-template-rows: var(--page-inset-top, 0px) auto auto;
-
- .story__identity {
- grid-area: 2 / 2 / 4 / 3;
- margin-top: 0;
- }
-
- @include bp($header_breakpoint) {
- --this-img-height: #{get_clamp(145, 165, 400, $full-width)};
- --this-img-width: #{get_clamp(96, 110, 400, $full-width)};
- }
- }
-
&._no-thumbnail {
.story__taxonomies {
margin-bottom: 1.5rem;
@@ -545,6 +531,30 @@ $header_breakpoint: 640px;
}
}
+:is(.story__header._no-tax, :root.no-taxonomies .story__header) {
+ grid-template-rows: var(--page-inset-top, 0px) auto auto;
+
+ .story__identity {
+ grid-area: 2 / 2 / 4 / 3;
+ margin-top: 0;
+ }
+
+ .story__taxonomies {
+ display: none;
+ }
+
+ @include bp($header_breakpoint) {
+ --this-img-height: #{get_clamp(145, 165, 400, $full-width)};
+ --this-img-width: #{get_clamp(96, 110, 400, $full-width)};
+ }
+}
+
+:root.no-taxonomies {
+ .story__tags-and-warnings {
+ display: none;
+ }
+}
+
.story__chapters[data-view="grid"] {
margin-top: -24px; // Compensate groups