{"version":3,"file":"faq.min.js","sources":["https:\/\/kundenportal.comm-unity.at\/local\/wb_faq\/amd\/src\/faq.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 * @package local_wunderbyte_table\n * @copyright Wunderbyte GmbH \n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n *\/\n\nimport Templates from \"core\/templates\";\n\nimport {increaseCounter} from \"local_wb_faq\/faqnavbar\";\nimport {get_string as getString} from \"core\/str\";\nimport Ajax from \"core\/ajax\";\n\nconst faqs = {};\n\nvar initialroot = 0;\n\nconst SELECTORS = {\n SUPPORTMESSAGE_MODULE: 'div[data-id=\"supportmessage-form\"] input[name=\"module\"][type=\"hidden\"]',\n SUPPORTMESSAGE_SUPPLEMENT: 'div[data-id=\"supportmessage-form\"] input[name=\"group\"][type=\"hidden\"]',\n};\n\n\/**\n * Gets called from mustache template.\n *\n * @param {*} data\n * @param {integer} root\n * @param {string} uid\n *\/\nexport const init = (data, root, uid) => {\n\n \/\/ Make sure we never run the same init js twice.\n if (faqs[uid]) {\n return;\n }\n\n faqs[uid] = true;\n\n initialroot = root;\n\n render(root, data, uid);\n addEvents(data, root, uid);\n};\n\n\/**\n * Adds Evente to toggle switch\n * @param {*} data\n * @param {integer} root\n * @param {string} uid\n *\/\nfunction addEvents(data, root, uid) {\n let select = document.querySelector(\".local_wb_faq_container-\" + uid);\n\n if (!select) {\n return;\n }\n\n if (select.listener) {\n select.removeEventListener(\"click\", select.listener);\n }\n if (select) {\n select.addEventListener(\n \"click\",\n (select.listener = (e) => {\n\n setValuesToSelect(e);\n\n let button = e.target;\n if (button.dataset.toggle == \"faqcollapse\") {\n\n if (button.classList.contains(\"collapsed\")) {\n button.classList.remove(\"collapsed\");\n document.querySelector(button.dataset.target).classList.add(\"show\");\n document\n .querySelector(button.dataset.target)\n .classList.remove(\"hide\");\n } else {\n button.classList.add(\"collapsed\");\n document.querySelector(button.dataset.target).classList.add(\"hide\");\n document\n .querySelector(button.dataset.target)\n .classList.remove(\"show\");\n }\n }\n if (e.target.dataset.action == \"goto\") {\n render(e.target.dataset.targetid, data, uid);\n }\n })\n );\n }\n\n let searchbox = document.querySelector(\".wb_faq_searchbox-\" + uid);\n\n if (searchbox) {\n searchbox.addEventListener(\"click\", (e) => {\n let button = e.target;\n \/\/ eslint-disable-next-line no-console\n if (button.dataset.toggle == \"faqcollapse\") {\n\n if (button.classList.contains(\"collapsed\")) {\n button.classList.remove(\"collapsed\");\n document.querySelector(button.dataset.target).classList.add(\"show\");\n document\n .querySelector(button.dataset.target)\n .classList.remove(\"hide\");\n } else {\n button.classList.add(\"collapsed\");\n document.querySelector(button.dataset.target).classList.add(\"hide\");\n document\n .querySelector(button.dataset.target)\n .classList.remove(\"show\");\n }\n }\n if (e.target.dataset.action == \"goto\") {\n render(e.target.dataset.targetid, data, uid);\n document\n .querySelector(\".local_wb_faq-\" + uid)\n .scrollIntoView({block: \"start\", behavior: \"smooth\"});\n }\n });\n }\n\n let category = document.querySelector(\"#id_categorypicker\");\n\n if (category) {\n category.addEventListener(\"change\", () => {\n let faqid = category.value;\n if (category.value == \"\") {\n faqid = root;\n }\n\n render(faqid, data);\n });\n }\n}\n\n\/**\n * Renders template from jsonobject for the categoryid\n * @param {integer} id\n * @param {*} data\n * @param {string} uid\n *\/\nfunction render(id, data, uid) {\n\n let json = data;\n if (typeof data === 'string') {\n json = JSON.parse(data);\n }\n\n let templatedata = json[id] ?? null;\n\n if (!templatedata) {\n\n return;\n }\n\n templatedata.root = id;\n templatedata.uid = uid;\n\n if (!templatedata || !templatedata.hasOwnProperty(\"parentid\")) {\n\n \/\/ eslint-disable-next-line no-console\n console.error('no data or no parentid found', templatedata);\n return;\n }\n\n if (templatedata.parentid == \"\") {\n templatedata.parenttitle = getString(\"faq\", \"local_wb_faq\");\n }\n\n \/\/ Select Container\n let container = document.querySelector(\".local_wb_faq-\" + uid);\n\n if (!container) {\n\n return;\n }\n\n \/\/ Empty Container\n container.innerHTML = \"\";\n \/\/ Render\n Templates.renderForPromise(\"local_wb_faq\/faq\", templatedata)\n .then(({html, js}) => {\n\n Templates.replaceNodeContents(\".local_wb_faq-\" + uid, html, js);\n\n \/\/ Remove button attribute for\n const breadcrumbs = container.querySelectorAll('.wb-breadcrumb div.btn');\n\n breadcrumbs.forEach(breadcrumb => {\n try {\n if (breadcrumb.dataset.targetid != 0\n && !json[breadcrumb.dataset.targetid]) {\n throw new Error();\n }\n } catch (e) {\n breadcrumb.classList.add('d-none');\n }\n });\n\n const last = breadcrumbs[breadcrumbs.length - 1];\n const first = breadcrumbs[0];\n\n if (initialroot != 0) {\n first.classList.remove(['btn-primary']);\n first.classList.add(['btn-nolabel']);\n first.removeAttribute('data-action');\n first.classList.add('d-none');\n }\n\n last.classList.remove(['btn-primary']);\n last.classList.add(['btn-nolabel']);\n last.removeAttribute('data-action');\n last.classList.add('d-none');\n\n\n return;\n })\n .catch((e) => {\n \/\/ eslint-disable-next-line no-console\n console.log(e);\n });\n}\n\n\/**\n * Calls WS Function to get new data after new entries are added\n * @param {string} uid\n * @param {integer} parentid\n *\/\nexport const reloadData = (uid, parentid) => {\n loadData(uid, parentid);\n};\n\nexport const loadData = (uid, parentid) =>\n Ajax.call([\n {\n methodname: \"local_wb_faq_get_faq_data\",\n args: {},\n done: function(data) {\n let newdata = JSON.parse(data.json);\n\n if (!uid) {\n return newdata;\n }\n\n addEvents(newdata, parentid, uid);\n render(parentid, newdata, uid);\n return '';\n },\n fail: function(ex) {\n \/\/ eslint-disable-next-line no-console\n console.log(ex);\n },\n },\n ]);\n\n\/**\n *\n * @param {Event} e\n *\/\nfunction setValuesToSelect(e) {\n\n \/\/ With every click, we increase the counter.\n increaseCounter();\n\n const moduleElement = document.querySelector(SELECTORS.SUPPORTMESSAGE_MODULE);\n const supplementElement = document.querySelector(SELECTORS.SUPPORTMESSAGE_SUPPLEMENT);\n\n if (moduleElement) {\n\n moduleElement.value = e.target.dataset.module;\n }\n if (supplementElement) {\n\n supplementElement.value = e.target.dataset.supplement;\n }\n}"],"names":["faqs","initialroot","SELECTORS","addEvents","data","root","uid","select","document","querySelector","listener","removeEventListener","addEventListener","e","moduleElement","supplementElement","value","target","dataset","module","supplement","setValuesToSelect","button","toggle","classList","contains","remove","add","action","render","targetid","searchbox","scrollIntoView","block","behavior","category","faqid","id","json","JSON","parse","templatedata","hasOwnProperty","console","error","parentid","parenttitle","container","innerHTML","renderForPromise","then","_ref","html","js","replaceNodeContents","breadcrumbs","querySelectorAll","forEach","breadcrumb","Error","last","length","first","removeAttribute","catch","log","loadData","Ajax","call","methodname","args","done","newdata","fail","ex"],"mappings":";;;;;gNA2BMA,KAAO,OAETC,YAAc,QAEZC,gCACmB,yEADnBA,oCAEuB,iFA+BpBC,UAAUC,KAAMC,KAAMC,SACzBC,OAASC,SAASC,cAAc,2BAA6BH,SAE5DC,cAIDA,OAAOG,UACTH,OAAOI,oBAAoB,QAASJ,OAAOG,UAEzCH,QACFA,OAAOK,iBACL,QACCL,OAAOG,SAAYG,cAqMCA,0CAKnBC,cAAgBN,SAASC,cAAcP,iCACvCa,kBAAoBP,SAASC,cAAcP,qCAE7CY,gBAEFA,cAAcE,MAAQH,EAAEI,OAAOC,QAAQC,QAErCJ,oBAEFA,kBAAkBC,MAAQH,EAAEI,OAAOC,QAAQE,YAjNvCC,CAAkBR,OAEdS,OAAST,EAAEI,OACc,eAAzBK,OAAOJ,QAAQK,SAEbD,OAAOE,UAAUC,SAAS,cAC5BH,OAAOE,UAAUE,OAAO,aACxBlB,SAASC,cAAca,OAAOJ,QAAQD,QAAQO,UAAUG,IAAI,QAC5DnB,SACGC,cAAca,OAAOJ,QAAQD,QAC7BO,UAAUE,OAAO,UAEpBJ,OAAOE,UAAUG,IAAI,aACrBnB,SAASC,cAAca,OAAOJ,QAAQD,QAAQO,UAAUG,IAAI,QAC5DnB,SACGC,cAAca,OAAOJ,QAAQD,QAC7BO,UAAUE,OAAO,UAGO,QAA3Bb,EAAEI,OAAOC,QAAQU,QACnBC,OAAOhB,EAAEI,OAAOC,QAAQY,SAAU1B,KAAME,WAM5CyB,UAAYvB,SAASC,cAAc,qBAAuBH,KAE1DyB,WACFA,UAAUnB,iBAAiB,SAAUC,QAC\/BS,OAAST,EAAEI,OAEc,eAAzBK,OAAOJ,QAAQK,SAEbD,OAAOE,UAAUC,SAAS,cAC5BH,OAAOE,UAAUE,OAAO,aACxBlB,SAASC,cAAca,OAAOJ,QAAQD,QAAQO,UAAUG,IAAI,QAC5DnB,SACGC,cAAca,OAAOJ,QAAQD,QAC7BO,UAAUE,OAAO,UAEpBJ,OAAOE,UAAUG,IAAI,aACrBnB,SAASC,cAAca,OAAOJ,QAAQD,QAAQO,UAAUG,IAAI,QAC5DnB,SACGC,cAAca,OAAOJ,QAAQD,QAC7BO,UAAUE,OAAO,UAGO,QAA3Bb,EAAEI,OAAOC,QAAQU,SACnBC,OAAOhB,EAAEI,OAAOC,QAAQY,SAAU1B,KAAME,KACxCE,SACGC,cAAc,iBAAmBH,KACjC0B,eAAe,CAACC,MAAO,QAASC,SAAU,mBAK\/CC,SAAW3B,SAASC,cAAc,sBAElC0B,UACFA,SAASvB,iBAAiB,UAAU,SAC9BwB,MAAQD,SAASnB,MACC,IAAlBmB,SAASnB,QACXoB,MAAQ\/B,MAGVwB,OAAOO,MAAOhC,kBAWXyB,OAAOQ,GAAIjC,KAAME,SAEpBgC,KAAOlC,KACS,iBAATA,OACTkC,KAAOC,KAAKC,MAAMpC,WAGhBqC,aAAeH,KAAKD,KAAO,SAE1BI,uBAKLA,aAAapC,KAAOgC,GACpBI,aAAanC,IAAMA,KAEdmC,eAAiBA,aAAaC,eAAe,wBAGhDC,QAAQC,MAAM,+BAAgCH,cAInB,IAAzBA,aAAaI,WACfJ,aAAaK,aAAc,mBAAU,MAAO,qBAI1CC,UAAYvC,SAASC,cAAc,iBAAmBH,KAErDyC,YAMLA,UAAUC,UAAY,sBAEZC,iBAAiB,mBAAoBR,cAC5CS,MAAKC,WAACC,KAACA,KAADC,GAAOA,4BAEFC,oBAAoB,iBAAmBhD,IAAK8C,KAAMC,UAGtDE,YAAcR,UAAUS,iBAAiB,0BAE\/CD,YAAYE,SAAQC,oBAEmB,GAA\/BA,WAAWxC,QAAQY,WACfQ,KAAKoB,WAAWxC,QAAQY,gBACpB,IAAI6B,MAEhB,MAAO9C,GACP6C,WAAWlC,UAAUG,IAAI,oBAIvBiC,KAAOL,YAAYA,YAAYM,OAAS,GACxCC,MAAQP,YAAY,GAEP,GAAftD,cACF6D,MAAMtC,UAAUE,OAAO,CAAC,gBACxBoC,MAAMtC,UAAUG,IAAI,CAAC,gBACrBmC,MAAMC,gBAAgB,eACtBD,MAAMtC,UAAUG,IAAI,WAGtBiC,KAAKpC,UAAUE,OAAO,CAAC,gBACvBkC,KAAKpC,UAAUG,IAAI,CAAC,gBACpBiC,KAAKG,gBAAgB,eACrBH,KAAKpC,UAAUG,IAAI,aAKpBqC,OAAOnD,IAEN8B,QAAQsB,IAAIpD,qBA\/LE,CAACT,KAAMC,KAAMC,OAG3BN,KAAKM,OAITN,KAAKM,MAAO,EAEZL,YAAcI,KAEdwB,OAAOxB,KAAMD,KAAME,KACnBH,UAAUC,KAAMC,KAAMC,2BA4LE,CAACA,IAAKuC,YAC9BqB,SAAS5D,IAAKuC,iBAGHqB,SAAW,CAAC5D,IAAKuC,WAC5BsB,cAAKC,KAAK,CACR,CACEC,WAAY,4BACZC,KAAM,GACNC,KAAM,SAASnE,UACToE,QAAUjC,KAAKC,MAAMpC,KAAKkC,aAEzBhC,KAILH,UAAUqE,QAAS3B,SAAUvC,KAC7BuB,OAAOgB,SAAU2B,QAASlE,KACnB,IALEkE,SAOXC,KAAM,SAASC,IAEb\/B,QAAQsB,IAAIS"}