fictioneer/js/checkmarks.min.js
Tetrakern 6b0533415b Improve initialization of checkmarks/reminders
No need to put this in a condition. If the user is not logged-in, the event will not fire anyway.
2023-08-26 23:02:28 +02:00

1 line
3.3 KiB
JavaScript

var fcn_checkmarks,fcn_userCheckmarksTimeout;function fcn_initializeCheckmarks(a){const c=a.detail.data.checkmarks;!1!==c&&(fcn_checkmarks=c,fcn_updateCheckmarksView(),localStorage.removeItem("fcnBookshelfContent"),_$$("button.checkmark").forEach((a=>{a.addEventListener("click",(a=>{fcn_clickCheckmark(a.currentTarget)}))})))}function fcn_toggleCheckmark(a,c,e=null,t=null,s="toggle"){const n=fcn_getUserData();if(fcn_checkmarks&&n.checkmarks){if(localStorage.removeItem("fcnBookshelfContent"),"toggle"===s&&JSON.stringify(fcn_checkmarks.data[a])!==JSON.stringify(n.checkmarks.data[a]))return fcn_checkmarks=n.checkmarks,fcn_showNotification(__("Checkmarks re-synchronized.","fictioneer")),void fcn_updateCheckmarksView();if(fcn_checkmarks.data.hasOwnProperty(a)||(fcn_checkmarks.data[a]=[]),n.checkmarks.data.hasOwnProperty(a)||(n.checkmarks.data[a]=[]),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)),n.checkmarks.data[a]=fcn_checkmarks.data[a],n.lastLoaded=0,fcn_setUserData(n),fcn_updateCheckmarksView(),clearTimeout(fcn_userCheckmarksTimeout),fcn_userCheckmarksTimeout=setTimeout((()=>{fcn_updateCheckmarks(a,fcn_checkmarks.data[a])}),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_updateCheckmarks(a,c=null){c=c||fcn_getUserData().checkmarks.data[a],fcn_ajaxPost({action:"fictioneer_ajax_set_checkmark",fcn_fast_ajax:1,story_id:a,update:c.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")}))}function fcn_updateCheckmarksView(){const a=fcn_getUserData(),c=a.checkmarks;if(!c)return;const e=parseInt(fcn_inlineStorage.storyId);if(e){const t=c.data.hasOwnProperty(e)&&c.data[e].includes(e);if(t){let t=!1;_$$("button.checkmark").forEach((a=>{const s=parseInt(a.dataset.id);c.data[e].includes(s)||(c.data[e].push(s),t=!0)})),t&&(a.checkmarks=c,fcn_setUserData(a),fcn_updateCheckmarks(e,c.data[e]))}_$$$("ribbon-read")?.classList.toggle("hidden",!t)}_$$("button.checkmark").forEach((a=>{const e=parseInt(a.dataset.storyId);if(!c.data.hasOwnProperty(e))return;const t=c.data[e].includes(parseInt(a.dataset.id));a.classList.toggle("marked",t),a.ariaChecked=t})),_$$(".card").forEach((a=>{const e=parseInt(a.dataset.storyId),t=c.data.hasOwnProperty(e)&&(c.data[e].includes(parseInt(a.dataset.checkId))||c.data[e].includes(e));a.classList.toggle("has-checkmark",t)}))}document.addEventListener("fcnUserDataReady",(a=>{fcn_initializeCheckmarks(a)}));