2023-08-21 15:45:54 +02:00
|
|
|
const fcn_jumpToBookmarkButtons=_$$(".button--bookmark"),fcn_mobileBookmarkJump=_$$$("mobile-menu-bookmark-jump"),fcn_mobileBookmarkList=_$(".mobile-menu__bookmark-list"),fcn_mobileBookmarkTemplate=_$("#mobile-bookmark-template"),fcn_bookmarksSmallCardBlock=_$(".bookmarks-block"),fcn_bookmarksSmallCardTemplate=_$(".bookmark-small-card-template");var fcn_userBookmarksTimeout,fcn_bookmarks=fcn_getBookmarks();function fcn_saveBookmarksForUser(o){if(!fcn_isLoggedIn)return;fcn_bookmarks.lastLoaded=0,localStorage.setItem("fcnChapterBookmarks",JSON.stringify(fcn_bookmarks));const e={action:"fictioneer_ajax_save_bookmarks",fcn_fast_ajax:1,bookmarks:o};clearTimeout(fcn_userBookmarksTimeout),fcn_userBookmarksTimeout=setTimeout((()=>{fcn_ajaxPost(e).then((o=>{o.data.error&&fcn_showNotification(o.data.error,3,"warning")})).catch((o=>{o.status&&o.statusText&&fcn_showNotification(`${o.status}: ${o.statusText}`,3,"warning")}))}),fictioneer_ajax.post_debounce_rate)}function fcn_getBookmarksForUser(){fcn_isLoggedIn&&(fcn_ajaxLimitThreshold<fcn_bookmarks.lastLoaded?Object.keys(fcn_bookmarks.data).length>0&&fcn_updateBookmarkCards():fcn_ajaxGet({action:"fictioneer_ajax_get_bookmarks",fcn_fast_ajax:1}).then((o=>{if(o.success){let e=o.data.bookmarks;e=fcn_isValidJSONString(e)?e:"{}",e=JSON.parse(e),Object.keys(e).length>2&&(e={}),"object"==typeof e&&e.data&&(e.lastLoaded=Date.now(),fcn_setBookmarks(e,!0),fcn_showChapterBookmark())}fcn_updateBookmarkCards()})))}function fcn_getBookmarks(){let o=localStorage.getItem("fcnChapterBookmarks");o=o&&fcn_isValidJSONString(o)?JSON.parse(o):{lastLoaded:0,data:{}},fcn_setBookmarks(o,!0),fcn_isLoggedIn||fcn_updateBookmarkCards();const e=_$(".profile-bookmarks-stats");return e&&(e.innerHTML=e.innerHTML.replace("%s",Object.keys(o.data).length)),Object.keys(o.data).length>0&&_$$(".icon-menu-bookmarks").forEach((o=>{o.classList.remove("hidden")})),o}function fcn_setBookmarks(o,e=!1){"object"==typeof o&&(fcn_bookmarks=o,localStorage.setItem("fcnChapterBookmarks",JSON.stringify(o)),e||(window.clearTimeout(fcn_userBookmarksTimeout),fcn_saveBookmarksForUser(JSON.stringify(o))))}function fcn_toggleBookmark(o,e="none"){fcn_bookmarks=fcn_getBookmarks();const a=_$(".chapter__article"),r=_$(".current-bookmark");if(!a)return;const t=fcn_bookmarks.data[a.id];if(t&&t["paragraph-id"]==o&&r)"none"!=e&&e!=t.color?(_$(".current-bookmark").dataset.bookmarkColor=e,t.color=e):fcn_removeBookmark(a.id);else{Object.keys(fcn_bookmarks.data).length>=50&&fcn_removeBookmark(Object.keys(fcn_bookmarks.data)[0]);const t=_$(`[data-paragraph-id="${o}"]`),k=_$$$("chapter-bookmark-data").dataset;fcn_bookmarks.data[a.id]={"paragraph-id":o,progress:100*(fcn_offset(t).top-fcn_offset(t.parentElement).top)/t.parentElement.clientHeight,date:new Date,color:e,chapter:k.title.trim(),link:k.link,thumb:k.thumb,image:k.image,story:k.storyTitle.trim(),content:t.querySelector("span").innerHTML.substring(0,128)+"…"},fcn_jumpToBookmarkButtons.forEach((o=>{o.classList.remove("hidden")})),fcn_mobileBookmarkJump?.removeAttribute("hidden"),r?.classList.remove("current-bookmark"),t.classList.add("current-bookmark"),t.setAttribute("data-bookmark-color",e)}fcn_setMobileMenuBookmarks(),fcn_setBookmarks(fcn_bookmarks)}function fcn_showChapterBookmark(){_$(".current-bookmark")?.classList.remove("current-bookmark");const o=_$(".chapter__article");if(!o||!fcn_bookmarks.data[o.id])return;const e=fcn_bookmarks.data[o.id]["paragraph-id"],a=_$(`[data-paragraph-id="${e}"]`),r=fcn_bookmarks.data[o.id].color??"none";e&&a&&(fcn_jumpToBookmarkButtons.forEach((o=>{o.classList.remove("hidden")})),fcn_mobileBookmarkJump?.removeAttribute("hidden"),a.classList.add("current-bookmark"),a.setAttribute("data-bookmark-color",r))}function fcn_setMobileMenuBookmarks(){if(fcn_mobileBookmarkList.innerHTML="",Object.keys(fcn_bookmarks.data).length>0)Object.entries(fcn_bookmarks.data).forEach((o=>{const e=fcn_mobileBookmarkTemplate.content.cloneNode(!0);e.querySelector(".mobile-menu__bookmark").classList.add(`bookmark-${o[0]}`),e.querySelector(".mobile-menu__bookmark").dataset.color=o[1].c
|