fictioneer/js/checkmarks.min.js
2023-08-21 03:08:01 +02:00

1 line
3.9 KiB
JavaScript

var fcn_checkmarks,fcn_userCheckmarksTimeout;function fcn_initializeCheckmarks(){fcn_checkmarks=fcn_getCheckmarks(),fcn_fetchCheckmarksFromDatabase(),_$$("button.checkmark").forEach((a=>{a.addEventListener("click",(a=>{fcn_clickCheckmark(a.currentTarget)}))}))}function fcn_getCheckmarks(){let a=localStorage.getItem("fcnCheckmarks");return a=a&&fcn_isValidJSONString(a)?JSON.parse(a):{lastLoaded:0,data:{},timestamp:Date.now()},a.data&&!a["last-loaded"]||(a={lastLoaded:0,data:{}}),a}function fcn_toggleCheckmark(a,c,e=null,t=null,s="toggle"){if(!fcn_checkmarks)return;const n=fcn_getCheckmarks();if(localStorage.removeItem("fcnBookshelfContent"),fcn_checkmarks.data.hasOwnProperty(a)||(fcn_checkmarks.data[a]=[]),n.data.hasOwnProperty(a)||(n.data[a]=[]),"toggle"===s&&JSON.stringify(n.data[a])!==JSON.stringify(fcn_checkmarks.data[a]))return fcn_checkmarks=n,fcn_showNotification(__("Checkmarks re-synchronized.","fictioneer")),void fcn_updateCheckmarksView();if(fcn_checkmarks=n,e&&"progress"===c&&!fcn_checkmarks.data[a].includes(e)&&fcn_checkmarks.data[a].push(e),e&&"chapter"===c)if(!fcn_checkmarks.data[a].includes(e)&&"unset"!==s||"set"===s)fcn_checkmarks.data[a].push(e),t&&(t.classList.add("marked"),t.ariaChecked=!0);else{fcn_removeItemOnce(fcn_checkmarks.data[a],e),t&&(t.classList.remove("marked"),t.ariaChecked=!1),fcn_removeItemOnce(fcn_checkmarks.data[a],a);const c=_$("button[data-type=story]");c&&(c.classList.remove("marked"),c.ariaChecked=!1)}if("story"===c){const c=(fcn_checkmarks.data[a].includes(a)||"unset"===s)&&"set"!==s;fcn_checkmarks.data[a]=[],c||(_$$("button.checkmark").forEach((c=>{fcn_checkmarks.data[a].push(parseInt(c.dataset.id))})),fcn_checkmarks.data[a].includes(a)||fcn_checkmarks.data[a].push(a))}fcn_checkmarks.data[a]=fcn_checkmarks.data[a].filter(((a,c,e)=>e.indexOf(a)==c)),fcn_checkmarks.lastLoaded=0,fcn_updateCheckmarksView(),clearTimeout(fcn_userCheckmarksTimeout),fcn_userCheckmarksTimeout=setTimeout((()=>{fcn_ajaxPost({action:"fictioneer_ajax_set_checkmark",fcn_fast_ajax:1,story_id:a,update:fcn_checkmarks.data[a].join(" ")}).then((a=>{a.data.error&&fcn_showNotification(a.data.error,3,"warning")})).catch((a=>{a.status&&a.statusText&&fcn_showNotification(`${a.status}: ${a.statusText}`,5,"warning")}))}),fictioneer_ajax.post_debounce_rate)}function fcn_clickCheckmark(a){fcn_toggleCheckmark(parseInt(a.dataset.storyId),a.dataset.type,parseInt(a.dataset.id),a)}function fcn_updateCheckmarksView(){if(!fcn_checkmarks)return;const a=parseInt(fcn_inlineStorage.storyId),c=fcn_checkmarks.data.hasOwnProperty(a),e=c&&fcn_checkmarks.data[a].includes(a);c||(fcn_checkmarks.data[a]=[]),e&&_$$("button.checkmark").forEach((c=>{const e=parseInt(c.dataset.id);fcn_checkmarks.data[a].includes(e)||fcn_checkmarks.data[a].push(e)})),_$$$("ribbon-read")?.classList.toggle("hidden",!e),_$$("button.checkmark")?.forEach((a=>{const c=parseInt(a.dataset.storyId);if(!fcn_checkmarks.data.hasOwnProperty(c))return;const e=fcn_checkmarks.data[c].includes(parseInt(a.dataset.id));a.classList.toggle("marked",e),a.ariaChecked=e})),_$$(".card")?.forEach((a=>{const c=parseInt(a.dataset.storyId),e=fcn_checkmarks.data.hasOwnProperty(c)&&(fcn_checkmarks.data[c].includes(parseInt(a.dataset.checkId))||fcn_checkmarks.data[c].includes(c));a.classList.toggle("has-checkmark",e)})),localStorage.setItem("fcnCheckmarks",JSON.stringify(fcn_checkmarks))}function fcn_fetchCheckmarksFromDatabase(){fcn_isLoggedIn&&(fcn_ajaxLimitThreshold<fcn_checkmarks.lastLoaded?fcn_updateCheckmarksView():fcn_ajaxGet({action:"fictioneer_ajax_get_checkmarks",fcn_fast_ajax:1}).then((a=>{if(a.success){let c=a.data.checkmarks;c=fcn_isValidJSONString(c)?c:"{}",c=JSON.parse(c),(fcn_checkmarks="object"==typeof c&&c.data&&Object.keys(c.data).length>0?c:{data:{},timestamp:Date.now()}).lastLoaded=Date.now()}})).catch((()=>{localStorage.removeItem("fcnCheckmarks"),fcn_checkmarks=!1})).then((()=>{fcn_updateCheckmarksView(),localStorage.removeItem("fcnBookshelfContent")})))}fcn_isLoggedIn&&fcn_initializeCheckmarks();