{"version":3,"file":"feedbackcollection.min.js","sources":["https:\/\/dl-physmech.spbstu.ru\/theme\/remui\/amd\/src\/feedbackcollection.js"],"sourcesContent":["\/* eslint-disable no-console *\/\n\/* eslint-disable jsdoc\/require-jsdoc*\/\n\/* eslint-disable jsdoc\/require-jsdoc*\/\n\/* eslint-disable jsdoc\/require-jsdoc*\/\n\/* eslint-disable no-loop-func*\/\n\/* eslint-disable no-unused-vars *\/\n\n\/\/ 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 * TODO describe module feedbackcollection\n *\n * @module theme_remui\/feedbackcollection\n * @copyright 2024 YOUR NAME \n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n *\/\n\n\ndefine(['jquery', 'core\/ajax', 'core\/notification', 'core\/templates'], function($, Ajax, Notification, Templates) {\n\n let SELECTORS = {\n 'FEEDBACKCOLLECTION': 'body',\n 'FEEDBACKCOLLECTION_MODAL': '.feedbackcollection-modal',\n 'FEEDBACKCOLLECTION_FORM': '#feedbackcollection-form',\n };\n\n let custompagepublished = false;\n\n \/\/ Check if either the last or current format is \"remuiformat\"\n let edwisercourseformat = \"remuiformat\"; \/\/ The specific course format to check\n let isRemuiformat = (format) => format === edwisercourseformat;\n function submit_feedback(questionname, submiteddata) {\n return Ajax.call([{\n methodname: 'theme_remui_do_feedbackcollection_action',\n args: {\n action: \"submit_feedback\",\n config: JSON.stringify({\n \"question\": questionname,\n \"feedback\": submiteddata\n })\n }\n }])[0];\n }\n\n function get_feedback_context(questionname) {\n return Ajax.call([{\n methodname: 'theme_remui_do_feedbackcollection_action',\n args: {\n action: \"get_feedback_context\",\n config: JSON.stringify({\n questionname\n })\n }\n }])[0];\n }\n\n function show_feedbackform_modal() {\n $(SELECTORS.FEEDBACKCOLLECTION_MODAL).modal('show');\n }\n\n function close_modal() {\n $(SELECTORS.FEEDBACKCOLLECTION_MODAL).modal('hide');\n\n let feedbackTime = Date.now() + (24 * 60 * 60 * 1000); \/\/ Add 24 hours to current time\n if($(\"body\").attr(\"id\") == \"page-site-index\") {\n localStorage.setItem('frontpage_feedback_timestamp', feedbackTime);\n }\n if($('body').attr('id') == \"page-admin-setting-themesettingremui\") {\n localStorage.setItem(\"remui_settings_feedback_visited\", \"false\");\n }\n if ($('body').hasClass(\"pagelayout-course\")) {\n localStorage.setItem('courseformatchangetimestamps', feedbackTime);\n }\n }\n\n async function render_feedbackform(questionname,callback = false) {\n let templatename = \"theme_remui\/feedbackcollection_form\";\n\n const response = await get_feedback_context(questionname);\n const data = JSON.parse(response);\n\n if(data) {\n data.questionname = questionname;\n return Templates.render(templatename, {\n config: M.cfg,\n ...data\n }).done(function(html, js) {\n $(SELECTORS.FEEDBACKCOLLECTION_MODAL).remove();\n Templates.appendNodeContents(\"body\", html, js);\n }).then(() => {\n show_feedbackform_modal();\n if (typeof callback === \"function\") {\n callback();\n }\n });\n }\n\n return false;\n }\n\n async function submit_feedback_handler(e) {\n e.preventDefault();\n\n \/\/ Get form data\n const formData = new FormData(e.target);\n const submiteddata = { };\n let questionname = \"\";\n\n formData.forEach((value, key) => {\n if (key === \"questionname\") {\n questionname = value;\n } else {\n submiteddata[key] = value;\n }\n });\n\n submit_feedback(questionname, submiteddata);\n\n close_modal();\n }\n\n function courseformatfeedbackhandler() {\n\n\n if($('body').attr('id') == \"page-course-edit\") {\n \/\/ Get the last stored course format from localStorage\n let lastactivecourseformat = localStorage.getItem('lastactivecourseformat');\n let currentactivecourseformat = localStorage.getItem('currentactivecourseformat');\n let currentselectedcourseformat = $(\"#fitem_id_format select#id_format option:selected\").val();\n\n if(currentactivecourseformat) {\n localStorage.setItem('lastactivecourseformat', currentactivecourseformat);\n lastactivecourseformat = currentactivecourseformat;\n }\n\n if (!lastactivecourseformat) {\n localStorage.setItem('lastactivecourseformat', currentselectedcourseformat);\n } else {\n localStorage.setItem('currentactivecourseformat', currentselectedcourseformat);\n }\n localStorage.setItem('courseformatchangetimestamps', Date.now());\n\n }\n }\n function remui_settings_feedback_handler(){\n if($('body').attr('id') != \"page-admin-setting-themesettingremui\") {\n return;\n }\n let remuisettingvisited = localStorage.getItem(\"remui_settings_feedback_visited\");\n\n if(remuisettingvisited == \"true\") {\n render_feedbackform(\"remuisettingvisit_question\");\n }\n }\n\n function homepagefeedbackhandler() {\n let frontpageFeedbackTimestamp = localStorage.getItem('frontpage_feedback_timestamp');\n let currentTime = Date.now();\n\n if($(\"body\").attr(\"id\") != \"page-site-index\") {\n return;\n }\n\n if(frontpageFeedbackTimestamp && currentTime >= parseInt(frontpageFeedbackTimestamp)) {\n\n setTimeout(() => {\n render_feedbackform(\"homepage_question\");\n\n }, 2000);\n }\n }\n\n return {\n init: function(questionname = false) {\n\n if(questionname) {\n render_feedbackform(questionname);\n }\n\n $(document).on(\"click\", SELECTORS.FEEDBACKCOLLECTION + \" .skip-btn\", close_modal);\n\n $(document).on(\"submit\", SELECTORS.FEEDBACKCOLLECTION_FORM, submit_feedback_handler);\n $(document).on(\"submit\", \"#page-admin-setting-themesettingremui #adminsettings\", function(e) {\n localStorage.setItem(\"remui_settings_feedback_visited\", \"true\");\n });\n\n $(document).on(\"click\", \"#page-site-index .advanceblockblocks .blockurl\", function(e) {\n let feedbackTime = Date.now(); \/\/ Add 24 hours to current time\n localStorage.setItem('frontpage_feedback_timestamp', feedbackTime);\n });\n\n $(document).on('click', '.page_sub_header .btn-publish', function() {custompagepublished = true;});\n $(document).on('click', '#page-epb-page-draft .btn[data-action=\"save\"]', function () {\n if (custompagepublished) {\n render_feedbackform(\"custompage_question\");\n } else {\n custompagepublished = false;\n }\n });\n\n let coursefeedbackrenderedcount = 0;\n $(document).on(\"scroll\", function() {\n if(coursefeedbackrenderedcount == 0) {\n if ($('body').hasClass(\"pagelayout-course\")) {\n \/\/ Calculate scroll position and page height\n let scrollPosition = window.scrollY;\n let windowHeight = window.innerHeight;\n let documentHeight = $(document).height();\n let scrollTriggerPoint = (documentHeight - windowHeight) * 0.4; \/\/ Trigger at 40% scroll\n \/\/ Check if user has scrolled past the trigger point\n if (scrollPosition > scrollTriggerPoint) {\n \/\/ If either format is \"remuiformat\", perform the action\n\n if(Date.now() >= parseInt(localStorage.getItem('courseformatchangetimestamps'))) {\n if (isRemuiformat(localStorage.getItem('lastactivecourseformat')) || isRemuiformat(localStorage.getItem('currentactivecourseformat'))) {\n render_feedbackform(\"remuiformat_question\");\n coursefeedbackrenderedcount++;\n }\n }\n }\n }\n }\n });\n \/\/ $(document).on('click', '#page-site-index a[href]', function(event) {\n \/\/ event.preventDefault(); \/\/ Stop the default redirect action\n\n \/\/ const targetUrl = $(this).attr('href'); \/\/ Get the link URL\n\n \/\/ if (targetUrl === '#' || $(this).closest('#add-block-float-menu').length || $(this).hasClass('block-add')) {\n \/\/ \/\/ Skip this link by simply returning from the function\n \/\/ return;\n \/\/ }\n\n \/\/ \/\/ Perform your custom action here\n \/\/ render_feedbackform(\"homepage_question\",function(){\n \/\/ $(document).on(\"click\", SELECTORS.FEEDBACKCOLLECTION + \" .skip-btn\", function(){\n \/\/ window.location.href = targetUrl;\n \/\/ });\n\n \/\/ $(document).on(\"submit\", SELECTORS.FEEDBACKCOLLECTION_FORM, function(){\n \/\/ window.location.href = targetUrl;\n \/\/ });\n \/\/ });\n \/\/ });\n\n homepagefeedbackhandler();\n courseformatfeedbackhandler();\n remui_settings_feedback_handler();\n },\n render_feedbackform,\n submit_feedback_handler,\n close_modal,\n get_feedback_context\n };\n});\n"],"names":["define","$","Ajax","Notification","Templates","SELECTORS","custompagepublished","isRemuiformat","format","get_feedback_context","questionname","call","methodname","args","action","config","JSON","stringify","show_feedbackform_modal","modal","close_modal","feedbackTime","Date","now","attr","localStorage","setItem","hasClass","render_feedbackform","callback","templatename","response","data","parse","render","M","cfg","done","html","js","remove","appendNodeContents","then","submit_feedback_handler","e","preventDefault","formData","FormData","target","submiteddata","forEach","value","key","submit_feedback","courseformatfeedbackhandler","lastactivecourseformat","getItem","currentactivecourseformat","currentselectedcourseformat","val","remui_settings_feedback_handler","homepagefeedbackhandler","frontpageFeedbackTimestamp","currentTime","parseInt","setTimeout","init","document","on","coursefeedbackrenderedcount","scrollPosition","window","scrollY","windowHeight","innerHeight","height"],"mappings":";;;;;;;AA+BAA,wCAAO,CAAC,SAAU,YAAa,oBAAqB,mBAAmB,SAASC,EAAGC,KAAMC,aAAcC,eAE\/FC,6BACsB,OADtBA,mCAE4B,4BAF5BA,kCAG2B,2BAG3BC,qBAAsB,EAItBC,cAAiBC,QADK,gBACMA,gBAcvBC,qBAAqBC,qBACnBR,KAAKS,KAAK,CAAC,CACdC,WAAY,2CACZC,KAAM,CACFC,OAAQ,uBACRC,OAAQC,KAAKC,UAAU,CACnBP,aAAAA,mBAGR,YAGCQ,0BACLjB,EAAEI,oCAAoCc,MAAM,iBAGvCC,cACLnB,EAAEI,oCAAoCc,MAAM,YAExCE,aAAeC,KAAKC,MAAS,MACN,mBAAxBtB,EAAE,QAAQuB,KAAK,OACdC,aAAaC,QAAQ,+BAAgCL,cAE9B,wCAAxBpB,EAAE,QAAQuB,KAAK,OACdC,aAAaC,QAAQ,kCAAmC,SAExDzB,EAAE,QAAQ0B,SAAS,sBACnBF,aAAaC,QAAQ,+BAAgCL,6BAI9CO,oBAAoBlB,kBAAamB,iEACxCC,aAAe,4CAEbC,eAAiBtB,qBAAqBC,cACtCsB,KAAOhB,KAAKiB,MAAMF,kBAErBC,OACCA,KAAKtB,aAAeA,aACbN,UAAU8B,OAAOJ,aAAc,CAClCf,OAAQoB,EAAEC,OACPJ,OACJK,MAAK,SAASC,KAAMC,IACnBtC,EAAEI,oCAAoCmC,SACtCpC,UAAUqC,mBAAmB,OAAQH,KAAMC,OAC5CG,MAAK,KACJxB,0BACwB,mBAAbW,UACPA,8BAQDc,wBAAwBC,GACnCA,EAAEC,uBAGIC,SAAW,IAAIC,SAASH,EAAEI,QAC1BC,aAAe,OACjBvC,aAAe,GAEnBoC,SAASI,SAAQ,CAACC,MAAOC,OACT,iBAARA,IACA1C,aAAeyC,MAEfF,aAAaG,KAAOD,kBAjFPzC,aAAcuC,cAC5B\/C,KAAKS,KAAK,CAAC,CACdC,WAAY,2CACZC,KAAM,CACFC,OAAQ,kBACRC,OAAQC,KAAKC,UAAU,UACPP,sBACAuC,mBAGpB,GA2EJI,CAAgB3C,aAAcuC,cAE9B7B,uBAGKkC,iCAGsB,oBAAxBrD,EAAE,QAAQuB,KAAK,MAA6B,KAEvC+B,uBAAyB9B,aAAa+B,QAAQ,0BAC9CC,0BAA4BhC,aAAa+B,QAAQ,6BACjDE,4BAA8BzD,EAAE,qDAAqD0D,MAEtFF,4BACChC,aAAaC,QAAQ,yBAA0B+B,2BAC\/CF,uBAAyBE,2BAGxBF,uBAGD9B,aAAaC,QAAQ,4BAA6BgC,6BAFlDjC,aAAaC,QAAQ,yBAA0BgC,6BAInDjC,aAAaC,QAAQ,+BAAgCJ,KAAKC,iBAIzDqC,qCACsB,wCAAxB3D,EAAE,QAAQuB,KAAK,aAKQ,QAFAC,aAAa+B,QAAQ,oCAG3C5B,oBAAoB,uCAInBiC,8BACDC,2BAA6BrC,aAAa+B,QAAQ,gCAClDO,YAAczC,KAAKC,MAEI,mBAAxBtB,EAAE,QAAQuB,KAAK,OAIfsC,4BAA8BC,aAAeC,SAASF,6BAErDG,YAAW,KACPrC,oBAAoB,uBAErB,WAIJ,CACHsC,KAAM,eAASxD,qEAERA,cACCkB,oBAAoBlB,cAGxBT,EAAEkE,UAAUC,GAAG,QAAS\/D,6BAA+B,aAAce,aAErEnB,EAAEkE,UAAUC,GAAG,SAAU\/D,kCAAmCsC,yBAC5D1C,EAAEkE,UAAUC,GAAG,SAAU,wDAAwD,SAASxB,GACtFnB,aAAaC,QAAQ,kCAAmC,WAG5DzB,EAAEkE,UAAUC,GAAG,QAAS,kDAAkD,SAASxB,OAC3EvB,aAAeC,KAAKC,MACxBE,aAAaC,QAAQ,+BAAgCL,iBAGzDpB,EAAEkE,UAAUC,GAAG,QAAS,iCAAiC,WAAY9D,qBAAsB,KAC3FL,EAAEkE,UAAUC,GAAG,QAAS,iDAAiD,WACjE9D,oBACAsB,oBAAoB,uBAEpBtB,qBAAsB,SAI1B+D,4BAA8B,EAClCpE,EAAEkE,UAAUC,GAAG,UAAU,cACa,GAA\/BC,6BACKpE,EAAE,QAAQ0B,SAAS,qBAAsB,KAErC2C,eAAiBC,OAAOC,QACxBC,aAAeF,OAAOG,YAItBJ,eAFuD,IADtCrE,EAAEkE,UAAUQ,SACUF,eAKpCnD,KAAKC,OAASyC,SAASvC,aAAa+B,QAAQ,mCACvCjD,cAAckB,aAAa+B,QAAQ,4BAA8BjD,cAAckB,aAAa+B,QAAQ,iCACpG5B,oBAAoB,wBACpByC,mCA6BxBR,0BACAP,8BACAM,mCAEJhC,oBAAAA,oBACAe,wBAAAA,wBACAvB,YAAAA,YACAX,qBAAAA"}