{"version":3,"file":"sr-tutorialV2.comp.js","sources":["../../../appV2/component/sr-tutorialV2.comp.js"],"sourcesContent":["\nimport { createApp, h } from 'vue';\nimport PrimeVue from 'primevue/config';\nimport Button from \"primevue/button\";\nimport SRUtilExt from \"../misc/sr-utilV2.ext.js\";\n\nlet tutorialAppConfig = {\n components: {\n \"p-button\": Button,\n },\n data: function () {\n return {\n tutorial: {\n Name: \"\",\n Steps: [],\n CurrentId: \"\",\n CurrentText: \"\",\n OKCaption: \"\",\n Display: false,\n ShowHelpPanel: false,\n RestartId: \"\",\n BeforeShow: null,\n BeforeRestart: null\n },\n isOnlineDesigner: false,\n tutorialDiv: null,\n tutorialHolderDiv: null,\n pointerDiv: null,\n pointerDivShadow: null,\n }\n },\n methods: {\n startHelpPanel: function () {\n if (this.isOnlineDesigner) {\n SRUtilExt.showConfirmation(this, \"Confirm\", \"Do you want to restart the tutorial?\", \"Yes\", \"No\").then((result) => {\n if (result) {\n this.restartTutorial();\n }\n });\n }\n else {\n\n this.tutorial.ShowHelpPanel = true;\n if (this.tutorial.CurrentId == \"SKIP\") {\n this.hideTutorialStep();\n }\n else {\n this.tutorial.RestartId = this.tutorial.CurrentId;\n this.hideTutorialStep();\n }\n }\n },\n hideHelpPanel: function () {\n this.tutorial.ShowHelpPanel = false;\n if (this.tutorial.RestartId) {\n this.showTutorialStep(this.tutorial.RestartId);\n }\n },\n\n markTutorialDone: function () {\n localStorage.setItem(this.tutorial.Name, \"Done\");\n },\n addTutorialStep: function (step) {\n this.tutorial.Steps.push(step);\n },\n haveShownTutorialStep: function (id) {\n let storageItem = localStorage.getItem(this.tutorial.Name);\n if (storageItem) {\n if (storageItem == \"Done\") {\n return true;\n }\n\n let ids = storageItem.split(\",\");\n return ids.indexOf(id) > -1;\n }\n else {\n return false;\n }\n },\n reshowTutorialStep: function () {\n setTimeout(() => {\n this.showTutorialStep(this.tutorial.CurrentId, true);\n }, 200);\n },\n showTutorialStep: function (id, force = false) {\n if (this.haveShownTutorialStep(id) && !force) {\n return;\n }\n this.hideTutorialStep();\n\n let step = SRUtilExt.findById(this.tutorial.Steps, id);\n if (step) {\n this.showActualTutorial(step);\n }\n },\n showActualTutorial: function (step) {\n setTimeout(() => {\n this.tutorial.CurrentId = step.Id;\n this.tutorial.CurrentText = step.Text;\n this.tutorial.Display = true;\n this.tutorial.OKCaption = step.OKCaption ? step.OKCaption : \"\";\n // this.markAsShown(step.Id);\n\n // Ideally we would use vuejs and html but it unfortunately sits behind modals so we need to work in javascript.\n if (!this.tutorialDiv) {\n var tutorialContext = this;\n this.tutorialDiv = document.createElement(\"div\");\n this.tutorialDiv.id = \"tutorialInfo\";\n\n this.tutorialDiv.classList.add(\"tutorial\");\n\n this.tutorialHolderDiv = document.createElement(\"div\");\n this.tutorialHolderDiv.id = \"tutorialHolderInfo\";\n this.tutorialHolderDiv.classList.add(\"tutorial-content\");\n this.tutorialDiv.appendChild(this.tutorialHolderDiv)\n\n if (step.Id !== \"SKIP\") {\n // Add a div to hold the close button.\n const closeDiv = document.createElement(\"div\");\n closeDiv.classList.add(\"flex-justified-right\");\n this.tutorialHolderDiv.appendChild(closeDiv);\n\n // Create the close button\n const closeButton = createApp({\n render() {\n return h(Button, {\n icon: 'pi pi-times',\n severity: 'primary',\n rounded: \"true\",\n variant: \"text\",\n class: \"mb-4\",\n onClick: this.handleClick\n });\n },\n methods: {\n handleClick() {\n tutorialContext.skipTutorial();\n }\n }\n });\n closeButton.use(PrimeVue, {\n theme: 'none'\n });\n closeButton.mount(closeDiv);\n\n }\n\n const tutorialContent = document.createElement(\"div\");\n tutorialContent.classList.add(\"mt-regular\");\n tutorialContent.innerHTML = this.tutorial.CurrentText;\n this.tutorialHolderDiv.appendChild(tutorialContent);\n\n if (this.tutorial.OKCaption) {\n\n const okButtonDiv = document.createElement(\"div\");\n okButtonDiv.classList.add(\"flex-justified-center\");\n this.tutorialHolderDiv.appendChild(okButtonDiv);\n\n // Create the ok button\n const okButton = createApp({\n render() {\n return h(Button, {\n label: tutorialContext.tutorial.OKCaption,\n rounded: false,\n severity: 'primary',\n class: \"w-32 mt-4\",\n onClick: this.handleClick\n });\n },\n methods: {\n handleClick() {\n tutorialContext.nextTutorialStep(\"NEXT\")\n }\n }\n });\n okButton.use(PrimeVue, {\n theme: 'none'\n });\n okButton.mount(okButtonDiv);\n }\n\n document.body.appendChild(this.tutorialDiv);\n\n\n this.pointerDivShadow = document.createElement(\"div\");\n this.pointerDivShadow.classList.add(\"help-pointer-shadow\");\n\n this.tutorialDiv.insertBefore(this.pointerDivShadow, this.tutorialHolderDiv);\n\n this.pointerDiv = document.createElement(\"div\");\n this.pointerDiv.classList.add(\"help-pointer\");\n this.tutorialDiv.append(this.pointerDiv);\n }\n\n this.tutorialDiv.style.left = -10000 + \"px\";\n this.tutorialDiv.style.top = 0;\n\n this.pointerDivShadow.style.left = -1000 + \"px\";\n this.pointerDivShadow.style.top = -1000 + \"px\";\n\n this.pointerDiv.style.left = -1000 + \"px\";\n this.pointerDiv.style.top = -1000 + \"px\";\n\n\n this.positionAndSizeStep(step, this.tutorialDiv, this.tutorialHolderDiv);\n }, 100);\n },\n\n positionAndSizeStep: function (step) {\n // If we have an element Id then we need to work out how to position this element.\n if (step.ElementId) {\n this.$nextTick(function () {\n\n let element = document.getElementById(step.ElementId);\n if (!element) {\n console.log(\"Cannot find \" + step.ElementId);\n }\n if (element.scrollIntoViewIfNeeded) {\n element.scrollIntoViewIfNeeded();\n }\n else {\n element.scrollIntoView(true);\n }\n // We need to give element change to draw so we can get its size.\n setTimeout(() => {\n try {\n element = document.getElementById(step.ElementId);\n\n let tutElement = document.getElementById(\"tutorialInfo\");\n if (element) {\n var rect = element.getBoundingClientRect();\n var tutorialRect = tutElement.getBoundingClientRect();\n let leftPos = 0;\n let topPos = 0;\n\n let leftPtrPos = 0;\n let topPtrPos = 0;\n switch (step.Position) {\n case \"left\":\n leftPos = rect.left - 10 - tutElement.offsetWidth;\n topPos = rect.top + (rect.bottom - rect.top) / 2 - (tutorialRect.bottom - tutorialRect.top) / 2;\n\n leftPtrPos = tutElement.offsetWidth;\n topPtrPos = (tutorialRect.bottom - tutorialRect.top) / 2;\n break;\n case \"right\":\n leftPos = rect.right + 10;\n topPos = rect.top + (rect.bottom - rect.top) / 2 - (tutorialRect.bottom - tutorialRect.top) / 2;\n\n leftPtrPos = 0; // tutElement.offsetWidth;\n topPtrPos = (tutorialRect.bottom - tutorialRect.top) / 2;\n break;\n case \"bottom\":\n leftPos = rect.left + (rect.right - rect.left) / 2 - (tutorialRect.right - tutorialRect.left) / 2;\n topPos = rect.bottom + 10;\n\n leftPtrPos = (tutorialRect.right - tutorialRect.left) / 2;\n topPtrPos = 0;\n break;\n\n case \"top\":\n leftPos = rect.left + (rect.right - rect.left) / 2 - (tutorialRect.right - tutorialRect.left) / 2;\n topPos = rect.bottom - tutorialRect.height - rect.height - 10;\n\n leftPtrPos = (tutorialRect.right - tutorialRect.left) / 2;\n topPtrPos = tutorialRect.height;\n break;\n }\n\n // Now we want to check it actually fits on the page and adjust as required.\n let adjustLeft = 0;\n let adjustTop = 0;\n const tutorialOffset = 10;\n if (leftPos < tutorialOffset) {\n const newLeftPos = tutorialOffset;\n adjustLeft = newLeftPos - leftPos;\n }\n if (leftPos + tutorialRect.width > window.innerWidth - tutorialOffset) {\n const newLeftPos = window.innerWidth - tutorialRect.width - tutorialOffset;\n adjustLeft = newLeftPos - leftPos;\n }\n if (topPos < tutorialOffset) {\n const newTopPos = tutorialOffset;\n adjustTop = newTopPos - topPos;\n }\n if (topPos + tutorialRect.height > window.innerHeight - tutorialOffset) {\n const newTopPos = window.innerHeight - tutorialRect.height - tutorialOffset;\n adjustTop = newTopPos - topPos;\n }\n // msg += \" Adjustment=\" + adjustLeft + \",\" + adjustTop;\n this.tutorialDiv.style.left = leftPos + \"px\";\n this.tutorialDiv.style.top = topPos + \"px\";\n\n this.tutorialHolderDiv.style.left = adjustLeft + \"px\";\n this.tutorialHolderDiv.style.top = adjustTop + \"px\";\n\n // We need a square to use as the pointer\n if (step.Position) {\n this.pointerDivShadow.style.left = leftPtrPos + \"px\";\n this.pointerDivShadow.style.top = topPtrPos + \"px\";\n\n this.pointerDiv.style.left = leftPtrPos + \"px\";\n this.pointerDiv.style.top = topPtrPos + \"px\";\n }\n }\n }\n catch (ex) {\n console.log(ex);\n }\n }, 300);\n });\n }\n else {\n // We need to give element change to draw so we can get its size.\n\n // TODO Not sure if this.$nextTick will work or if it needs to be Vue.$nextTick\n this.$nextTick(() => {\n let tutElement = document.getElementById(\"tutorialInfo\");\n var tutorialRect = tutElement.getBoundingClientRect();\n\n let leftPos = window.innerWidth / 2 - (tutorialRect.right - tutorialRect.left) / 2;\n let topPos = 200;\n\n this.tutorialDiv.style.left = leftPos + \"px\";\n this.tutorialDiv.style.top = topPos + \"px\";\n });\n }\n\n },\n\n checkTutorialSize: function () {\n let tutorialRect = this.$refs.tutorial.getBoundingClientRect();\n let tutorialRect1 = document.getElementById(\"tutorialInfo\").getBoundingClientRect();\n },\n hideTutorialStep: function () {\n this.tutorial.Display = false;\n\n let element = document.getElementById(\"tutorialInfo\");\n if (element) {\n this.tutorialDiv = null;\n element.remove();\n }\n },\n restartTutorial: function () {\n if (this.tutorial.BeforeRestart) {\n this.tutorial.BeforeRestart();\n }\n localStorage.setItem(this.tutorial.Name, \"\");\n this.tutorial.ShowHelpPanel = false;\n this.showTutorialStep(\"START\");\n },\n skipTutorial: function () {\n this.hideTutorialStep();\n this.tutorial.CurrentId = \"\";\n if (this.tutorial.BeforeShowStep) {\n this.tutorial.BeforeShowStep(\"END\");\n }\n this.markTutorialDone();\n if (!this.isOnlineDesigner) {\n let tutorialStep = { Id: \"SKIP\", Text: \"If you want to restart your tutorial or get more assistance, press the help button then press Restart Tutorial.\", ElementId: \"helpBtn\", OKCaption: \"OK\", Position: \"left\" }\n this.showActualTutorial(tutorialStep);\n }\n else {\n let tutorialStep = { Id: \"SKIP\", Text: \"You have completed the tutorial. Have fun designing your building!\", ElementId: \"\", OKCaption: \"OK\", Position: \"left\" }\n this.showActualTutorial(tutorialStep);\n }\n },\n finishTutorial: function (showMessage = true) {\n this.hideTutorialStep();\n this.tutorial.CurrentId = \"\";\n if (this.tutorial.BeforeShowStep) {\n this.tutorial.BeforeShowStep(\"END\");\n }\n this.markTutorialDone();\n if (showMessage) {\n if (!this.isOnlineDesigner) {\n\n let tutorialStep = { Id: \"SKIP\", Text: \"
You have completed the tutorial!
If you want to restart your tutorial or get more assistance, press the help button then press Restart Tutorial.
\", ElementId: \"helpBtn\", OKCaption: \"OK\", Position: \"left\" }\n this.showActualTutorial(tutorialStep);\n }\n else {\n let tutorialStep = { Id: \"SKIP\", Text: \"You have completed the tutorial. Have fun designing your building!\", ElementId: \"\", OKCaption: \"OK\", Position: \"left\" }\n this.showActualTutorial(tutorialStep);\n }\n }\n },\n nextTutorialStep: function (reqId = \"\", hidePanels = true) {\n this.hideTutorialStep();\n if (reqId == \"END\") {\n this.finishTutorial();\n return;\n }\n\n let incStep = true;\n let showStep = false;\n if (reqId == \"NEXT\") {\n let step = SRUtilExt.findById(this.tutorial.Steps, this.tutorial.CurrentId);\n if (step && step.SkipTo) {\n reqId = step.SkipTo;\n incStep = false;\n }\n else {\n reqId = \"\";\n }\n }\n\n\n\n if (reqId == \"\") {\n if (reqId == \"\") {\n reqId = this.tutorial.CurrentId;\n }\n else {\n incStep = false;\n }\n if (reqId == \"\") {\n return;\n }\n }\n\n if (reqId === \"SKIP\") {\n // Give a chance to clean up stuff.\n if (this.tutorial.BeforeShowStep) {\n showStep = this.tutorial.BeforeShowStep(\"END\");\n }\n this.markTutorialDone();\n return;\n }\n\n let step = SRUtilExt.findById(this.tutorial.Steps, reqId);\n let currIndex = this.tutorial.Steps.indexOf(step);\n if (incStep) {\n currIndex++;\n }\n if (currIndex < this.tutorial.Steps.length) {\n showStep = true;\n if (this.tutorial.BeforeShowStep && hidePanels) {\n showStep = this.tutorial.BeforeShowStep(this.tutorial.Steps[currIndex].Id);\n }\n if (showStep) {\n this.showTutorialStep(this.tutorial.Steps[currIndex].Id);\n }\n else {\n this.tutorial.CurrentId = this.tutorial.Steps[currIndex].Id;\n this.nextTutorialStep();\n }\n }\n else {\n this.finishTutorial();\n }\n },\n onWindowResize: function (e) {\n let step = SRUtilExt.findById(this.tutorial.Steps, this.tutorial.CurrentId);\n\n if (step && this.tutorialDiv && this.tutorialHolderDiv) {\n this.positionAndSizeStep(step);\n }\n },\n showSupport: function () {\n window.open(\"/home/support\", \"_blank\");\n }\n },\n mounted: function () {\n window.addEventListener('resize', this.onWindowResize, false);\n }\n}\n\nlet tutorialApp = createApp(tutorialAppConfig);\ntutorialApp.use(PrimeVue, {\n theme: 'none'\n});\n\nwindow.tutorialVM = tutorialApp.mount(\"#tutorialSection\");\n\n\n\n\n"],"names":["tutorialAppConfig","Button","SRUtilExt","result","step","id","storageItem","force","tutorialContext","closeDiv","closeButton","createApp","h","PrimeVue","tutorialContent","okButtonDiv","okButton","element","tutElement","rect","tutorialRect","leftPos","topPos","leftPtrPos","topPtrPos","adjustLeft","adjustTop","tutorialOffset","ex","tutorialStep","showMessage","reqId","hidePanels","incStep","showStep","currIndex","e","tutorialApp"],"mappings":"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"}