fictioneer/js/checkmarks.min.js
2024-05-13 10:15:37 +02:00

1 line
3.4 KiB
JavaScript

var fcn_checkmarks,fcn_userCheckmarksTimeout;function fcn_initializeCheckmarks(a){const c=a.detail.data.checkmarks;!1!==c&&(Array.isArray(c.data)&&0===c.data.length&&(c.data={}),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,t=null,e=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(fictioneer_tl.notification.checkmarksResynchronized),void fcn_updateCheckmarksView();if(fcn_checkmarks.data[a]||(fcn_checkmarks.data[a]=[]),n.checkmarks.data[a]||(n.checkmarks.data[a]=[]),t&&"progress"===c&&!fcn_checkmarks.data[a].includes(t)&&fcn_checkmarks.data[a].push(t),t&&"chapter"===c)if(!fcn_checkmarks.data[a].includes(t)&&"unset"!==s||"set"===s)fcn_checkmarks.data[a].push(t),e&&(e.classList.add("marked"),e.setAttribute("aria-checked",!0));else{fcn_removeItemOnce(fcn_checkmarks.data[a],t),e&&(e.classList.remove("marked"),e.setAttribute("aria-checked",!1)),fcn_removeItemOnce(fcn_checkmarks.data[a],a);const c=_$('button[data-type="story"]');c&&(c.classList.remove("marked"),c.setAttribute("aria-checked",!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,t)=>t.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 t=parseInt(fcn_inlineStorage.storyId);if(t){const e=c.data[t]&&c.data[t].includes(t);if(e){let e=!1;_$$("button.checkmark").forEach((a=>{const s=parseInt(a.dataset.id);c.data[t].includes(s)||(c.data[t].push(s),e=!0)})),e&&(a.checkmarks=c,fcn_setUserData(a),fcn_updateCheckmarks(t,c.data[t]))}_$$$("ribbon-read")?.classList.toggle("hidden",!e)}_$$("button.checkmark").forEach((a=>{const t=parseInt(a.dataset.storyId);if(c.data[t]){const e=c.data[t].includes(parseInt(a.dataset.id));a.classList.toggle("marked",e),a.setAttribute("aria-checked",e)}})),_$$(".card").forEach((a=>{const t=parseInt(a.dataset.storyId),e=c.data[t]&&(c.data[t].includes(parseInt(a.dataset.checkId))||c.data[t].includes(t));a.classList.toggle("has-checkmark",1==e)}))}document.addEventListener("fcnUserDataReady",(a=>{fcn_initializeCheckmarks(a)}));