1 line
3.9 KiB
JavaScript
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,e,c=null,t=null,s="toggle"){if(!fcn_checkmarks)return;let r=fcn_getCheckmarks();if(localStorage.removeItem("fcnBookshelfContent"),fcn_checkmarks.data.hasOwnProperty(a)||(fcn_checkmarks.data[a]=[]),r.data.hasOwnProperty(a)||(r.data[a]=[]),"toggle"===s&&JSON.stringify(r.data[a])!==JSON.stringify(fcn_checkmarks.data[a]))return fcn_checkmarks=r,fcn_showNotification(__("Checkmarks re-synchronized.","fictioneer")),void fcn_updateCheckmarksView();if(fcn_checkmarks=r,c&&"progress"===e&&!fcn_checkmarks.data[a].includes(c)&&fcn_checkmarks.data[a].push(c),c&&"chapter"===e)if(!fcn_checkmarks.data[a].includes(c)&&"unset"!==s||"set"===s)fcn_checkmarks.data[a].push(c),t&&(t.classList.add("marked"),t.ariaChecked=!0);else{fcn_removeItemOnce(fcn_checkmarks.data[a],c),t&&(t.classList.remove("marked"),t.ariaChecked=!1),fcn_removeItemOnce(fcn_checkmarks.data[a],a);let e=_$("button[data-type=story]");e&&(e.classList.remove("marked"),e.ariaChecked=!1)}if("story"===e){let e=(fcn_checkmarks.data[a].includes(a)||"unset"===s)&&"set"!==s;fcn_checkmarks.data[a]=[],e||(_$$("button.checkmark").forEach((e=>{fcn_checkmarks.data[a].push(parseInt(e.dataset.id))})),fcn_checkmarks.data[a].includes(a)||fcn_checkmarks.data[a].push(a))}fcn_checkmarks.data[a]=fcn_checkmarks.data[a].filter(((a,e,c)=>c.indexOf(a)==e)),fcn_checkmarks.lastLoaded=0,fcn_updateCheckmarksView();let n={action:"fictioneer_ajax_set_checkmark",story_id:a,update:fcn_checkmarks.data[a].join(" ")};clearTimeout(fcn_userCheckmarksTimeout),fcn_userCheckmarksTimeout=setTimeout((()=>{fcn_ajaxPost(n).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;let a=parseInt(fcn_inlineStorage.storyId),e=fcn_checkmarks.data.hasOwnProperty(a),c=e&&fcn_checkmarks.data[a].includes(a);e||(fcn_checkmarks.data[a]=[]),c&&_$$("button.checkmark").forEach((e=>{let c=parseInt(e.dataset.id);fcn_checkmarks.data[a].includes(c)||fcn_checkmarks.data[a].push(c)})),_$$$("ribbon-read")?.classList.toggle("hidden",!c),_$$("button.checkmark")?.forEach((a=>{let e=parseInt(a.dataset.storyId);if(!fcn_checkmarks.data.hasOwnProperty(e))return;let c=fcn_checkmarks.data[e].includes(parseInt(a.dataset.id));a.classList.toggle("marked",c),a.ariaChecked=c})),_$$(".card")?.forEach((a=>{let e=parseInt(a.dataset.storyId),c=fcn_checkmarks.data.hasOwnProperty(e)&&(fcn_checkmarks.data[e].includes(parseInt(a.dataset.checkId))||fcn_checkmarks.data[e].includes(e));a.classList.toggle("has-checkmark",c)})),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"}).then((a=>{if(a.success){let e=a.data.checkmarks;e=fcn_isValidJSONString(e)?e:"{}",e=JSON.parse(e),(fcn_checkmarks="object"==typeof e&&e.data&&Object.keys(e.data).length>0?e:{data:{},timestamp:Date.now()}).lastLoaded=Date.now()}})).catch((()=>{localStorage.removeItem("fcnCheckmarks"),fcn_checkmarks=!1})).then((()=>{fcn_updateCheckmarksView(),localStorage.removeItem("fcnBookshelfContent")})))}fcn_isLoggedIn&&fcn_initializeCheckmarks(); |