diff --git a/public/mod/forum/amd/build/forum_overview_toggle.min.js b/public/mod/forum/amd/build/forum_overview_toggle.min.js index 65d2e3e3400..91edd36fd5d 100644 --- a/public/mod/forum/amd/build/forum_overview_toggle.min.js +++ b/public/mod/forum/amd/build/forum_overview_toggle.min.js @@ -1,10 +1,10 @@ -define("mod_forum/forum_overview_toggle",["exports","core/notification","core/str","core/local/reactive/srlogger","mod_forum/repository"],(function(_exports,_notification,_str,_srlogger,_repository){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} +define("mod_forum/forum_overview_toggle",["exports","core/notification","core/str","core/toast","mod_forum/repository"],(function(_exports,_notification,_str,_toast,_repository){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} /** * Handle forum subscription/tracking toggling. * * @module mod_forum/forum_overview_toggle * @copyright 2025 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */function registerEventListeners(toggleElement){toggleElement.addEventListener("change",(()=>{"forum-subscription-toggle"===toggleElement.dataset.type&&async function(toggleElement){const forumId=toggleElement.dataset.forumid,forumName=toggleElement.dataset.forumname,newState=toggleElement.dataset.targetstate;if(!forumId||!newState)return;try{const newTargetState=!!(await _repository.default.setForumSubscriptionState(forumId,newState)).userstate.subscribed;await updateSwitchState(toggleElement,newTargetState,newTargetState?"subscribe":"unsubscribe");const feedbackMessage=await(0,_str.getString)(newTargetState?"subscribedtoforum":"unsubscribedfromforum","mod_forum",forumName);(new _srlogger.default).add({feedbackMessage:feedbackMessage})}catch(error){_notification.default.exception(error)}}(toggleElement),"forum-track-toggle"===toggleElement.dataset.type&&async function(toggleElement){const forumId=toggleElement.dataset.forumid,forumName=toggleElement.dataset.forumname,newState=toggleElement.dataset.targetstate;if(!forumId||!newState)return;try{const newTargetState=!!(await _repository.default.setForumTrackingState(forumId,newState)).userstate.tracked;await updateSwitchState(toggleElement,newTargetState,newTargetState?"trackingon":"trackingoff");const feedbackMessage=await(0,_str.getString)(newTargetState?"trackedforforum":"untrackedforforum","mod_forum",forumName);(new _srlogger.default).add({feedbackMessage:feedbackMessage})}catch(error){_notification.default.exception(error)}}(toggleElement)}))}async function updateSwitchState(toggleElement,newTargetState,stringKey){toggleElement.dataset.targetstate=newTargetState?0:1;const string=await(0,_str.getString)(stringKey,"mod_forum");toggleElement.closest("td").querySelector('label[for="'.concat(toggleElement.id,'"] span')).textContent=string}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_srlogger=_interopRequireDefault(_srlogger),_repository=_interopRequireDefault(_repository);_exports.init=toggleSelector=>{const toggleElement=document.querySelector(toggleSelector);toggleElement&®isterEventListeners(toggleElement)}})); + */function registerEventListeners(toggleElement){toggleElement.addEventListener("change",(()=>{"forum-subscription-toggle"===toggleElement.dataset.type&&async function(toggleElement){const forumId=toggleElement.dataset.forumid,forumName=toggleElement.dataset.forumname,newState=toggleElement.dataset.targetstate;if(!forumId||!newState)return;try{const newTargetState=!!(await _repository.default.setForumSubscriptionState(forumId,newState)).userstate.subscribed;await updateSwitchState(toggleElement,newTargetState,newTargetState?"subscribe":"unsubscribe");const feedbackMessage=await(0,_str.getString)(newTargetState?"subscribedtoforum":"unsubscribedfromforum","mod_forum",forumName);(0,_toast.add)(feedbackMessage,{visuallyHidden:!0})}catch(error){_notification.default.exception(error)}}(toggleElement),"forum-track-toggle"===toggleElement.dataset.type&&async function(toggleElement){const forumId=toggleElement.dataset.forumid,forumName=toggleElement.dataset.forumname,newState=toggleElement.dataset.targetstate;if(!forumId||!newState)return;try{const newTargetState=!!(await _repository.default.setForumTrackingState(forumId,newState)).userstate.tracked;await updateSwitchState(toggleElement,newTargetState,newTargetState?"trackingon":"trackingoff");const feedbackMessage=await(0,_str.getString)(newTargetState?"trackedforforum":"untrackedforforum","mod_forum",forumName);(0,_toast.add)(feedbackMessage,{visuallyHidden:!0})}catch(error){_notification.default.exception(error)}}(toggleElement)}))}async function updateSwitchState(toggleElement,newTargetState,stringKey){toggleElement.dataset.targetstate=newTargetState?0:1;const string=await(0,_str.getString)(stringKey,"mod_forum");toggleElement.closest("td").querySelector('label[for="'.concat(toggleElement.id,'"] span')).textContent=string}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_repository=_interopRequireDefault(_repository);_exports.init=toggleSelector=>{const toggleElement=document.querySelector(toggleSelector);toggleElement&®isterEventListeners(toggleElement)}})); //# sourceMappingURL=forum_overview_toggle.min.js.map \ No newline at end of file diff --git a/public/mod/forum/amd/build/forum_overview_toggle.min.js.map b/public/mod/forum/amd/build/forum_overview_toggle.min.js.map index 231e2aea7a4..986dcf7b44f 100644 --- a/public/mod/forum/amd/build/forum_overview_toggle.min.js.map +++ b/public/mod/forum/amd/build/forum_overview_toggle.min.js.map @@ -1 +1 @@ -{"version":3,"file":"forum_overview_toggle.min.js","sources":["../src/forum_overview_toggle.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Handle forum subscription/tracking toggling.\n *\n * @module mod_forum/forum_overview_toggle\n * @copyright 2025 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Notification from 'core/notification';\nimport {getString} from 'core/str';\nimport SRLogger from 'core/local/reactive/srlogger';\nimport Repository from 'mod_forum/repository';\n\n/**\n * Register event listeners for the subscription/tracking toggles in the overview.\n * @param {HTMLElement} toggleElement The toggle root element\n */\nfunction registerEventListeners(toggleElement) {\n toggleElement.addEventListener('change', () => {\n if (toggleElement.dataset.type === 'forum-subscription-toggle') {\n subscriptionToggleClickHandler(toggleElement);\n }\n if (toggleElement.dataset.type === 'forum-track-toggle') {\n trackToggleClickHanldler(toggleElement);\n }\n });\n}\n\n/**\n * Toggle subscription element click handler.\n *\n * @param {HTMLElement} toggleElement The toggle element that was clicked\n * @return {Promise}\n */\nasync function subscriptionToggleClickHandler(toggleElement) {\n const forumId = toggleElement.dataset.forumid;\n const forumName = toggleElement.dataset.forumname;\n const newState = toggleElement.dataset.targetstate;\n if (!forumId || !newState) {\n return;\n }\n try {\n const context = await Repository.setForumSubscriptionState(forumId, newState);\n const newTargetState = !!context.userstate.subscribed;\n\n await updateSwitchState(\n toggleElement,\n newTargetState,\n newTargetState ? 'subscribe' : 'unsubscribe',\n );\n\n const feedbackMessage = await getString(\n newTargetState ? 'subscribedtoforum' : 'unsubscribedfromforum',\n 'mod_forum',\n forumName,\n );\n new SRLogger().add({feedbackMessage});\n } catch (error) {\n Notification.exception(error);\n }\n}\n\n/**\n * Toggle track element click handler.\n *\n * @param {HTMLElement} toggleElement The toggle element that was clicked\n * @return {Promise}\n */\nasync function trackToggleClickHanldler(toggleElement) {\n const forumId = toggleElement.dataset.forumid;\n const forumName = toggleElement.dataset.forumname;\n const newState = toggleElement.dataset.targetstate;\n if (!forumId || !newState) {\n return;\n }\n try {\n const context = await Repository.setForumTrackingState(forumId, newState);\n const newTargetState = !!context.userstate.tracked;\n\n await updateSwitchState(\n toggleElement,\n newTargetState,\n newTargetState ? 'trackingon' : 'trackingoff',\n );\n\n const feedbackMessage = await getString(\n newTargetState ? 'trackedforforum' : 'untrackedforforum',\n 'mod_forum',\n forumName,\n );\n new SRLogger().add({feedbackMessage});\n } catch (error) {\n Notification.exception(error);\n }\n}\n\n/**\n * Update the switch state of the toggle element.\n *\n * @param {HTMLElement} toggleElement The toggle element to update\n * @param {Boolean} newTargetState The new target state to set (true for subscribed, false for unsubscribed)\n * @param {string} stringKey The string key to retrieve the label text\n * @return {Promise}\n */\nasync function updateSwitchState(toggleElement, newTargetState, stringKey) {\n toggleElement.dataset.targetstate = newTargetState ? 0 : 1;\n const string = await getString(stringKey, 'mod_forum');\n const label = toggleElement.closest('td').querySelector(`label[for=\"${toggleElement.id}\"] span`);\n label.textContent = string;\n}\n\n/**\n * Initialize the forum overview toggle functionality.\n *\n * @param {string} toggleSelector The CSS selector for the toggle element to initialize\n * @throws {Error} If no elements are found with the provided selector\n */\nexport const init = (toggleSelector) => {\n const toggleElement = document.querySelector(toggleSelector);\n if (!toggleElement) {\n // If the user cannot track/subscribe to any course forum, the toggle will not be present.\n return;\n }\n registerEventListeners(toggleElement);\n};\n"],"names":["registerEventListeners","toggleElement","addEventListener","dataset","type","forumId","forumid","forumName","forumname","newState","targetstate","newTargetState","Repository","setForumSubscriptionState","userstate","subscribed","updateSwitchState","feedbackMessage","SRLogger","add","error","exception","subscriptionToggleClickHandler","setForumTrackingState","tracked","trackToggleClickHanldler","stringKey","string","closest","querySelector","id","textContent","toggleSelector","document"],"mappings":";;;;;;;cAgCSA,uBAAuBC,eAC5BA,cAAcC,iBAAiB,UAAU,KACF,8BAA/BD,cAAcE,QAAQC,qBAeYH,qBACpCI,QAAUJ,cAAcE,QAAQG,QAChCC,UAAYN,cAAcE,QAAQK,UAClCC,SAAWR,cAAcE,QAAQO,gBAClCL,UAAYI,0BAKPE,wBADgBC,oBAAWC,0BAA0BR,QAASI,WACnCK,UAAUC,iBAErCC,kBACFf,cACAU,eACAA,eAAiB,YAAc,qBAG7BM,sBAAwB,kBAC1BN,eAAiB,oBAAsB,wBACvC,YACAJ,gBAEAW,mBAAWC,IAAI,CAACF,gBAAAA,kBACtB,MAAOG,6BACQC,UAAUD,QAtCnBE,CAA+BrB,eAEA,uBAA/BA,cAAcE,QAAQC,qBA8CMH,qBAC9BI,QAAUJ,cAAcE,QAAQG,QAChCC,UAAYN,cAAcE,QAAQK,UAClCC,SAAWR,cAAcE,QAAQO,gBAClCL,UAAYI,0BAKPE,wBADgBC,oBAAWW,sBAAsBlB,QAASI,WAC/BK,UAAUU,cAErCR,kBACFf,cACAU,eACAA,eAAiB,aAAe,qBAG9BM,sBAAwB,kBAC1BN,eAAiB,kBAAoB,oBACrC,YACAJ,gBAEAW,mBAAWC,IAAI,CAACF,gBAAAA,kBACtB,MAAOG,6BACQC,UAAUD,QArEnBK,CAAyBxB,iCAiFtBe,kBAAkBf,cAAeU,eAAgBe,WAC5DzB,cAAcE,QAAQO,YAAcC,eAAiB,EAAI,QACnDgB,aAAe,kBAAUD,UAAW,aAC5BzB,cAAc2B,QAAQ,MAAMC,mCAA4B5B,cAAc6B,eAC9EC,YAAcJ,kPASHK,uBACX/B,cAAgBgC,SAASJ,cAAcG,gBACxC/B,eAILD,uBAAuBC"} \ No newline at end of file +{"version":3,"file":"forum_overview_toggle.min.js","sources":["../src/forum_overview_toggle.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Handle forum subscription/tracking toggling.\n *\n * @module mod_forum/forum_overview_toggle\n * @copyright 2025 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Notification from 'core/notification';\nimport {getString} from 'core/str';\nimport {add as addToast} from 'core/toast';\nimport Repository from 'mod_forum/repository';\n\n/**\n * Register event listeners for the subscription/tracking toggles in the overview.\n * @param {HTMLElement} toggleElement The toggle root element\n */\nfunction registerEventListeners(toggleElement) {\n toggleElement.addEventListener('change', () => {\n if (toggleElement.dataset.type === 'forum-subscription-toggle') {\n subscriptionToggleClickHandler(toggleElement);\n }\n if (toggleElement.dataset.type === 'forum-track-toggle') {\n trackToggleClickHanldler(toggleElement);\n }\n });\n}\n\n/**\n * Toggle subscription element click handler.\n *\n * @param {HTMLElement} toggleElement The toggle element that was clicked\n * @return {Promise}\n */\nasync function subscriptionToggleClickHandler(toggleElement) {\n const forumId = toggleElement.dataset.forumid;\n const forumName = toggleElement.dataset.forumname;\n const newState = toggleElement.dataset.targetstate;\n if (!forumId || !newState) {\n return;\n }\n try {\n const context = await Repository.setForumSubscriptionState(forumId, newState);\n const newTargetState = !!context.userstate.subscribed;\n\n await updateSwitchState(\n toggleElement,\n newTargetState,\n newTargetState ? 'subscribe' : 'unsubscribe',\n );\n\n const feedbackMessage = await getString(\n newTargetState ? 'subscribedtoforum' : 'unsubscribedfromforum',\n 'mod_forum',\n forumName,\n );\n addToast(feedbackMessage, {visuallyHidden: true});\n } catch (error) {\n Notification.exception(error);\n }\n}\n\n/**\n * Toggle track element click handler.\n *\n * @param {HTMLElement} toggleElement The toggle element that was clicked\n * @return {Promise}\n */\nasync function trackToggleClickHanldler(toggleElement) {\n const forumId = toggleElement.dataset.forumid;\n const forumName = toggleElement.dataset.forumname;\n const newState = toggleElement.dataset.targetstate;\n if (!forumId || !newState) {\n return;\n }\n try {\n const context = await Repository.setForumTrackingState(forumId, newState);\n const newTargetState = !!context.userstate.tracked;\n\n await updateSwitchState(\n toggleElement,\n newTargetState,\n newTargetState ? 'trackingon' : 'trackingoff',\n );\n\n const feedbackMessage = await getString(\n newTargetState ? 'trackedforforum' : 'untrackedforforum',\n 'mod_forum',\n forumName,\n );\n addToast(feedbackMessage, {visuallyHidden: true});\n } catch (error) {\n Notification.exception(error);\n }\n}\n\n/**\n * Update the switch state of the toggle element.\n *\n * @param {HTMLElement} toggleElement The toggle element to update\n * @param {Boolean} newTargetState The new target state to set (true for subscribed, false for unsubscribed)\n * @param {string} stringKey The string key to retrieve the label text\n * @return {Promise}\n */\nasync function updateSwitchState(toggleElement, newTargetState, stringKey) {\n toggleElement.dataset.targetstate = newTargetState ? 0 : 1;\n const string = await getString(stringKey, 'mod_forum');\n const label = toggleElement.closest('td').querySelector(`label[for=\"${toggleElement.id}\"] span`);\n label.textContent = string;\n}\n\n/**\n * Initialize the forum overview toggle functionality.\n *\n * @param {string} toggleSelector The CSS selector for the toggle element to initialize\n * @throws {Error} If no elements are found with the provided selector\n */\nexport const init = (toggleSelector) => {\n const toggleElement = document.querySelector(toggleSelector);\n if (!toggleElement) {\n // If the user cannot track/subscribe to any course forum, the toggle will not be present.\n return;\n }\n registerEventListeners(toggleElement);\n};\n"],"names":["registerEventListeners","toggleElement","addEventListener","dataset","type","forumId","forumid","forumName","forumname","newState","targetstate","newTargetState","Repository","setForumSubscriptionState","userstate","subscribed","updateSwitchState","feedbackMessage","visuallyHidden","error","exception","subscriptionToggleClickHandler","setForumTrackingState","tracked","trackToggleClickHanldler","stringKey","string","closest","querySelector","id","textContent","toggleSelector","document"],"mappings":";;;;;;;cAgCSA,uBAAuBC,eAC5BA,cAAcC,iBAAiB,UAAU,KACF,8BAA/BD,cAAcE,QAAQC,qBAeYH,qBACpCI,QAAUJ,cAAcE,QAAQG,QAChCC,UAAYN,cAAcE,QAAQK,UAClCC,SAAWR,cAAcE,QAAQO,gBAClCL,UAAYI,0BAKPE,wBADgBC,oBAAWC,0BAA0BR,QAASI,WACnCK,UAAUC,iBAErCC,kBACFf,cACAU,eACAA,eAAiB,YAAc,qBAG7BM,sBAAwB,kBAC1BN,eAAiB,oBAAsB,wBACvC,YACAJ,0BAEKU,gBAAiB,CAACC,gBAAgB,IAC7C,MAAOC,6BACQC,UAAUD,QAtCnBE,CAA+BpB,eAEA,uBAA/BA,cAAcE,QAAQC,qBA8CMH,qBAC9BI,QAAUJ,cAAcE,QAAQG,QAChCC,UAAYN,cAAcE,QAAQK,UAClCC,SAAWR,cAAcE,QAAQO,gBAClCL,UAAYI,0BAKPE,wBADgBC,oBAAWU,sBAAsBjB,QAASI,WAC/BK,UAAUS,cAErCP,kBACFf,cACAU,eACAA,eAAiB,aAAe,qBAG9BM,sBAAwB,kBAC1BN,eAAiB,kBAAoB,oBACrC,YACAJ,0BAEKU,gBAAiB,CAACC,gBAAgB,IAC7C,MAAOC,6BACQC,UAAUD,QArEnBK,CAAyBvB,iCAiFtBe,kBAAkBf,cAAeU,eAAgBc,WAC5DxB,cAAcE,QAAQO,YAAcC,eAAiB,EAAI,QACnDe,aAAe,kBAAUD,UAAW,aAC5BxB,cAAc0B,QAAQ,MAAMC,mCAA4B3B,cAAc4B,eAC9EC,YAAcJ,sMASHK,uBACX9B,cAAgB+B,SAASJ,cAAcG,gBACxC9B,eAILD,uBAAuBC"} \ No newline at end of file diff --git a/public/mod/forum/amd/src/forum_overview_toggle.js b/public/mod/forum/amd/src/forum_overview_toggle.js index a91f24f91d8..89631cdd962 100644 --- a/public/mod/forum/amd/src/forum_overview_toggle.js +++ b/public/mod/forum/amd/src/forum_overview_toggle.js @@ -23,7 +23,7 @@ import Notification from 'core/notification'; import {getString} from 'core/str'; -import SRLogger from 'core/local/reactive/srlogger'; +import {add as addToast} from 'core/toast'; import Repository from 'mod_forum/repository'; /** @@ -69,7 +69,7 @@ async function subscriptionToggleClickHandler(toggleElement) { 'mod_forum', forumName, ); - new SRLogger().add({feedbackMessage}); + addToast(feedbackMessage, {visuallyHidden: true}); } catch (error) { Notification.exception(error); } @@ -103,7 +103,7 @@ async function trackToggleClickHanldler(toggleElement) { 'mod_forum', forumName, ); - new SRLogger().add({feedbackMessage}); + addToast(feedbackMessage, {visuallyHidden: true}); } catch (error) { Notification.exception(error); }