fictioneer/js/reminders.min.js

1 line
2.3 KiB
JavaScript
Raw Normal View History

function fcn_toggleReminder(e,t=null){const r=window.FictioneerApp.Controllers.fictioneerReminders;if(!r)return void fcn_showNotification("Error: Reminders Controller not connected.",3,"warning");const i=FcnUtils.userData();("object"!=typeof i.reminders.data||null===i.reminders.data||Array.isArray(i.reminders.data))&&(i.reminders.data={}),(t=t??!i.reminders.data[e])?i.reminders.data[e]={story_id:parseInt(e),timestamp:Date.now()}:delete i.reminders.data[e],i.lastLoaded=0,FcnUtils.setUserData(i),r.refreshView(),clearTimeout(r.timeout),r.timeout=setTimeout((()=>{FcnUtils.remoteAction("fictioneer_ajax_toggle_reminder",{payload:{set:t,story_id:e}})}),FcnGlobals.debounceRate)}application.register("fictioneer-reminders",class extends Stimulus.Controller{static get targets(){return["toggleButton"]}remindersLoaded=!1;timeout=0;initialize(){fcn()?.userReady?this.#e=!0:document.addEventListener("fcnUserDataReady",(()=>{this.refreshView(),this.#e=!0,this.#t()}))}connect(){window.FictioneerApp.Controllers.fictioneerReminders=this,this.#e&&(this.refreshView(),this.#t())}data(){return this.remindersCachedData=FcnUtils.userData().reminders?.data,Array.isArray(this.remindersCachedData)&&0===this.remindersCachedData.length&&(this.remindersCachedData={}),this.remindersCachedData}isRemembered(e){return!(!FcnUtils.loggedIn()||!this.data()?.[e])}toggleReminder({params:{id:e}}){this.#r()&&(fcn_toggleReminder(e,!this.isRemembered(e)),this.refreshView())}clear(){const e=FcnUtils.userData();e.reminders={data:{}},fcn().setUserData(e),this.refreshView()}refreshView(){this.toggleButtonTargets.forEach((e=>{const t=e.dataset.storyId;e.classList.toggle("_remembered",this.isRemembered(t))}))}#e=!1;#i=!1;#r(){const e=FcnUtils.loggedIn();return e||(this.#s(),this.#i=!0),e}#a(){return this.#r()&&JSON.stringify(this.remindersCachedData??0)!==JSON.stringify(this.data())}#n(){this.refreshInterval||(this.refreshInterval=setInterval((()=>{!this.#i&&this.#a()&&this.refreshView()}),3e4+1e3*Math.random()))}#t(){this.#n(),this.visibilityStateCheck=()=>{this.#r()&&("visible"===document.visibilityState?(this.#i=!1,this.refreshView(),this.#n()):(this.#i=!0,clearInterval(this.refreshInterval),this.refreshInterval=null))},document.addEventListener("visibilitychange",this.visibilityStateCheck)}#s(){clearInterval(this.refreshInterval),document.removeEventListener("visibilitychange",this.visibilityStateCheck)}});