{"version":3,"file":"detector.min.js","sources":["https:\/\/www.midcountieslearning.coop\/local\/troubleshooter\/amd\/src\/detector.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 * Initialise Troubleshooter detection.\n *\n * @copyright 2021 Dynamic\n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n *\/\n\nexport const init = (passed, failed, warning, popupAllowed, popupBlocked) => {\n languageString.assignStrings(passed, warning, failed, popupAllowed, popupBlocked);\n\n browserSetup.detectBrowser();\n htmlFeatureSetup.getHTMLSupport();\n resolutionSetup.detectResolution();\n popupSetup.detectPopups();\n};\n\nlet languageString = {\n passed: null,\n warning: null,\n failed: null,\n popupsAllowed: null,\n popupsBlocked : null,\n assignStrings: function(passed, warning, failed, popupAllowed, popupBlocked) {\n this.passed = passed;\n this.warning = warning;\n this.failed = failed;\n this.popupsAllowed = popupAllowed;\n this.popupsBlocked = popupBlocked;\n }\n};\n\nlet browserSetup = {\n browserName : null,\n browserVersion: null,\n browserInfo: null ,\n agentInfo: navigator.userAgent,\n browserSet: null,\n statusBrowserVersion: document.getElementById(\"status-browserversion\"),\n detectBrowser: function() {\n \/\/ Split the string by brackets.\n this.agentInfo = this.agentInfo.split(\/([()])\/);\n \/\/ Remove the single brackets from the array, along with gecko information.\n this.agentInfo = this.agentInfo.filter(function(value) {\n return value != \"(\" && value != \")\"\n && value != \"KHTML, like Gecko\"\n && value != \" like Gecko\";\n });\n \/\/ Trims any white spaces.\n this.agentInfo.forEach(function(value) {\n browserSetup.agentInfo.push(value.trim());\n });\n\n \/\/ Remove any entry that has a space.\n this.browserSet = this.agentInfo[this.agentInfo.length - 1].split(\" \");\n \/\/ Check remaining values.\n this.browserSet.forEach(function(value) {\n if (value.match(\"OPR\") && browserSetup.browserName === null) {\n browserSetup.browserName = \"Opera\";\n browserSetup.browserVersion = value.split(\"OPR\/\")[1];\n browserSetup.browserInfo = `${browserSetup.browserName} ${browserSetup.browserVersion}` ;\n browserSetup.statusBrowserVersion.innerHTML = languageString.passed;\n browserSetup.statusBrowserVersion.classList.add(`pass`);\n } else if (value.match(\"rv\") && browserSetup.browserName === null) {\n browserSetup.browserName = \"Internet Explorer\";\n browserSetup.browserVersion = value.split(\":\")[1];\n browserSetup.browserInfo = `${browserSetup.browserName} ${browserSetup.browserVersion}`;\n browserSetup.statusBrowserVersion.innerHTML = languageString.warning;\n browserSetup.statusBrowserVersion.classList.add(`warn`);\n } else if (value.match(\"Firefox\") && browserSetup.browserName === null) {\n browserSetup.browserName = \"FireFox\";\n browserSetup.browserVersion = value.split(\"Firefox\/\")[1];\n browserSetup.browserInfo = `${browserSetup.browserName} ${browserSetup.browserVersion}`;\n browserSetup.statusBrowserVersion.innerHTML = languageString.passed;\n browserSetup.statusBrowserVersion.classList.add(`pass`);\n } else if (value.match(\"Edg\") && browserSetup.browserName === null) {\n browserSetup.browserName = \"Edge\";\n browserSetup.browserVersion = value.split(\"Edg\/\")[1];\n browserSetup.browserInfo = `${browserSetup.browserName} ${browserSetup.browserVersion}`;\n browserSetup.statusBrowserVersion.innerHTML = languageString.passed;\n browserSetup.statusBrowserVersion.classList.add(`pass`);\n } else if (value.match(\"Safari\") && browserSetup.browserName === null) {\n browserSetup.browserName = \"Safari\";\n browserSetup.browserVersion = value.split(\"\/\")[1];\n browserSetup.browserInfo = `${browserSetup.browserName} ${browserSetup.browserVersion}`;\n browserSetup.statusBrowserVersion.innerHTML = languageString.passed;\n browserSetup.statusBrowserVersion.classList.add(`pass`);\n } else if (value.match(\"Chrome\") && browserSetup.browserName === null ) {\n browserSetup.browserName = \"Chrome\";\n browserSetup.browserVersion = value.split(\"\/\")[1];\n browserSetup.browserInfo = `${browserSetup.browserName} ${browserSetup.browserVersion}`;\n browserSetup.statusBrowserVersion.innerHTML = languageString.passed;\n browserSetup.statusBrowserVersion.classList.add(`pass`);\n\n }\n });\n\n if(browserSetup.browserName === null || browserSetup.browserInfo === null) {\n browserSetup.browserName = `Unknown`;\n browserSetup.browserInfo = `Unknown`;\n browserSetup.statusBrowserVersion.innerHTML = languageString.failed;\n }\n\n document.getElementById(\"your-browserversion\").innerHTML = this.browserInfo;\n }\n};\n\nlet resolutionSetup = {\n \/\/ Finds overall width of the page and pixel density (usually mobile devices with high res screens).\n screenResolutionWidth: window.innerWidth * window.devicePixelRatio,\n screenResolutionHeight: window.innerHeight * window.devicePixelRatio,\n viewPortWidth: window.innerWidth,\n viewPortHeight: window.innerHeight,\n dpr : window.devicePixelRatio,\n statusResolution : document.getElementById(\"status-resolution\"),\n statusDPR : document.getElementById(\"status-dpr\"),\n statusViewport : document.getElementById(\"status-viewport\"),\n detectResolution: function() {\n document.getElementById(\"your-resolution\").innerHTML = `${Math.round(this.screenResolutionWidth)} x\n ${Math.round(this.screenResolutionHeight)}`;\n document.getElementById(\"your-dpr\").innerHTML = `${Math.round(this.dpr * 100)\/100}`;\n document.getElementById(\"your-viewport\").innerHTML = `${Math.round(this.viewPortWidth * 100) \/ 100} x\n ${Math.round(this.viewPortHeight)}`;\n\n if (375 < (document.documentElement.offsetWidth )) {\n this.statusResolution.innerHTML = languageString.passed;\n this.statusResolution.classList.add('pass');\n this.statusDPR.innerHTML = languageString.passed;\n this.statusDPR.classList.add('pass');\n this.statusViewport.innerHTML = languageString.passed;\n this.statusViewport.classList.add('pass');\n } else {\n this.statusResolution.innerHTML = languageString.warning;\n this.statusDPR.innerHTML = languageString.warning;\n this.statusViewport.innerHTML = languageString.warning;\n }\n }\n};\n\nlet popupSetup = {\n newWindow : window.open(\"\", \"\", \"width=500, height=500\"),\n statusPopups: document.getElementById(\"status-popups\"),\n detectPopups: function() {\n if(!this.newWindow || this.newWindow.closed || typeof this.newWindow.closed=='undefined') {\n \/\/ POPUP BLOCKED.\n document.getElementById(\"your-popups\").innerHTML = languageString.popupsBlocked;\n this.statusPopups.innerHTML = languageString.warning;\n this.statusPopups.classList.add(`warn`);\n } else {\n document.getElementById(\"your-popups\").innerHTML = languageString.popupsAllowed;\n this.statusPopups.innerHTML = languageString.passed;\n this.statusPopups.classList.add(`pass`);\n this.newWindow.close();\n }\n }\n};\n\nlet htmlFeatureSetup = {\n featureCount : 0,\n featurestotalCount: 0,\n statusHTML: document.getElementById(\"status-html5\"),\n checkOpacitySupport : CSS.supports(`(opacity: 0) and (opacity: 0.5)\n and (opacity:1)`),\n checkAnimationSupport : CSS.supports(`(animation-name: example)\n and (animation-duration: 5s)\n and (animation-timing-function: linear)\n and (animation-delay: 2s)\n and (animation-iteration-count: infinite)\n and (animation-direction: alternate)`),\n checkCssTransformsSupport : CSS.supports(`(transform: rotate(45deg))\n and (transform-origin: 20% 40%)\n and (transform-style: preserve-3d)`),\n checkCssTransitionsSupport :CSS.supports( `(transition-property: width)\n and (transition-duration: 2s)\n and (transition-timing-function: linear)\n and (transition-delay: 1s)`),\n checkMediaQueriesSupport: window.matchMedia(\"(min-width: 1px)\").matches,\n checkBorderRadiusSupport : CSS.supports(`(border-radius:25px)\n and (border-radius:25px 25px )\n and (border-radius:25px 25px 25px)\n and (border-radius:25px 25px 25px 25px)\n and (border-radius:5%)`),\n checkBoxShadowSupport: CSS.supports(`(box-shadow: none)\n and (box-shadow: 20px 20px 50px 10px pink inset)\n and (box-shadow:5px 10px #888888)`),\n \/\/ Generates the markup and return to the value. If it can't it'll return a false.\n checkCanvasSupport: !!document.createElement('canvas').getContext,\n \/\/ This check was originally greyed out check the original code to verify.\n checkVideoSupport:!!document.createElement('video').canPlayType,\n checkSvgSupport: !!document.createElementNS('http:\/\/www.w3.org\/2000\/svg', \"svg\").createSVGRect,\n checkEventListinerSupport: !!document.getElementById('page-local-troubleshooter-index'),\n getHTMLSupport:function() {\n this.updateFeatureCount(this.checkOpacitySupport);\n this.updateFeatureCount(this.checkAnimationSupport);\n this.updateFeatureCount(this.checkCssTransformsSupport);\n this.updateFeatureCount(this.checkCssTransitionsSupport);\n this.updateFeatureCount(this.checkMediaQueriesSupport);\n this.updateFeatureCount(this.checkBorderRadiusSupport);\n this.updateFeatureCount(this.checkBoxShadowSupport);\n \/\/ Generates the markup and return to the value. If it can't it'll return a false.\n this.updateFeatureCount(this.checkCanvasSupport);\n \/\/ This check was originally greyed out check the original code to verify.\n this.updateFeatureCount(this.checkVideoSupport);\n this.updateFeatureCount(this.checkSvgSupport);\n \/\/ Used in loading SL3\/360 courses.\n this.updateFeatureCount(this.checkEventListinerSupport);\n\n document.getElementById(\"your-html5\").innerHTML = `${this.featureCount}\/${this.featurestotalCount} `;\n\n if (this.featureCount == this.featurestotalCount) {\n this.statusHTML.innerHTML = languageString.passed;\n this.statusHTML.classList.add('pass');\n } else {\n this.statusHTML.innerHTML = languageString.warning;\n }\n },\n updateFeatureCount: function(featureSupport) {\n if (featureSupport) {\n this.featureCount++;\n this.featurestotalCount++;\n } else {\n this.featurestotalCount++;\n }\n }\n};"],"names":["passed","failed","warning","popupAllowed","popupBlocked","languageString","assignStrings","browserSetup","detectBrowser","htmlFeatureSetup","getHTMLSupport","resolutionSetup","detectResolution","popupSetup","detectPopups","popupsAllowed","popupsBlocked","browserName","browserVersion","browserInfo","agentInfo","navigator","userAgent","browserSet","statusBrowserVersion","document","getElementById","this","split","filter","value","forEach","push","trim","length","match","innerHTML","classList","add","screenResolutionWidth","window","innerWidth","devicePixelRatio","screenResolutionHeight","innerHeight","viewPortWidth","viewPortHeight","dpr","statusResolution","statusDPR","statusViewport","Math","round","documentElement","offsetWidth","newWindow","open","statusPopups","closed","close","featureCount","featurestotalCount","statusHTML","checkOpacitySupport","CSS","supports","checkAnimationSupport","checkCssTransformsSupport","checkCssTransitionsSupport","checkMediaQueriesSupport","matchMedia","matches","checkBorderRadiusSupport","checkBoxShadowSupport","checkCanvasSupport","createElement","getContext","checkVideoSupport","canPlayType","checkSvgSupport","createElementNS","createSVGRect","checkEventListinerSupport","updateFeatureCount","featureSupport"],"mappings":"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\/B,eAAeL,YAC5CgD,iBAAiBX,UAAUC,IAAI,aAC\/BW,UAAUb,UAAY\/B,eAAeL,YACrCiD,UAAUZ,UAAUC,IAAI,aACxBY,eAAed,UAAY\/B,eAAeL,YAC1CkD,eAAeb,UAAUC,IAAI,eAE7BU,iBAAiBZ,UAAY\/B,eAAeH,aAC5C+C,UAAUb,UAAY\/B,eAAeH,aACrCgD,eAAed,UAAY\/B,eAAeH,WAKpDW,WAAa,CACd0C,UAAYf,OAAOgB,KAAK,GAAI,GAAI,yBAChCC,aAAchC,SAASC,eAAe,iBACtCZ,aAAc,YACPa,KAAK4B,WAAa5B,KAAK4B,UAAUG,aAAwC,IAAvB\/B,KAAK4B,UAAUG,QAElEjC,SAASC,eAAe,eAAeU,UAAY\/B,eAAeW,mBAC7DyC,aAAarB,UAAY\/B,eAAeH,aACxCuD,aAAapB,UAAUC,cAE5Bb,SAASC,eAAe,eAAeU,UAAY\/B,eAAeU,mBAC7D0C,aAAarB,UAAY\/B,eAAeL,YACxCyD,aAAapB,UAAUC,iBACvBiB,UAAUI,WAKpBlD,iBAAoB,CACrBmD,aAAe,EACfC,mBAAoB,EACpBC,WAAYrC,SAASC,eAAe,gBACpCqC,oBAAsBC,IAAIC,mEAE1BC,sBAAwBF,IAAIC,uPAM5BE,0BAA4BH,IAAIC,wHAGhCG,2BAA4BJ,IAAIC,gKAIhCI,yBAA0B7B,OAAO8B,WAAW,oBAAoBC,QAChEC,yBAA2BR,IAAIC,8LAK\/BQ,sBAAuBT,IAAIC,iIAI3BS,qBAAsBjD,SAASkD,cAAc,UAAUC,WAEvDC,oBAAoBpD,SAASkD,cAAc,SAASG,YACpDC,kBAAmBtD,SAASuD,gBAAgB,6BAA8B,OAAOC,cACjFC,4BAA6BzD,SAASC,eAAe,mCACrDhB,eAAe,gBACPyE,mBAAmBxD,KAAKoC,0BACxBoB,mBAAmBxD,KAAKuC,4BACxBiB,mBAAmBxD,KAAKwC,gCACxBgB,mBAAmBxD,KAAKyC,iCACxBe,mBAAmBxD,KAAK0C,+BACxBc,mBAAmBxD,KAAK6C,+BACxBW,mBAAmBxD,KAAK8C,4BAExBU,mBAAmBxD,KAAK+C,yBAExBS,mBAAmBxD,KAAKkD,wBACxBM,mBAAmBxD,KAAKoD,sBAExBI,mBAAmBxD,KAAKuD,2BAE7BzD,SAASC,eAAe,cAAcU,oBAAeT,KAAKiC,yBAAgBjC,KAAKkC,wBAE3ElC,KAAKiC,cAAgBjC,KAAKkC,yBACtBC,WAAW1B,UAAY\/B,eAAeL,YACtC8D,WAAWzB,UAAUC,IAAI,cAEzBwB,WAAW1B,UAAY\/B,eAAeH,SAGjDiF,mBAAoB,SAASC,gBACtBA,qBACIxB,oBACAC,2BAEAA"}