{"version":3,"file":"chunks/2ddf3fbd87dd37.js","mappings":"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","sources":["webpack:///./resources/js/components/specific/tco/tco-calc.ts","webpack:///./resources/js/components/specific/tco/tco-labels.ts","webpack:///./resources/js/components/specific/tco/tco-screen-edit.ts","webpack:///./resources/js/components/specific/tco/tco-screen-start.ts","webpack:///./resources/js/components/specific/tco/tco-screen-results.ts","webpack:///./resources/js/components/specific/tco/tco-build.ts","webpack:///./resources/js/components/specific/tco/tco-calculator.ts"],"sourcesContent":["import TCO from \"./tco-build\";\n\nconst tiers = {\n USD: {\n server: {\n small: 717.84,\n medium: 863.3,\n large: 2_108.77,\n xl: 3_963.98\n },\n dc: {\n small: 932.5,\n medium: 1_208.88,\n large: 5_656.6,\n xl: 9_742.75\n }\n },\n JPY: {\n server: {\n small: 75_628.39,\n medium: 90_953.40,\n large: 222_170.52,\n xl: 417_627.09\n },\n dc: {\n small: 98_244.00,\n medium: 127_362.16,\n large: 595_953.92,\n xl: 1_026_452.30\n }\n }\n};\n\n\nconst adminSalary = {\n USD: 100_134,\n JPY: 14_768_945\n};\n\nconst medianHourly = {\n USD: 50.77,\n JPY: 5_274.75\n};\n\ntype Info = {\n numberOfAdmins: number;\n updatesPerYear: number;\n downtimePerUpdate: any;\n overhead: any;\n adminSalary: any;\n medianHourly: any;\n useAccess: any;\n accessPrice: any;\n products: [\n {\n price: any;\n chosenProductKey: any;\n instances: [\n {\n isAvailable: any;\n deployment: string;\n users: number,\n infra: number,\n productIndex: number,\n instanceIndex: number,\n },\n ],\n deployment: string,\n customPrice?: number\n },\n ],\n plannedDowntime: boolean,\n edition: string\n};\n\nexport default class Calc {\n static getTiers(users: number) {\n if (users < 1000) {\n return 'small';\n } else if (users < 10_000) {\n return 'medium'\n } else if (users > 100_000) {\n return 'large';\n } else {\n return 'xl';\n }\n }\n\n static getTotalSelfManagedCosts(info: Info) {\n return this.getTotalOperationalCosts(info) + this.getTotalAnnualMaintenance(info);\n }\n\n static getProductInstanceInfrastructureCost(info: Info, productIndex: number, instanceIndex: number) {\n return tiers[TCO.currency()][info.products[productIndex].deployment][this.getTiers(info.products[productIndex].instances[instanceIndex].users)] * 12;\n }\n\n static getTotalInfraCostPerProduct(info: Info, productIndex: number) {\n return info.products[productIndex].instances.reduce((sum, instance, instanceIndex) => {\n return sum + (instance.infra ? instance.infra : this.getProductInstanceInfrastructureCost(info, productIndex, instanceIndex));\n }, 0);\n }\n\n static getTotalInfrastructureCost(info: Info) {\n let instances = info.products.map((product, productIndex) => {\n let newInstances = product.instances;\n newInstances.forEach((instance, instanceIndex) => {\n instance.productIndex = productIndex;\n instance.instanceIndex = instanceIndex;\n })\n return newInstances;\n }).flat();\n return instances.reduce((instanceTotal, instance) => {\n return instanceTotal + (instance.infra ? instance.infra : this.getProductInstanceInfrastructureCost(info, instance.productIndex, instance.instanceIndex));\n }, 0);\n }\n\n static getTotalOperationalCosts(info: Info) {\n return this.getTotalInfrastructureCost(info) + this.getTotalITLaborCost(info) + this.getPlannedDowntimeCosts(info);\n }\n\n static getHighestUsersAmongInstances(info: Info) {\n let allInstances = info.products.map(product => {\n return product.instances.map(instance => {\n return instance.users;\n })\n }).flat();\n return Math.max(...allInstances);\n }\n\n static getPlannedDowntimeCosts(info: Info) {\n if (info.plannedDowntime) {\n return this.getHighestUsersAmongInstances(info)\n * this.getMedianHourly(info)\n * this.getDowntimePerUpdate(info)\n * this.getUpdatesPerYear(info);\n }\n return 0;\n }\n\n static getTotalAnnualMaintenance(info: Info) {\n return info.products.reduce((productSum, product) => {\n return productSum + (product.customPrice ? product.customPrice : product.price);\n }, 0);\n }\n\n static getTotalAnnualCloudSubscription(info: Info, productInfo) {\n let edition = info.edition == \"premium\" ? \"cloudPremium\" : \"cloudStandard\";\n return info.products.reduce((productSum, product) => {\n let isAvailable = productInfo[product.chosenProductKey][edition].available;\n let productPrice = info.edition == \"premium\" && isAvailable ? \"cloudPremium\" : \"cloudStandard\";\n return productSum + product[productPrice];\n }, 0) + (info.useAccess ? info.accessPrice : 0);\n }\n\n\n static getTotalCloudCosts(info: Info, productInfo) {\n return this.getTotalAnnualCloudSubscription(info, productInfo) ;\n }\n\n static getAdminSalary(info: Info) {\n return info?.adminSalary ? info.adminSalary : adminSalary[TCO.currency()];\n }\n\n static getMedianHourly(info: Info) {\n return info?.medianHourly ? info.medianHourly : medianHourly[TCO.currency()];\n }\n\n static getUpdatesPerYear(info: Info) {\n return info?.updatesPerYear ? info?.updatesPerYear : 2;\n }\n\n static getDowntimePerUpdate(info: Info) {\n return info?.downtimePerUpdate ? info?.downtimePerUpdate : 3;\n }\n\n static getNumberOfAdmins(info: Info) {\n return info?.numberOfAdmins ? info.numberOfAdmins : (this.getHighestUsersAmongInstances(info) > 5000 ? 2 : 1);\n }\n\n static getTotalITLaborCost(info: Info) {\n return (info.adminSalary ? info.adminSalary : adminSalary[TCO.currency()])\n * this.getNumberOfAdmins(info)\n * (info.overhead ? 1.4 : 1);\n }\n\n}\n","let labels: { [name: string]: any; };\n\nexport default class Labels {\n static init(passedLabels: typeof labels) {\n labels = passedLabels;\n }\n\n static get(key: string) {\n return labels[key];\n }\n}\n","import TCO from \"./tco-build\";\nimport Calc from \"./tco-calc\";\nimport Labels from \"./tco-labels\";\n\nexport default class TCOEdit {\n static getEditPage(printVersion?: boolean) {\n let contain = TCO.getEl({ className: 'container-fluid edit-screen' });\n let row = TCO.getEl({ className: 'row' });\n contain.appendChild(row);\n if (!printVersion) {\n row.appendChild(TCO.getEl({\n className: 'column text-center column-md-6 column-md-push-3',\n innerHTML: `\n <h2>${Labels.get(\"editHeadline\")}</h2>\n <div class=\"text-oversized\">\n <p>${Labels.get(\"editSubhead\")}</p>\n </div>\n `\n }))\n }\n row.appendChild(this.getOperationalCostsSection(printVersion));\n row.appendChild(this.getAnnualMaintenanceSection(printVersion));\n if (!printVersion) {\n row.appendChild(this.getPageButtons());\n }\n return contain;\n }\n\n static getOperationalCostsSection(printVersion?: boolean) {\n let opCosts = TCO.getEl({\n className: \"op-costs gray-card\"\n });\n opCosts.appendChild(TCO.getEl({\n tag: 'button',\n innerHTML: Labels.get(\"resetSectionDefaults\"),\n className: 'reset',\n onclick: () => {\n this.resetOpCosts()\n }\n }));\n opCosts.appendChild(TCO.getDottedLine({\n label: Labels.get(\"operationalCosts\"),\n value: TCO.formatNum(Calc.getTotalOperationalCosts(TCO.getEditInfo())),\n description: `<p>${Labels.get(\"operationalCostsDescription\")}</p>`\n }));\n opCosts.appendChild(this.getInfrastructureSection(printVersion));\n opCosts.appendChild(this.getITLaborSection(printVersion));\n opCosts.appendChild(this.getPlannedDowntimeSection(printVersion));\n return opCosts;\n }\n\n static getInfrastructureSection(printVersion?: boolean) {\n let infraSection = TCO.getEl({\n className: 'section-infrastructure nest-level-1',\n htmlNode: TCO.getDottedLine({\n isPrintVersion: printVersion,\n label: Labels.get(\"infrastructure\"),\n tag: 'h4',\n tooltip: Labels.get(\"infrastructureTooltip\"),\n tooltipNum: 5,\n value: TCO.formatNum(Calc.getTotalInfrastructureCost(TCO.getEditInfo())),\n description: `<p>${Labels.get(\"infrastructureDescription\")}</p>`\n })\n });\n\n /* product infrastructure costs */\n let editableInfrastructures = TCO.getEl({\n className: 'section-edit-products nest-level-2 ',\n innerHTML: `\n <div class=\"labels-values line-item\">\n <div class=\"labels-side\"><h5 class=\"eyebrows\">${Labels.get(\"products\")}</h5></div>\n <div class=\"values-side\"><h5 class=\"eyebrows\">${Labels.get(\"annualExpenses\")}</h5></div>\n </div>\n `\n });\n\n TCO.getEditInfo(\"products\").forEach((_product: any, productIndex: number) => {\n editableInfrastructures.appendChild(this.getProductEditLine(productIndex, printVersion));\n });\n infraSection.appendChild(editableInfrastructures);\n\n return infraSection;\n }\n\n static getProductEditLine(productIndex: number, printVersion?: boolean) {\n let allProducts = TCO.getEditInfo(\"products\");\n let selectedProduct = allProducts[productIndex];\n let productEditLine = TCO.getEl({ className: \"product-edit-line\" });\n productEditLine.innerHTML = `\n <div class=\"labels-values\">\n <div class=\"labels-side\"><h4>${selectedProduct.productTitle}</h4></div>\n <div class=\"values-side\"><p class=\"bold\">${TCO.formatNum(Calc.getTotalInfraCostPerProduct(TCO.getEditInfo(), productIndex))} ${Labels.get(\"aYear\")}</p></div>\n </div>\n `;\n\n selectedProduct.instances.forEach((_instance: any, instanceIndex: number) => {\n let productUsers = TCO.getProducts(selectedProduct.chosenProductKey).labels.users\n productEditLine.appendChild(TCO.getLineItem({\n isPrintVersion: printVersion,\n label: `<span class=\"bold-inst\">${Labels.get(\"instanceLabel\")} ${instanceIndex + 1}</span> ${selectedProduct.instances[instanceIndex].users} ${productUsers}`,\n placeholder: TCO.formatNum(Calc.getProductInstanceInfrastructureCost(TCO.getEditInfo(), productIndex, instanceIndex), true),\n value: selectedProduct.instances[instanceIndex].infra ? TCO.formatNum(selectedProduct.instances[instanceIndex].infra, true) : '',\n sideLabel: TCO.currency(),\n onchange: (e) => {\n selectedProduct.instances[instanceIndex].infra = TCO.sanitizedNum(e.target.value);\n TCO.setEditInfo(\"products\", allProducts);\n TCO.renderEditScreen();\n }\n }));\n })\n return productEditLine;\n }\n\n static getITLaborSection(printVersion?: boolean) {\n let itLabor = TCO.getEl({\n className: 'section-it-labor nest-level-1',\n htmlNode: TCO.getDottedLine({\n isPrintVersion: printVersion,\n label: Labels.get(\"itLabor\"),\n tag: 'h4',\n tooltip: Labels.get(\"itLaborTooltip\"),\n tooltipNum: 6,\n value: TCO.formatNum(Calc.getTotalITLaborCost(TCO.getEditInfo())),\n description: `<p>${Labels.get(\"itLaborDescription\")}</p>`\n })\n });\n\n /* infrastructure headers */\n let editableInfrastructures = TCO.getEl({\n className: 'section-admin-lines nest-level-2 ',\n innerHTML: `\n <div class=\"line-item labels-values\">\n <div class=\"labels-side\"><h5 class=\"eyebrows\">${Labels.get(\"factors\")}</h5></div>\n <div class=\"values-side\"><h5 class=\"eyebrows\">${Labels.get(\"multipliers\")}</h5></div>\n </div>\n `\n });\n itLabor.appendChild(editableInfrastructures);\n\n /* Number of administrators */\n editableInfrastructures.appendChild(TCO.getLineItem({\n isPrintVersion: printVersion,\n label: Labels.get(\"numOfAdministrators\"),\n placeholder: TCO.formatNum(Calc.getNumberOfAdmins(TCO.getEditInfo()), true),\n value: TCO.getEditInfo(\"numberOfAdmins\") ? TCO.formatNum(TCO.getEditInfo(\"numberOfAdmins\"), true) : '',\n onchange: (e) => {\n TCO.setEditInfo(\"numberOfAdmins\", TCO.sanitizedNum(e.target.value));\n TCO.renderEditScreen();\n }\n }));\n\n /* Median annual salary, admins */\n editableInfrastructures.appendChild(TCO.getLineItem({\n isPrintVersion: printVersion,\n label: Labels.get(\"medianAnnualSalary\"),\n placeholder: TCO.formatNum(Calc.getAdminSalary(), true),\n value: TCO.getEditInfo(\"adminSalary\") ? TCO.formatNum(TCO.getEditInfo(\"adminSalary\"), true) : '',\n sideLabel: TCO.currency(),\n onchange: (e) => {\n TCO.setEditInfo(\"adminSalary\", TCO.sanitizedNum(e.target.value));\n TCO.renderEditScreen();\n }\n }));\n\n /* Overhead (remove for contractors) */\n editableInfrastructures.appendChild(TCO.getLineItem({\n label: Labels.get(\"overhead\"),\n type: 'checkbox',\n id: 'overhead-toggle',\n checked: TCO.getEditInfo(\"overhead\"),\n onchange: (e) => {\n TCO.setEditInfo(\"overhead\", e.target.checked);\n TCO.renderEditScreen();\n }\n }));\n\n return itLabor;\n }\n\n\n static getPlannedDowntimeSection(printVersion?: boolean) {\n let plannedDowntimeSection = TCO.getEl({ className: 'nest-level-1 section-planned-downtime' });\n plannedDowntimeSection.appendChild(TCO.getDottedLine({\n isPrintVersion: printVersion,\n label: Labels.get(\"plannedDowntime\"),\n tag: 'h4',\n tooltip: Labels.get(\"plannedDowntimeEditTooltip\"),\n tooltipNum: 7,\n id: 'planned-downtime-toggle',\n onchange: (e) => {\n TCO.track(\"Planned downtime\");\n TCO.setEditInfo(\"plannedDowntime\", e.target.checked);\n TCO.renderEditScreen()\n },\n checked: TCO.getEditInfo(\"plannedDowntime\"),\n value: TCO.formatNum(Calc.getPlannedDowntimeCosts(TCO.getEditInfo())),\n description: `<p> ${TCO.getEditInfo(\"plannedDowntime\") ? Labels.get(\"plannedDowntimeDescriptionOn\") : Labels.get(\"plannedDowntimeDescriptionOff\")}`\n }));\n\n\n\n if (TCO.getEditInfo().plannedDowntime) {\n let downTimeItems = TCO.getEl({\n className: 'nest-level-2', innerHTML: `\n <div class=\"line-item labels-values\">\n <div class=\"labels-side\"><h5 class=\"eyebrows\">${Labels.get(\"factors\")}</h5></div>\n <div class=\"values-side\"><h5 class=\"eyebrows\">${Labels.get(\"multipliers\")}</h5></div>\n </div>\n `});\n\n /* user count from largest instance */\n downTimeItems.appendChild(TCO.getLineItem({\n isPrintVersion: printVersion,\n label: Labels.get(\"userCount\"),\n placeholder: TCO.formatNum(Calc.getHighestUsersAmongInstances(TCO.getEditInfo()), true),\n value: TCO.getEditInfo(\"maxUserCount\") ? TCO.formatNum(TCO.getEditInfo(\"maxUserCount\"), true) : '',\n sideLabel: Labels.get(\"users\"),\n onchange: (e) => {\n TCO.setEditInfo(\"maxUserCount\", TCO.sanitizedNum(e.target.value));\n TCO.renderEditScreen();\n }\n }));\n /* median hourly wage */\n downTimeItems.appendChild(TCO.getLineItem({\n isPrintVersion: printVersion,\n label: Labels.get(\"medianHourly\"),\n placeholder: TCO.formatNum(Calc.getMedianHourly(), true, 2),\n value: TCO.getEditInfo(\"medianHourly\") ? TCO.formatNum(TCO.getEditInfo(\"medianHourly\"), true, 2) : '',\n sideLabel: TCO.currency(),\n onchange: (e) => {\n TCO.setEditInfo(\"medianHourly\", TCO.sanitizedNum(e.target.value, true));\n TCO.renderEditScreen();\n }\n }));\n /* downtime per udpate (hours) */\n downTimeItems.appendChild(TCO.getLineItem({\n isPrintVersion: printVersion,\n label: Labels.get(\"downtimePerUpdate\"),\n placeholder: TCO.formatNum(Calc.getDowntimePerUpdate(), true),\n value: TCO.getEditInfo(\"downtimePerUpdate\") ? TCO.formatNum(TCO.getEditInfo(\"downtimePerUpdate\"), true) : '',\n sideLabel: Labels.get(\"hours\"),\n onchange: (e) => {\n TCO.setEditInfo(\"downtimePerUpdate\", TCO.sanitizedNum(e.target.value));\n TCO.renderEditScreen();\n }\n }));\n /* updates per year */\n downTimeItems.appendChild(TCO.getLineItem({\n isPrintVersion: printVersion,\n label: Labels.get(\"updatesPerYear\"),\n placeholder: TCO.formatNum(Calc.getUpdatesPerYear(), true),\n value: TCO.getEditInfo(\"updatesPerYear\") ? TCO.formatNum(TCO.getEditInfo(\"updatesPerYear\"), true) : '',\n sideLabel: Labels.get(\"updates\"),\n onchange: (e) => {\n TCO.setEditInfo(\"updatesPerYear\", TCO.sanitizedNum(e.target.value));\n TCO.renderEditScreen();\n }\n }));\n plannedDowntimeSection.appendChild(downTimeItems);\n }\n\n return plannedDowntimeSection\n }\n\n static resetOpCosts() {\n let resetProducts = TCO.getEditInfo(\"products\")\n resetProducts.forEach((product, productInstance) => {\n product.instances.forEach((instance, instanceIndex) => {\n delete resetProducts[productInstance].instances[instanceIndex].infra;\n })\n })\n TCO.setEditInfo(\"products\", resetProducts);\n TCO.setEditInfo(\"numberOfAdmins\", null);\n TCO.setEditInfo(\"adminSalary\", null);\n TCO.setEditInfo(\"overhead\", true);\n TCO.setEditInfo(\"plannedDowntime\", false);\n TCO.setEditInfo(\"maxUserCount\", false);\n TCO.setEditInfo(\"medianHourly\", false);\n TCO.setEditInfo(\"downtimePerUpdate\", false);\n TCO.setEditInfo(\"updatesPerYear\", false);\n TCO.renderEditScreen();\n }\n\n static resetAnnualMaintenance() {\n let resetProducts = TCO.getEditInfo(\"products\")\n resetProducts.forEach((product, productInstance) => {\n delete resetProducts[productInstance].customPrice;\n });\n TCO.setEditInfo(\"products\", resetProducts);\n TCO.renderEditScreen();\n }\n\n static getAnnualMaintenanceSection(printVersion) {\n let annualMaintenance = TCO.getEl({\n className: \"maintenance-costs gray-card\"\n })\n annualMaintenance.appendChild(TCO.getEl({\n tag: 'button',\n innerHTML: Labels.get(\"resetSectionDefaults\"),\n className: 'reset',\n onclick: () => {\n this.resetAnnualMaintenance()\n }\n }));\n\n annualMaintenance.appendChild(TCO.getDottedLine({\n label: Labels.get(\"annualMaintenance\"),\n value: TCO.formatNum(Calc.getTotalAnnualMaintenance(TCO.getEditInfo())),\n description: `<p>${Labels.get(\"annualMaintenanceDescription\")} </p>`\n }));\n let productsMaintenance = TCO.getEl({\n className: 'nest-level-1 maintenance-products',\n innerHTML: `\n <div class=\"line-item labels-values\">\n <div class=\"labels-side\"><h5 class=\"eyebrows\">${Labels.get(\"products\")}</h5></div>\n <div class=\"values-side\"><h5 class=\"eyebrows\">${Labels.get(\"annualRenewalPrice\")}</h5></div>\n </div>\n `\n })\n TCO.getEditInfo(\"products\").forEach((product) => {\n productsMaintenance.appendChild(TCO.getLineItem({\n isPrintVersion: printVersion,\n label: product.productTitle,\n placeholder: TCO.formatNum(product.price, true),\n value: product.customPrice ? TCO.formatNum(product.customPrice, true) : '',\n sideLabel: TCO.currency(),\n onchange: (e) => {\n product.customPrice = TCO.sanitizedNum(e.target.value);\n TCO.renderEditScreen();\n }\n }))\n });\n\n annualMaintenance.appendChild(productsMaintenance);\n return annualMaintenance;\n }\n\n static getPageButtons() {\n let buttonContainer = TCO.getEl({ className: 'container-fluid bottom-buttons' });\n buttonContainer.appendChild(TCO.getEl({\n tag: 'button',\n className: 'button button--two button--regular button--secondary',\n innerText: Labels.get(\"back\"),\n onclick: () => {\n TCO.track(\"Back\", \"Cancel edits\", TCO.getEditInfo());\n TCO.renderResultsScreen();\n window.scrollTo(0, 400);\n }\n }));\n buttonContainer.appendChild(TCO.getEl({\n tag: 'button',\n className: 'button button--two button--regular button--primary',\n innerText: Labels.get(\"updateResults\"),\n onclick: () => {\n TCO.track(\"Update results\", \"Recalculate\", TCO.getEditInfo());\n TCO.saveEditInfo();\n TCO.renderResultsScreen();\n window.scrollTo(0, 400);\n }\n }));\n\n return buttonContainer;\n }\n}","import TCO from \"./tco-build\";\nimport Labels from \"./tco-labels\";\n\nlet activeDialogProduct = 0;\n\nexport default class TCOStart {\n static getStartPage(withError?: boolean, withDialog?: boolean) {\n let contain = TCO.getEl({ className: 'container-fluid start-screen' });\n let row = TCO.getEl({ className: 'row' });\n contain.appendChild(row);\n row.appendChild(TCO.getEl({\n tag: 'a',\n className: 'admin-notice faux-link',\n href: Labels.get(\"linkComparator\"),\n target: \"_blank\",\n innerHTML: Labels.get(\"adminNotice\"),\n onclick: () => {\n TCO.track(\"here\", \"Comparator link\");\n }\n }))\n row.appendChild(this.getIntro());\n let numOfProductsAvailable = Object.keys(TCO.getProducts()).filter(product => { return product.indexOf('access') == -1 }).length;\n TCO.getInfo(\"products\").forEach((enteredProduct, productIndex) => {\n row.appendChild(this.getProductLineItem(productIndex, withError));\n });\n if (TCO.getInfo(\"products\").length < numOfProductsAvailable) {\n row.appendChild(this.getProductLineItemAdder());\n }\n row.appendChild(this.getCostEstimatorButton());\n if (withDialog) {\n contain.appendChild(this.getDialogWindow())\n }\n\n return contain;\n }\n\n static getIntro() {\n return TCO.getEl({\n className: 'column text-center',\n innerHTML: `\n <h3>${Labels.get(\"heading\")}</h3>\n <p>${Labels.get(\"subHeading\")}</p>`\n });\n }\n\n static syncDropdownProduct(productIndex: number, option) {\n let theseProducts = TCO.getInfo(\"products\");\n theseProducts[productIndex].chosenProductKey = option.value;\n theseProducts[productIndex].productTitle = option.selectedOptions ? option.selectedOptions[0].dataset.title : option.dataset.title;\n theseProducts[productIndex].deployment = option.selectedOptions ? option.selectedOptions[0].dataset.deployment : option.dataset.title;\n\n TCO.setInfo(\"products\", theseProducts);\n }\n\n static getProductsDropdown(productIndex: number) {\n let thisProductLineItem = TCO.getInfo(\"products\")[productIndex];\n let firstAvailableProduct = thisProductLineItem.chosenProductKey;\n let buttonsContainer = TCO.getEl({ className: 'buttons-container' })\n let allEl = TCO.getEl();\n let selectEl = TCO.getEl({ tag: 'select' });\n for (var product in TCO.getProducts()) {\n let optionProduct = TCO.getProducts(product);\n let optionString = ``;\n let isActiveProduct = thisProductLineItem.chosenProductKey == product;\n let isDisabledProduct = TCO.getInfo(\"products\").map(prod => { return prod.chosenProductKey }).includes(product) && product != thisProductLineItem.chosenProductKey;\n\n if (product.indexOf('access') == -1) {\n optionString += `\n <option ${isActiveProduct ? 'selected' : ''} data-title=\"${optionProduct.productTitle}\" data-deployment=\"${optionProduct.deployment}\" value=\"${product}\" ${isDisabledProduct ? 'disabled' : ''}>\n ${optionProduct.productTitle} \n </option>`;\n selectEl.innerHTML += optionString;\n buttonsContainer.appendChild(TCO.getEl({\n tag: 'button',\n dataTitle: optionProduct.productTitle,\n dataDeployment: optionProduct.deployment,\n innerText: optionProduct.productTitleDropdown,\n className: `product-selector ${isDisabledProduct ? 'disabled' : (isActiveProduct ? 'active' : '')}`,\n dataTooltip: isDisabledProduct ? Labels.get(\"productDisabledTooltip\") : '',\n tabIndex: isDisabledProduct ? -1 : '',\n value: product,\n onclick: (e) => {\n if (!isDisabledProduct) {\n this.syncDropdownProduct(productIndex, e.target)\n TCO.renderStartScreen();\n TCO.track(e.target.value, \"Change product\");\n } else {\n e.target.classList.add('tooltip');\n }\n }\n }));\n\n if (firstAvailableProduct == '' && !thisProductLineItem.deployment && !isDisabledProduct) {\n firstAvailableProduct = product;\n }\n }\n }\n\n let firstAvailableProductObject = TCO.getProducts(firstAvailableProduct);\n\n let fakeSelectEl = TCO.getEl({\n tag: 'button',\n className: 'fake-select hidden',\n dataTitle: firstAvailableProductObject.productTitle,\n dataDeployment: firstAvailableProductObject.productTitle,\n value: firstAvailableProductObject.productTitle,\n innerText: firstAvailableProductObject.productTitle,\n onmousedown: (e) => {\n e.preventDefault();\n let elsContainer = e.target.nextElementSibling;\n elsContainer.style.display = (elsContainer.style.display == 'block' ? 'none' : 'block');\n },\n onfocus: (e) => {\n e.target.nextElementSibling.style.display = 'block';\n }\n });\n\n this.syncDropdownProduct(productIndex, selectEl);\n\n allEl.appendChild(selectEl);\n allEl.appendChild(fakeSelectEl);\n allEl.appendChild(buttonsContainer);\n return allEl;\n }\n\n static getProductInstances(productIndex: number, withError?: boolean) {\n let thisProductLineItem = TCO.getInfo(\"products\")[productIndex];\n let thisProduct = TCO.getInfo(\"products\")[productIndex];\n let productKey = thisProductLineItem.chosenProductKey;\n let productInfo = TCO.getProducts(productKey);\n let ulElement = TCO.getEl({\n tag: 'ul',\n innerHTML: `<p>${productInfo.labels.userTiers}</p>`\n });\n thisProductLineItem.instances.forEach((_instance: any, instanceIndex: number) => {\n let thisProductInstance = thisProduct.instances[instanceIndex];\n let liEl = TCO.getEl({\n tag: \"li\",\n innerHTML: `<p class=\"bold\">${Labels.get(\"instanceLabel\")} ${instanceIndex + 1} - ${productInfo.labels.howManyUsers}</p>`\n });\n\n let textInput = TCO.getEl({\n tag: 'input',\n type: 'text',\n className: withError && TCO.isNotValidNumOfUsers(thisProductInstance.users, productKey) ? 'error' : '',\n autocomplete: 'off',\n id: `instance${productIndex}${instanceIndex}`,\n value: thisProductInstance.users > 0 ? thisProductInstance.users : \"\",\n onkeyup: (e) => {\n window.focused = `instance${productIndex}${instanceIndex}`;\n thisProductInstance.users = TCO.sanitizedNum(e.target.value);\n TCO.renderStartScreen();\n }\n })\n liEl.appendChild(textInput);\n if (withError && TCO.isNotValidNumOfUsers(thisProductInstance.users, productKey)) {\n liEl.appendChild(TCO.getEl({\n className: 'error',\n innerHTML: TCO.errorSVG(),\n htmlNode: TCO.getEl({\n tag: 'a',\n href: thisProductInstance.users > TCO.getMaxNumUsers(productKey) ? Labels.get(\"linkContact\") : '',\n target: \"_blank\",\n className: 'faux-link',\n innerHTML: thisProductInstance.users > TCO.getMaxNumUsers(productKey) ? Labels.get(\"errorTooHigh\").replace('{{xxx}}', TCO.getMaxNumUsers(productKey)).replace('{{yyy}}', productInfo.labels.users) : Labels.get(\"errorBlank\"),\n onclick: () => {\n if (thisProductInstance.users > TCO.getMaxNumUsers(productKey)) {\n TCO.track(\"Contact us\");\n }\n }\n })\n }));\n }\n if (thisProductLineItem.instances.length > 1) {\n liEl.appendChild(this.getProductInstanceRemover(productIndex, instanceIndex));\n }\n ulElement.appendChild(liEl);\n });\n if (thisProductLineItem.instances.length < 5) {\n ulElement.appendChild(this.getProductInstanceAdder(productIndex));\n } else {\n ulElement.appendChild(TCO.getEl({\n tag: \"li\",\n className: \"contact-for-more\",\n htmlNode: TCO.getEl({\n tag: \"a\",\n href: Labels.get(\"linkContact\"),\n className: \"faux-link\",\n target: \"_blank\",\n innerHTML: Labels.get(\"contactForMoreInstances\"),\n onclick: () => {\n TCO.track(\"Contact us\")\n }\n })\n }\n ));\n }\n return ulElement;\n }\n\n static getProductInstanceRemover(productIndex: number, instanceIndex: number) {\n return TCO.getEl({\n tag: \"button\",\n title: Labels.get(\"remove\"),\n className: \"remove-instance\",\n innerHTML: \"✕\",\n onclick: () => {\n let theseProducts = TCO.getInfo(\"products\");\n theseProducts[productIndex].instances.splice(instanceIndex, 1)\n TCO.setInfo(\"products\", theseProducts);\n TCO.renderStartScreen();\n TCO.track(\"Remove product instance\");\n }\n })\n }\n\n static getProductInstanceAdder(productIndex: number) {\n let theseProducts = TCO.getInfo(\"products\");\n let thisProduct = theseProducts[productIndex];\n let isDisabled = thisProduct.instances[thisProduct.instances.length - 1].users < 1;\n return TCO.getEl({\n tag: \"button\",\n className: `add-instance ${isDisabled ? 'inactive' : ''}`,\n innerHTML: `<span class=\"plus\">+</span> ${Labels.get(\"addAnotherInstance\")}<span class=\"tooltip\" data-tooltip=\"${Labels.get(\"instanceTooltip\").replace(/<br>/g, '\\n')}\"></span>`,\n onclick: () => {\n if (!isDisabled) {\n thisProduct.instances.push({ users: 0 });\n TCO.setInfo(\"products\", theseProducts);\n TCO.renderStartScreen();\n TCO.track(\"Add product\");\n }\n }\n });\n }\n\n static getProductLineItem(productIndex: number, withError?: boolean) {\n let productKey = TCO.getInfo(\"products\")[productIndex].chosenProductKey ? TCO.getInfo(\"products\")[productIndex].chosenProductKey : [Object.keys(TCO.getProducts())[0]];\n let productInfo = TCO.getProducts(productKey);\n let productLineItem = TCO.getEl({ className: \"product-selected gray-card\", onclick: (e) => { if (e.target.querySelector('.buttons-container')) { e.target.querySelector('.buttons-container').style.display = 'none'; } } });\n let inner = TCO.getEl({ className: \"product-inner\" });\n productLineItem.appendChild(inner);\n\n if (TCO.getInfo(\"products\").length > 1) {\n productLineItem.appendChild(this.getProductLineItemRemover(productIndex));\n }\n inner.appendChild(TCO.getEl({ tag: 'h3', innerHTML: `${Labels.get(\"productAndDeployment\")} <span class=\"tooltip\" data-tooltip=\"${Labels.get(\"productTooltip\").replace(/<br>/g, '\\n')}\"></span>` }));\n inner.appendChild(this.getProductsDropdown(productIndex));\n inner.appendChild(TCO.getEl({ tag: 'h3', innerHTML: productInfo.labels.instancesAndUsers }));\n inner.appendChild(this.getProductInstances(productIndex, withError));\n return productLineItem;\n }\n\n static getProductLineItemAdder() {\n let container = TCO.getEl({ className: 'add-more-products' });\n container.appendChild(TCO.getEl({\n tag: \"button\",\n className: \"add-product-line-item\",\n innerHTML: `<span>+</span> ${Labels.get(\"addAnotherProduct\")}`,\n onclick: () => {\n let allProducts = TCO.getInfo(\"products\");\n allProducts.push({ chosenProductKey: \"\", instances: [{ users: 0 }] });\n TCO.setInfo(\"products\", allProducts);\n TCO.renderStartScreen();\n TCO.track(\"Add another product\");\n }\n }));\n return container;\n }\n\n static getCostEstimatorButton() {\n let container = TCO.getEl({ className: 'estimate-costs' });\n container.appendChild(TCO.getEl({\n tag: \"button\",\n className: \"button button--two button--regular button-primary\",\n innerHTML: Labels.get(\"estimate\"),\n onclick: () => {\n if (TCO.isValidEntry()) {\n TCO.renderResultsScreen();\n TCO.scrollToBeginning();\n TCO.track(\"Estimate\", \"invalid entry\");\n } else {\n TCO.renderStartScreen(true);\n TCO.track(\"Estimate\");\n }\n }\n }));\n return container;\n }\n\n static getProductLineItemRemover(productIndex: number) {\n return TCO.getEl({\n tag: 'button',\n className: 'delete-product-line-item',\n innerHTML: `<span>✕</span> ${Labels.get(\"remove\")}`,\n onclick: () => {\n activeDialogProduct = productIndex;\n TCO.renderStartScreen(false, true);\n TCO.track(\"Remove product\");\n }\n });\n }\n\n static getDialogWindow() {\n let outer = TCO.getEl({ className: 'outer-dialog' });\n let inner = TCO.getEl({\n className: 'inner-dialog',\n innerHTML: `\n <h3>${Labels.get(\"removeProductHeadline\")}</h3>\n <p>${Labels.get(\"removeProductDescription\")}</p>\n `\n });\n inner.appendChild(TCO.getEl({\n innerText: Labels.get(\"confirm\"),\n tag: 'button',\n className: \"button button--one button--regular button--primary\",\n onclick: () => {\n let allProducts = TCO.getInfo(\"products\");\n allProducts.splice(activeDialogProduct, 1);\n TCO.setInfo(\"products\", allProducts);\n TCO.renderStartScreen();\n TCO.track(\"Confirm\", \"Confirmed remove product\");\n }\n }));\n inner.appendChild(TCO.getEl({\n innerText: Labels.get(\"cancel\"),\n tag: 'button',\n className: \"button button--one button--regular button--secondary\",\n onclick: () => {\n TCO.renderStartScreen();\n TCO.track(\"Cancel\", \"Cancelled remove product\");\n }\n }));\n\n outer.appendChild(inner);\n\n return outer;\n }\n}\n","import TCO from \"./tco-build\";\nimport TCOEdit from \"./tco-screen-edit\";\nimport Calc from \"./tco-calc\";\nimport Labels from \"./tco-labels\";\n\nlet yMax = 0;\n\nexport default class TCOResults {\n static getResultsPage() {\n /* calculate prices */\n\n TCO.getInfo(\"products\").forEach((product) => {\n product.instances.forEach((instance) => {\n instance.price =\n TCO.getContentfulPricing(\n product.chosenProductKey,\n product.deployment,\n instance.users\n ) * (product.deployment == \"server\" ? 0.5 : 1);\n instance.cloudStandard = TCO.getContentfulPricing(\n product.chosenProductKey,\n \"cloudStandard\",\n instance.users\n );\n instance.cloudPremium = TCO.getContentfulPricing(\n product.chosenProductKey,\n \"cloudPremium\",\n instance.users\n );\n });\n product.price = product.instances.reduce((sum, instance) => {\n return sum + instance.price;\n }, 0);\n product.cloudStandard = product.instances.reduce((sum, instance) => {\n return sum + instance.cloudStandard;\n }, 0);\n product.cloudPremium = product.instances.reduce((sum, instance) => {\n return sum + instance.cloudPremium;\n }, 0);\n });\n TCO.setInfo(\n \"accessPrice\",\n TCO.getContentfulPricing(\n \"atlassian_access\",\n \"cloud\",\n Calc.getHighestUsersAmongInstances(TCO.getInfo())\n )\n );\n\n yMax = Math.max(\n Calc.getTotalSelfManagedCosts(TCO.getInfo()),\n this.getCloudTotal()\n );\n\n let contain = TCO.getEl({ className: \"result-screen\" });\n contain.appendChild(this.getGraph());\n contain.appendChild(this.getComparison());\n contain.appendChild(TCO.getEl({ innerHTML: TCO.getResultsContent() }));\n contain.appendChild(this.getResultFooter());\n\n return contain;\n }\n\n static getGraph() {\n let subHeadline = \"\";\n if (Calc.getTotalSelfManagedCosts(TCO.getInfo()) > this.getCloudTotal()) {\n let cost = TCO.formatNum(Calc.getTotalSelfManagedCosts(TCO.getInfo()));\n subHeadline = `<h3>${Labels.get(\"resultSubheadSavings\").replace(\n \"{{xxx}}\",\n cost\n )}</h3>`;\n }\n let graph = TCO.getEl({\n className: \"graph-contain container-fluid xs-comfortable-top\",\n innerHTML: `\n <div class=\"row flex-container\">\n <div class=\"headline column-lg-4 column-md-12\">\n ${this.getHeadline()}\n </div>\n <div class=\"graph column-lg-8 column-md-12\">\n <div class=\"card-outer\">\n <div class=\"card\">\n <div class=\"x-axis x1 labels\" style=\"height: ${\n (Calc.getTotalSelfManagedCosts(TCO.getInfo()) / yMax) * 100\n }%;\">\n <div class=\"op-costs\" style=\"height: ${\n (Calc.getTotalOperationalCosts(TCO.getInfo()) /\n Calc.getTotalSelfManagedCosts(TCO.getInfo())) *\n 100\n }%;\">\n ${Labels.get(\"operationalCosts\")}\n </div>\n <div class=\"annual-maintenance\" style=\"height: ${\n (Calc.getTotalAnnualMaintenance(TCO.getInfo()) /\n Calc.getTotalSelfManagedCosts(TCO.getInfo())) *\n 100\n }%;\">\n ${Labels.get(\"annualMaintenanceLicenses\")}\n </div>\n </div>\n <div class=\"x-axis x2 rectangles\" style=\"height: ${\n (Calc.getTotalSelfManagedCosts(TCO.getInfo()) / yMax) * 100\n }%;\">\n <h4>${Labels.get(\"selfManaged\")}</h4>\n\n <div class=\"y100\" style=\"height: ${\n (Calc.getTotalOperationalCosts(TCO.getInfo()) /\n Calc.getTotalSelfManagedCosts(TCO.getInfo())) *\n 100\n }%;\">\n <h5>${TCO.formatNum(\n Calc.getTotalSelfManagedCosts(TCO.getInfo())\n )}</h5>\n </div>\n <div class=\"y200\" style=\"height: ${\n (Calc.getTotalAnnualMaintenance(TCO.getInfo()) /\n Calc.getTotalSelfManagedCosts(TCO.getInfo())) *\n 100\n }%;\"></div>\n\n </div>\n <div class=\"x-axis x3 rectangles\" style=\"height: 100%;\">\n <h4>${Labels.get(\"cloud\")}</h4>\n\n <div class=\"t300\" style=\"height: ${\n (this.getCloudTotal() / yMax) * 100\n }%;\">\n <h5>${TCO.formatNum(this.getCloudTotal())}</h5>\n\n </div>\n </div>\n <div class=\"x-axis x4\" style=\"height: 100%;\">\n <div style=\"height: ${(this.getCloudTotal() / yMax) * 100}%;\">\n ${Labels.get(\"atlassianCloudSubscriptionService\")}\n </div>\n </div>\n </div>\n </div>\n ${subHeadline}\n </div>\n </div>\n `,\n });\n return graph;\n }\n\n static getCloudTotal() {\n return Calc.getTotalCloudCosts(TCO.getInfo(), TCO.getProducts());\n }\n\n static getHeadline() {\n let tagline;\n let costs;\n if (Calc.getTotalSelfManagedCosts(TCO.getInfo()) < this.getCloudTotal()) {\n costs = TCO.formatNum(Calc.getTotalSelfManagedCosts(TCO.getInfo()));\n tagline = `<img src=\"${Labels.get(\"imageNoSavings\")}\"><h2>${Labels.get(\n \"resultHeadlineNoSavings\"\n )}</h2>`;\n } else {\n costs = TCO.formatNum(\n Calc.getTotalSelfManagedCosts(TCO.getInfo()) - this.getCloudTotal()\n );\n tagline = `<img src=\"${Labels.get(\"imageSavings\")}\"><h1>${Labels.get(\n \"resultHeadlineSavings\"\n )}</h1>`;\n }\n return tagline.replace(\"{{xxx}}\", costs);\n }\n\n static getComparison(print) {\n let contain = TCO.getEl({\n className: print ? \"n0\" : \"b50\",\n innerHTML: print\n ? \"\"\n : `<svg class=\"curve-container__curve n0\" viewBox=\"10 -20 1870 210\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <path fill=\"#DEEBFF\" d=\"M977.9,76.2 C475.2,-17.4 0.2,132.5 0.2,132.5 L0.2,275.5 L1891.3,275.5 L1891.3,0.7 C1891.3,0.7 1480.6,169.8 977.9,76.2 Z\"></path> </svg>`,\n });\n let innerRow = TCO.getEl({ className: \"row flex-container\" });\n contain.appendChild(innerRow);\n innerRow.appendChild(this.getSelfManagedSection(print));\n innerRow.appendChild(this.getCloudSection(print));\n if (!print) {\n innerRow.appendChild(\n TCO.getEl({\n tag: \"button\",\n innerHTML: `⟲ ${Labels.get(\"startOver\")}`,\n className:\n \"start-over button button--one button--regular button--secondary\",\n onclick: () => {\n TCO.resetInfo();\n TCO.renderStartScreen();\n TCO.scrollToBeginning();\n TCO.track(\"Start over\");\n },\n })\n );\n }\n\n return contain;\n }\n\n static getSelfManagedSection(print) {\n let style = print ? this.getPrintStyle() : \"\";\n let self = TCO.getEl({\n className: \"half self-managed\",\n style: style,\n innerHTML: `\n <h2>${Labels.get(\"selfManagedCosts\")}</h2>\n <p class=\"self-managed-description\">${\n print ? \"\" : Labels.get(\"selfManagedDescription\")\n } </p>\n `,\n });\n self.appendChild(\n TCO.getDottedLine({\n label: Labels.get(\"operationalCosts\"),\n value: TCO.formatNum(Calc.getTotalOperationalCosts(TCO.getInfo())),\n })\n );\n\n let selfOpCosts = TCO.getEl({ className: \"nest-level-3\" });\n\n /* infrastructure costs */\n selfOpCosts.appendChild(\n TCO.getDottedLine({\n tag: \"p\",\n label: Labels.get(\"infrastructure\"),\n value: TCO.formatNum(Calc.getTotalInfrastructureCost(TCO.getInfo())),\n })\n );\n\n /* IT labor costs */\n selfOpCosts.appendChild(\n TCO.getDottedLine({\n tag: \"p\",\n label: Labels.get(\"itLabor\"),\n value: TCO.formatNum(Calc.getTotalITLaborCost(TCO.getInfo())),\n })\n );\n\n /* planned downtime costs */\n selfOpCosts.appendChild(\n TCO.getDottedLine({\n isPrintVersion: print,\n tag: \"p\",\n label: Labels.get(\"plannedDowntime\"),\n tooltip: Labels.get(\"plannedDowntimeTooltip\"),\n tooltipNum: 1,\n id: \"planned-downtime-toggle\",\n onchange: (e) => {\n TCO.track(\"Planned downtime\");\n TCO.setInfo(\"plannedDowntime\", e.target.checked);\n TCO.renderResultsScreen();\n },\n checked: TCO.getInfo(\"plannedDowntime\"),\n value: TCO.formatNum(Calc.getPlannedDowntimeCosts(TCO.getInfo())),\n })\n );\n self.appendChild(selfOpCosts);\n\n self.appendChild(\n TCO.getDottedLine({\n label: Labels.get(\"annualMaintenance\"),\n value: TCO.formatNum(Calc.getTotalAnnualMaintenance(TCO.getInfo())),\n })\n );\n let selfMaintenance = TCO.getEl({ className: \"nest-level-3\" });\n\n /* product maintenance costs */\n TCO.getInfo(\"products\").forEach((product) => {\n selfMaintenance.appendChild(\n TCO.getDottedLine({\n tag: \"p\",\n label: product.productTitle,\n value: product.customPrice\n ? product.customPrice\n : TCO.formatNum(product.price),\n })\n );\n });\n selfMaintenance.appendChild(\n TCO.getDottedLine({\n tag: \"p\",\n label: \" \",\n value: \" \",\n className: \"transp\",\n })\n );\n self.appendChild(selfMaintenance);\n if (Calc.getHighestUsersAmongInstances(TCO.getInfo()) > 1000) {\n /* spacer for loyalty discount */\n self.appendChild(\n TCO.getDottedLine({\n label: \" \",\n value: \" \",\n className: \"transp\",\n })\n );\n }\n\n /* self managed costs */\n self.appendChild(\n TCO.getDottedLine({\n className: \"total\",\n tag: \"h2\",\n label: Labels.get(\"total\"),\n value: TCO.formatNum(Calc.getTotalSelfManagedCosts(TCO.getInfo())),\n })\n );\n self.appendChild(\n TCO.getEl({\n className: \"after-half\",\n innerHTML: `${Labels.get(\"curious\")} <br>`,\n htmlNode: TCO.getEl({\n tag: \"button\",\n className: \"component__link link-arrow\",\n innerHTML: Labels.get(\"editAssumptions\") + TCO.linkArrow(),\n onclick: () => {\n TCO.syncInfoToEditMode();\n TCO.renderEditScreen();\n TCO.track(\"Edit assumptions\");\n TCO.scrollToBeginning();\n },\n }),\n })\n );\n\n return self;\n }\n\n static getCloudSection(print) {\n let style = print ? this.getPrintStyle() : \"\";\n let cloud = TCO.getEl({\n className: \"half cloud\",\n style: style,\n innerHTML: `<h2>${Labels.get(\"cloudComparison\")}</h2>`,\n });\n let switcher = TCO.getEl({ className: \"switcher\" });\n switcher.appendChild(\n TCO.getEl({\n tag: \"button\",\n className: TCO.getInfo(\"edition\") == \"standard\" ? \"active\" : \"\",\n innerText: Labels.get(\"standard\"),\n onclick: () => {\n TCO.setInfo(\"edition\", \"standard\");\n TCO.renderResultsScreen();\n TCO.track(\"Standard edition\");\n },\n })\n );\n switcher.appendChild(\n TCO.getEl({\n tag: \"button\",\n className: TCO.getInfo(\"edition\") == \"premium\" ? \"active\" : \"\",\n innerText: Labels.get(\"premium\"),\n onclick: () => {\n TCO.setInfo(\"edition\", \"premium\");\n TCO.renderResultsScreen();\n TCO.track(\"Premium edition\");\n },\n })\n );\n switcher.appendChild(\n TCO.getEl({\n tag: \"span\",\n className: \"tooltip\",\n dataTooltip: Labels.get(\"editionTooltip\"),\n })\n );\n\n if (!print) {\n cloud.appendChild(switcher);\n }\n\n /* operational costs */\n cloud.appendChild(\n TCO.getDottedLine({\n label: Labels.get(\"operationalCosts\"),\n value: TCO.formatNum(0),\n })\n );\n\n let cloudOpCosts = TCO.getEl({ className: \"nest-level-3\" });\n cloudOpCosts.appendChild(\n TCO.getDottedLine({\n tag: \"p\",\n label: Labels.get(\"infrastructure\"),\n value: TCO.formatNum(0),\n })\n );\n cloudOpCosts.appendChild(\n TCO.getDottedLine({\n tag: \"p\",\n label: Labels.get(\"itLabor\"),\n value: TCO.formatNum(0),\n })\n );\n cloudOpCosts.appendChild(\n TCO.getDottedLine({\n tag: \"p\",\n label: Labels.get(\"plannedDowntime\"),\n value: TCO.formatNum(0),\n })\n );\n cloud.appendChild(cloudOpCosts);\n\n /* annual subscriptions */\n cloud.appendChild(\n TCO.getDottedLine({\n isPrintVersion: print,\n label: Labels.get(\"annualSubscriptions\"),\n tooltip: Labels.get(\"annualSubscriptionsTooltip\"),\n tooltipNum: 2,\n value: TCO.formatNum(\n Calc.getTotalAnnualCloudSubscription(TCO.getInfo(), TCO.getProducts())\n ),\n })\n );\n let annualSubscriptions = TCO.getEl({ className: \"nest-level-3\" });\n\n TCO.getInfo(\"products\").forEach((product) => {\n /* adjusted for missing premium prices */\n let cloudType =\n TCO.getInfo(\"edition\") == \"standard\" ? \"cloudStandard\" : \"cloudPremium\";\n let productInfo = TCO.getProducts(product.chosenProductKey);\n let productGenericTitle = productInfo.productTitleGeneric;\n let isAvailable = productInfo[cloudType].available;\n let numPrice = product[cloudType];\n let shownPrice = isAvailable\n ? TCO.formatNum(numPrice)\n : TCO.formatNum(product.cloudStandard);\n let suffix =\n TCO.getInfo(\"edition\") == \"premium\" && isAvailable\n ? Labels.get(\"premium\")\n : Labels.get(\"standard\");\n let tooltip = !isAvailable\n ? TCO.getEl({\n tag: \"span\",\n className: \"tooltip\",\n dataTooltip: Labels.get(\"priceUnavailable\"),\n }).outerHTML\n : \"\";\n annualSubscriptions.appendChild(\n TCO.getDottedLine({\n tag: \"p\",\n label: `${productGenericTitle} ${suffix} ${tooltip}`,\n value: shownPrice,\n })\n );\n });\n\n /* atlassian access */\n annualSubscriptions.appendChild(\n TCO.getDottedLine({\n isPrintVersion: print,\n tag: \"p\",\n label: \"Atlassian Access\",\n tooltip: Labels.get(\"atlassianAccessTooltip\"),\n tooltipNum: 3,\n id: \"atlassian-access-toggle\",\n onchange: (e) => {\n TCO.track(\"Atlassian Access\");\n TCO.setInfo(\"useAccess\", e.target.checked);\n TCO.renderResultsScreen();\n },\n checked: TCO.getInfo(\"useAccess\"),\n value: TCO.formatNum(\n TCO.getInfo(\"useAccess\") ? TCO.getInfo(\"accessPrice\") : 0\n ),\n })\n );\n\n cloud.appendChild(annualSubscriptions);\n\n cloud.appendChild(\n TCO.getDottedLine({\n className: \"total\",\n tag: \"h2\",\n label: Labels.get(\"total\"),\n value: TCO.formatNum(\n Calc.getTotalCloudCosts(TCO.getInfo(), TCO.getProducts())\n ),\n })\n );\n cloud.appendChild(\n TCO.getEl({\n className: \"after-half\",\n innerHTML: Labels.get(\"cloudDiscounts\"),\n })\n );\n return cloud;\n }\n\n static getPrintStyle() {\n return \"float: left; width: 46%; padding: 2%; margin: 0;\";\n }\n\n static getResultFooter() {\n let allFooters = TCO.getEl();\n let contain = TCO.getEl({\n className: \"container-fluid n20 xs-comfortable\",\n });\n let row = TCO.getEl({ className: \"row reduced-row flex-container\" });\n contain.appendChild(row);\n let col1 = TCO.getEl({\n className: \"column column-md-8\",\n innerHTML: Labels.get(\"whatsNext\"),\n htmlNode: TCO.getEl({\n tag: \"a\",\n href: Labels.get(\"linkLearnMore\"),\n className: \"button button--one button--regular button--primary\",\n innerText: Labels.get(\"getStarted\"),\n onclick: () => {\n TCO.track(\"Get started\");\n },\n }),\n });\n\n let col2 = TCO.getEl({\n className: \"column column-md-4 column--vertical-rule left-2 left-n50\",\n });\n col2.appendChild(\n TCO.getEl({\n innerHTML: Labels.get(\"saveEstimate\"),\n htmlNode: TCO.getEl({\n tag: \"button\",\n className:\n \"button button--one button--regular button--secondary download-pdf\",\n innerHTML: Labels.get(\"downloadPDF\"),\n onclick: (e) => {\n e.target.classList.add(\"printing\");\n let options = {\n margin: 0.5,\n filename: \"report.pdf\",\n image: { type: \"jpeg\", quality: 0.98 },\n html2canvas: { scale: 1 },\n jsPDF: { unit: \"in\", format: \"a3\", orientation: \"landscape\" },\n };\n let printContainer = TCO.getEl();\n TCO.syncInfoToEditMode();\n printContainer.innerHTML +=\n this.getComparison(true).outerHTML +\n `<div class=\"html2pdf__page-break\"></div>\n <h1>${Labels.get(\"editHeadline\")}:</h1>` +\n TCOEdit.getEditPage(true).outerHTML +\n `<ol class=\"plain-numbers\">\n <li>1. ${Labels.get(\"plannedDowntimeTooltip\")}</li>\n <li>2. ${Labels.get(\"annualSubscriptionsTooltip\")}</li>\n <li>3. ${Labels.get(\"atlassianAccessTooltip\")}</li>\n <li>4. ${Labels.get(\"loyaltyTooltip\")}</li>\n <li>5. ${Labels.get(\"infrastructureTooltip\")}</li>\n <li>6. ${Labels.get(\"itLaborTooltip\")}</li>\n <li>7. ${Labels.get(\"plannedDowntimeEditTooltip\")}</li>\n </ol>\n <p class=\"text-small\">${Labels.get(\"footnoteResults\")}</p>\n `;\n\n import(\n /* webpackChunkName: \"html2pdf\" */\n \"js-html2pdf\"\n ).then((html2pdf) => {\n var exporter = new html2pdf.default(printContainer, options);\n\n exporter\n .getPdf(true)\n .then(() => {\n e.target.classList.remove(\"printing\");\n })\n .error((err) => {\n console.log(err);\n });\n\n TCO.track(\"Print estimate\");\n });\n },\n }),\n })\n );\n\n col2.appendChild(\n TCO.getEl({\n innerHTML: Labels.get(\"needToTalk\"),\n htmlNode: TCO.getEl({\n tag: \"a\",\n href: Labels.get(\"linkContactResults\"),\n className: \"button button--link contact-us\",\n innerHTML: Labels.get(\"contactUs\"),\n onclick: () => {\n TCO.track(\"Contact us\");\n },\n }),\n })\n );\n\n row.appendChild(col1);\n row.appendChild(col2);\n\n let footnoteContainer = TCO.getEl({ className: \"container-fluid n0\" });\n footnoteContainer.appendChild(\n TCO.getEl({\n className: \"row reduced-row\",\n htmlNode: TCO.getEl({\n className: \"column\",\n innerHTML: `<p>${Labels.get(\"footnoteResults\")}</p>`,\n }),\n })\n );\n allFooters.appendChild(contain);\n allFooters.appendChild(footnoteContainer);\n\n return allFooters;\n }\n}\n","import TCOEdit from \"./tco-screen-edit\";\nimport TCOStart from \"./tco-screen-start\";\nimport TCOResults from \"./tco-screen-results\";\nimport tracking from '../../../utils/tracking';\n\nconst indexKeys = {\n 0: 'first',\n 1: 'second',\n 2: 'third',\n 3: 'fourth',\n 4: 'fifth',\n 5: 'sixth',\n 6: 'seventh',\n 7: 'eight',\n 8: 'ninth',\n 9: 'tenth',\n 10: 'eleventh',\n 11: 'twelfth',\n 12: 'thirteenth',\n 13: 'fourteenth',\n 14: 'fifteenth'\n};\n\ntype Product = {\n chosenProductKey: string,\n productTitle: string,\n deployment: string,\n instances: any[]\n};\n\nlet editInfo: any = {};\nlet tcoDom: HTMLElement;\nlet info: {\n edition: string,\n useAccess: boolean,\n accessPrice: number,\n overhead: boolean,\n plannedDowntime: boolean,\n products: Product[],\n}\nlet products: Product[];\nlet resultsContent: any;\nlet currencyCode: string;\n\nexport default class TCO {\n\n static init(passedDom: HTMLElement, passedProducts: Product[], results: any, currency: string) {\n products = passedProducts;\n info = this.getEmptyStart();\n tcoDom = passedDom;\n resultsContent = results;\n currencyCode = currency;\n this.renderStartScreen();\n\n tcoDom.addEventListener('click', (e) => {\n if (!e.target.tagName.match(/input|textarea/)) {\n window.focused = null;\n }\n });\n\n window.addEventListener('hashchange', () => {\n if (window.location.hash == '') {\n this.renderStartScreen();\n } else if (this.isValidEntry()) {\n if (window.location.hash == \"#results\") {\n this.renderResultsScreen();\n } else if (window.location.hash == \"#edit\") {\n this.renderEditScreen();\n }\n }\n })\n }\n\n static scrollToBeginning() {\n tcoDom.scrollIntoView();\n }\n\n static getEmptyStart() {\n let firstProduct = Object.keys(products)[0];\n let emptyObject = {\n edition: 'standard',\n useAccess: true,\n accessPrice: 0,\n overhead: true,\n plannedDowntime: false,\n products: [{\n chosenProductKey: firstProduct,\n productTitle: products[firstProduct].productKey,\n deployment: products[firstProduct].deployment,\n instances: [{ users: 0 }]\n }]\n }\n return emptyObject;\n }\n\n static resetInfo() {\n for (var key in info) {\n delete info[key];\n }\n info = this.getEmptyStart();\n }\n\n static getProducts(key) {\n return key ? products[key] : products;\n }\n\n static currency() {\n return currencyCode;\n }\n\n static labels(label) {\n return labels[label];\n }\n\n static getInfo(key) {\n return key ? info[key] : info;\n }\n\n static setInfo(key, val) {\n if (val == null) {\n delete info[key];\n } else {\n info[key] = val;\n }\n }\n\n static getEditInfo(key) {\n return key ? editInfo[key] : editInfo;\n }\n\n static setEditInfo(key, val) {\n if (val == null) {\n delete editInfo[key];\n } else {\n editInfo[key] = val;\n }\n }\n\n static syncInfoToEditMode() {\n editInfo = JSON.parse(JSON.stringify(info));\n }\n\n static saveEditInfo() {\n info = JSON.parse(JSON.stringify(editInfo));\n }\n\n static getResultsContent() {\n return resultsContent;\n }\n\n static getContentfulPricing(product, deployment = 'server', users = 50) {\n let price = 0;\n const theProduct = products[product][deployment];\n const numOfTiers = theProduct.pricingTiers.length;\n const multiplier = theProduct.period == \"MONTHLY\" ? 10 : 1;\n let pricingStrategy = \"FIXED_COST\";\n if (users > 0) {\n for (let t = 0; t < numOfTiers; t++) {\n let priceTier = theProduct.pricingTiers[t];\n let upper = priceTier.unitLimitUpper ? priceTier.unitLimitUpper : priceTier.unitLimitLower;\n if ((users >= priceTier.unitLimitLower && users <= upper) || (t == numOfTiers - 1 && users > upper)) {\n pricingStrategy = priceTier.pricingStrategy;\n price = priceTier.price;\n break;\n }\n }\n }\n let usersMultiplier = pricingStrategy == \"MARGINAL_PER_UNIT\" ? users : 1;\n return price * multiplier * usersMultiplier;\n }\n\n static getEl(options) {\n let el = document.createElement(options?.tag ? options.tag : 'div');\n for (var opt in options) {\n if (opt == \"htmlNode\") {\n el.appendChild(options.htmlNode);\n } else if (opt.indexOf('data') == 0) {\n let dataAtt = opt.replace('data', '').toLowerCase();\n let dataVal = options[opt];\n if (dataAtt == \"tooltip\") {\n dataVal = dataVal.replace(/<br>/g, '\\n');\n }\n el.dataset[dataAtt] = dataVal;\n } else if (opt != \"tag\" && options[opt]) {\n el[opt] = options[opt];\n }\n }\n return el;\n }\n\n static renderStartScreen(withErrors?: boolean, withDialog?: boolean) {\n tcoDom.innerHTML = '';\n tcoDom.appendChild(TCOStart.getStartPage(withErrors, withDialog));\n if (window.focused && document.getElementById(window.focused)) {\n document.getElementById(focused).focus();\n }\n if (withErrors) {\n document.querySelector('.error').scrollIntoView();\n }\n if (window.location.hash != '') {\n window.location.hash = ''\n }\n }\n\n static renderEditScreen() {\n tcoDom.innerHTML = '';\n tcoDom.appendChild(TCOEdit.getEditPage());\n if (window.location.hash != '#edit') {\n window.location.hash = '#edit';\n }\n }\n\n static renderResultsScreen(withError?: boolean) {\n tcoDom.innerHTML = '';\n tcoDom.appendChild(TCOResults.getResultsPage(withError));\n if (window.location.hash != '#results') {\n window.location.hash = '#results';\n }\n }\n\n static getLineItem(options) {\n let lineItem = this.getEl({\n className: 'line-item labels-values',\n innerHTML: `<div class=\"labels-side\"><p>${options.label}</p></div>`\n });\n let lineValue = this.getEl({ className: 'values-side' });\n lineItem.appendChild(lineValue);\n lineValue.appendChild(this.getEl({\n tag: options.isPrintVersion ? 'button' : 'input',\n id: options.id ? options.id : '',\n type: options.type ? options.type : 'text',\n placeholder: options.placeholder,\n value: options.value,\n onchange: options.onchange,\n checked: options.checked,\n className: options.type == \"checkbox\" ? 'toggle' : '',\n innerText: options.isPrintVersion ? (options.value ? options.value : options.placeholder) : ''\n }));\n if (options.type == \"checkbox\") {\n lineValue.appendChild(this.getEl({ tag: 'label', htmlFor: options.id, innerHTML: this.toggleSVG(options.checked) }));\n }\n lineValue.appendChild(this.getEl({ tag: 'span', className: 'side-label', innerHTML: options.sideLabel ? options.sideLabel : '' }));\n return lineItem;\n }\n\n\n static getDottedLine(options) {\n let isCheckbox = options.id && options.id.length;\n let tooltip = options.tooltip ? ` <span class=\"${options.isPrintVersion ? 'num' : 'tooltip'}\" data-tooltip=\"${options.tooltip.replace(/<br>/g, '\\n')}\">${options.isPrintVersion ? options.tooltipNum : ''}</span>` : '';\n let dotted = TCO.getEl({ className: `dotted-line ${options.className ? options.className : ''}` });\n let headingLabel = TCO.getEl({ tag: options.tag ? options.tag : 'h3', innerHTML: `${options.label} ${tooltip}` });\n if (options.id) {\n headingLabel.appendChild(TCO.getEl({\n tag: 'input',\n id: options.id,\n type: 'checkbox',\n checked: options.checked,\n className: 'toggle',\n onchange: options.onchange ? options.onchange : () => {\n TCO.track(options.label, options.id);\n }\n }));\n headingLabel.appendChild(TCO.getEl({ tag: 'label', htmlFor: options.id, innerHTML: TCO.toggleSVG(options.checked) }));\n }\n dotted.appendChild(headingLabel);\n dotted.appendChild(TCO.getEl({ tag: 'span', className: !isCheckbox || options.checked ? \"line\" : \"\" }));\n if (!isCheckbox || options.checked) {\n dotted.appendChild(TCO.getEl({ tag: options.tag ? options.tag : 'h4', innerHTML: options.value }));\n }\n if (options.description) {\n dotted.appendChild(TCO.getEl({ className: 'description', innerHTML: options.description }));\n }\n return dotted;\n }\n\n static linkArrow() {\n return `<svg class=\"link-arrow-image\" width=\"11px\" height=\"8px\" viewBox=\"0 0 11 8\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"><g class=\"group-path\" transform=\"translate(-138.000000, -586.000000)\" fill=\"#0052CC\"><path d=\"M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z\"></path></g></g></svg>`;\n }\n\n static errorSVG() {\n return `<svg width=\"18\" height=\"16\" viewBox=\"0 0 18 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"17.771\" height=\"16\" fill=\"white\" fill-opacity=\"0.01\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.45289 2.65537C9.6328 2.72249 9.79625 2.82086 9.93391 2.94487L14.5011 7.05621C14.6389 7.18016 14.7483 7.32737 14.8229 7.48941C14.8975 7.65144 14.9359 7.82513 14.9359 8.00054C14.9359 8.17595 14.8975 8.34964 14.8229 8.51168C14.7483 8.67371 14.6389 8.82092 14.5011 8.94487L9.93391 13.0562C9.79625 13.1802 9.6328 13.2786 9.45289 13.3457C9.27299 13.4128 9.08016 13.4474 8.88543 13.4474C8.69069 13.4474 8.49786 13.4128 8.31796 13.3457C8.13805 13.2786 7.9746 13.1802 7.83694 13.0562L3.26979 8.94487C3.13194 8.82092 3.02259 8.67371 2.94798 8.51168C2.87336 8.34964 2.83496 8.17595 2.83496 8.00054C2.83496 7.82513 2.87336 7.65144 2.94798 7.48941C3.02259 7.32737 3.13194 7.18016 3.26979 7.05621L7.83694 2.94487C7.9746 2.82086 8.13805 2.72249 8.31796 2.65537C8.49786 2.58826 8.69069 2.55371 8.88543 2.55371C9.08016 2.55371 9.27299 2.58826 9.45289 2.65537ZM8.36184 9.13827C8.5007 9.2633 8.68904 9.33354 8.88542 9.33354C9.0818 9.33354 9.27014 9.2633 9.40901 9.13827C9.54787 9.01325 9.62588 8.84368 9.62588 8.66687V5.33354C9.62588 5.15673 9.54787 4.98716 9.40901 4.86213C9.27014 4.73711 9.0818 4.66687 8.88542 4.66687C8.68904 4.66687 8.5007 4.73711 8.36184 4.86213C8.22298 4.98716 8.14496 5.15673 8.14496 5.33354V8.66687C8.14496 8.84368 8.22298 9.01325 8.36184 9.13827ZM8.36184 11.1383C8.5007 11.2633 8.68904 11.3335 8.88542 11.3335C9.0818 11.3335 9.27014 11.2633 9.40901 11.1383C9.54787 11.0133 9.62588 10.8437 9.62588 10.6669C9.62588 10.4901 9.54787 10.3205 9.40901 10.1955C9.27014 10.0704 9.0818 10.0002 8.88542 10.0002C8.68904 10.0002 8.5007 10.0704 8.36184 10.1955C8.22298 10.3205 8.14496 10.4901 8.14496 10.6669C8.14496 10.8437 8.22298 11.0133 8.36184 11.1383Z\" fill=\"#DE350B\"/></svg>`;\n }\n\n static toggleSVG(on) {\n if (on) {\n return `<svg width=\"32\" height=\"20\" viewBox=\"0 0 32 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"32\" height=\"16\" rx=\"8\" fill=\"#00875A\"/><rect width=\"12\" height=\"12\" transform=\"translate(3.19995 1.59961)\" fill=\"white\" fill-opacity=\"0.01\"/><path d=\"M6.56739 7.76082C6.47712 7.66481 6.35259 7.60832 6.2209 7.60364C6.0892 7.59895 5.96097 7.64645 5.86411 7.73581C5.76725 7.82516 5.70957 7.94914 5.70363 8.08079C5.69769 8.21243 5.74397 8.3411 5.83239 8.43882L7.63839 10.3983C7.90689 10.6613 8.30689 10.6613 8.55539 10.4133L8.73739 10.2338C9.39466 9.58743 10.0512 8.94026 10.7069 8.29232L10.7269 8.27232C11.3397 7.66835 11.9494 7.06117 12.5559 6.45082C12.6465 6.35592 12.6962 6.22918 12.6943 6.09796C12.6923 5.96675 12.6388 5.84156 12.5454 5.74942C12.4519 5.65729 12.326 5.60558 12.1948 5.60547C12.0635 5.60536 11.9375 5.65684 11.8439 5.74882C11.2402 6.35599 10.6335 6.96016 10.0239 7.56132L10.0039 7.58132C9.37553 8.20246 8.74636 8.8228 8.11639 9.44232L6.56739 7.76082Z\" fill=\"white\" stroke=\"white\"/><circle cx=\"23.8\" cy=\"8\" r=\"6\" fill=\"white\"/></svg>`;\n }\n return `<svg width=\"32\" height=\"20\" viewBox=\"0 0 32 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 8C0 3.58172 3.58172 0 8 0H24C28.4183 0 32 3.58172 32 8C32 12.4183 28.4183 16 24 16H8C3.58172 16 0 12.4183 0 8Z\" fill=\"#6B778C\"/><rect width=\"8\" height=\"8\" transform=\"translate(19 4)\" fill=\"white\" fill-opacity=\"0.01\"/><path d=\"M22.9999 7.52821L21.2356 5.76387C21.1727 5.70315 21.0885 5.66955 21.0011 5.67031C20.9137 5.67107 20.8301 5.70613 20.7683 5.76793C20.7065 5.82974 20.6714 5.91334 20.6707 6.00074C20.6699 6.08814 20.7035 6.17234 20.7642 6.23521L22.5286 7.99954L20.7642 9.76387C20.7035 9.82674 20.6699 9.91094 20.6707 9.99834C20.6714 10.0857 20.7065 10.1693 20.7683 10.2311C20.8301 10.2929 20.9137 10.328 21.0011 10.3288C21.0885 10.3295 21.1727 10.2959 21.2356 10.2352L22.9999 8.47087L24.7642 10.2352C24.8271 10.2959 24.9113 10.3295 24.9987 10.3288C25.0861 10.328 25.1697 10.2929 25.2315 10.2311C25.2933 10.1693 25.3284 10.0857 25.3291 9.99834C25.3299 9.91094 25.2963 9.82674 25.2356 9.76387L23.4712 7.99954L25.2356 6.23521C25.2674 6.20446 25.2928 6.16767 25.3103 6.12701C25.3277 6.08634 25.3369 6.0426 25.3373 5.99834C25.3377 5.95408 25.3293 5.91019 25.3125 5.86922C25.2957 5.82826 25.271 5.79104 25.2397 5.75974C25.2084 5.72844 25.1712 5.70369 25.1302 5.68693C25.0892 5.67017 25.0454 5.66174 25.0011 5.66212C24.9568 5.66251 24.9131 5.6717 24.8724 5.68917C24.8318 5.70664 24.795 5.73204 24.7642 5.76387L22.9999 7.52821Z\" fill=\"white\" stroke=\"white\" stroke-width=\"1.5\"/><circle cx=\"8.3999\" cy=\"8\" r=\"6\" fill=\"white\"/></svg>`\n }\n\n static resultSVG(cloudCostsLess) {\n if (cloudCostsLess) {\n return '';\n }\n return '';\n }\n\n static convertForTracking(info, isOld) {\n let newObj = {};\n let prefix = isOld ? 'edited_' : '';\n newObj.edition = info.edition;\n let allKeys = ['useAccess', 'numberOfAdmins', 'medianAnnualSalary', 'accessPrice', 'overhead', 'plannedDowntime'];\n allKeys.forEach(key => {\n if (info[key]) {\n newObj[prefix + key] = info[key];\n }\n })\n info.products.forEach((product, productIndex) => {\n let prodKey = indexKeys[productIndex];\n newObj[prefix + prodKey + \"_product\"] = product.chosenProductKey;\n newObj[prefix + prodKey + \"_product_deployment\"] = product.deployment;\n newObj[prefix + prodKey + \"_product_price\"] = product.price;\n if (product.customPrice) {\n newObj[prefix + prodKey + \"_product_custom_price\"] = product.customPrice;\n }\n product.instances.forEach((instance, instanceIndex) => {\n let instKey = indexKeys[instanceIndex];\n newObj[prefix + prodKey + \"_product_\" + instKey + \"_instance_users\"] = instance.users;\n if (instance.infra) {\n newObj[prefix + prodKey + \"_product_\" + instKey + \"_instance_infrastructure\"] = instance.infra;\n }\n })\n });\n return newObj;\n }\n\n static track(linkType, linkInfo, oldInfo) {\n let currentInfo = this.convertForTracking(this.getInfo());\n let trackInfo = Object.assign({}, currentInfo);\n trackInfo.label = linkType;\n trackInfo.eventComponent = \"linkButton\";\n trackInfo.eventContainer = \"TCO Calculator\";\n if (linkInfo) {\n trackInfo.labelDescription = linkInfo;\n }\n if (oldInfo) {\n let old = this.convertForTracking(oldInfo, true);\n trackInfo = Object.assign(trackInfo, old);\n }\n tracking.trackEvent('clicked', trackInfo);\n }\n\n static sanitizedNum(num, allowDecimal) {\n if (allowDecimal) {\n return Number(num.replace(/[^\\d\\.]/g, ''));\n }\n return Number(num.replace(/[^\\d]/g, ''));\n }\n\n static formatNum(num, noCurrencyCode, decimalPlaces) {\n let places = decimalPlaces ? decimalPlaces : 0;\n if (num || num === 0) {\n return Number(num).toFixed(places).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + (noCurrencyCode ? \"\" : (\" \" + this.currency()))\n }\n return \"__\";\n }\n\n static getMaxNumUsers(productKey) {\n return this.getProducts(productKey).maxUsers;\n }\n\n static isNotValidNumOfUsers(num, productKey) {\n return num == 0 || (num > this.getMaxNumUsers(productKey));\n }\n\n static isValidEntry() {\n let allInstances = TCO.getInfo(\"products\").map(product => {\n return product.instances.map(instance => {\n return { productKey: product.chosenProductKey, users: instance.users };\n })\n }).flat();\n let errors = allInstances.filter(instance => { return this.isNotValidNumOfUsers(instance.users, instance.productKey); });\n return errors.length == 0;\n }\n}","import TCO from \"./tco-build\";\nimport Labels from \"./tco-labels\";\n\nexport default class TCOTool {\n domRoot: HTMLElement;\n params: any;\n labels: any;\n mainRoot: any;\n availableProducts: any;\n resultsContent: any;\n currencyCode: string;\n isEmbeddedIframe?: boolean;\n\n constructor(domRoot: HTMLElement, params: any) {\n this.domRoot = domRoot;\n this.params = params;\n this.labels = params.labels;\n this.mainRoot = this.domRoot.querySelector('.tco-page');\n this.availableProducts = params.products;\n this.resultsContent = params.resultsContent;\n this.currencyCode = '';\n (async () => {\n const results = await Promise.all(params.pricingObject);\n for (let result in results) {\n this.currencyCode = results[result].currencyCode;\n let productKey = results[result].identifiers.productKey;\n let pricingKey = results[result].identifiers.pricingKey.replace(/\\./g, '_');\n let deployment = results[result].identifiers.deployment;\n let period = results[result].identifiers.period;\n if (!this.availableProducts[productKey]) {\n this.availableProducts[productKey] = {};\n }\n this.availableProducts[productKey][deployment] = results[result];\n this.availableProducts[productKey][deployment].period = period;\n this.availableProducts[productKey][deployment].pricingKey = pricingKey;\n this.availableProducts[productKey][deployment].deployment = deployment;\n this.availableProducts[productKey][deployment].available = results[result].pricingTiers ? results[result].pricingTiers.length > 0 : false;\n }\n this.init(); \n })();\n }\n \n init() {\n if (window.location !== window.parent.location) {\n this.isEmbeddedIframe = true;\n }\n Labels.init(this.labels);\n TCO.init(this.mainRoot, this.availableProducts, this.resultsContent, this.currencyCode);\n }\n\n}"],"names":["labels","tiers","USD","server","small","medium","large","xl","dc","JPY","adminSalary","medianHourly","Calc","_classCallCheck","key","value","users","info","this","getTotalOperationalCosts","getTotalAnnualMaintenance","productIndex","instanceIndex","TCO","currency","products","deployment","getTiers","instances","_this","reduce","sum","instance","infra","getProductInstanceInfrastructureCost","_this2","map","product","newInstances","forEach","flat","instanceTotal","getTotalInfrastructureCost","getTotalITLaborCost","getPlannedDowntimeCosts","allInstances","Math","max","apply","plannedDowntime","getHighestUsersAmongInstances","getMedianHourly","getDowntimePerUpdate","getUpdatesPerYear","productSum","customPrice","price","productInfo","edition","isAvailable","chosenProductKey","available","useAccess","accessPrice","getTotalAnnualCloudSubscription","updatesPerYear","downtimePerUpdate","numberOfAdmins","getNumberOfAdmins","overhead","Labels","passedLabels","TCOEdit","printVersion","contain","getEl","className","row","appendChild","innerHTML","concat","get","getOperationalCostsSection","getAnnualMaintenanceSection","getPageButtons","opCosts","tag","onclick","resetOpCosts","getDottedLine","label","formatNum","getEditInfo","description","getInfrastructureSection","getITLaborSection","getPlannedDowntimeSection","infraSection","htmlNode","isPrintVersion","tooltip","tooltipNum","editableInfrastructures","_product","getProductEditLine","allProducts","selectedProduct","productEditLine","productTitle","getTotalInfraCostPerProduct","_instance","productUsers","getProducts","getLineItem","placeholder","sideLabel","onchange","e","sanitizedNum","target","setEditInfo","renderEditScreen","itLabor","getAdminSalary","type","id","checked","plannedDowntimeSection","track","downTimeItems","resetProducts","productInstance","_this3","annualMaintenance","resetAnnualMaintenance","productsMaintenance","buttonContainer","innerText","renderResultsScreen","window","scrollTo","saveEditInfo","activeDialogProduct","TCOStart","withError","withDialog","href","getIntro","numOfProductsAvailable","Object","keys","filter","indexOf","length","getInfo","enteredProduct","getProductLineItem","getProductLineItemAdder","getCostEstimatorButton","getDialogWindow","option","theseProducts","selectedOptions","dataset","title","setInfo","thisProductLineItem","firstAvailableProduct","buttonsContainer","allEl","selectEl","_loop","optionProduct","optionString","isActiveProduct","isDisabledProduct","prod","includes","dataTitle","dataDeployment","productTitleDropdown","dataTooltip","tabIndex","classList","add","syncDropdownProduct","renderStartScreen","firstAvailableProductObject","fakeSelectEl","onmousedown","preventDefault","elsContainer","nextElementSibling","style","display","onfocus","thisProduct","productKey","ulElement","userTiers","thisProductInstance","liEl","howManyUsers","textInput","isNotValidNumOfUsers","autocomplete","onkeyup","focused","errorSVG","getMaxNumUsers","replace","getProductInstanceRemover","getProductInstanceAdder","splice","isDisabled","push","productLineItem","querySelector","inner","getProductLineItemRemover","getProductsDropdown","instancesAndUsers","getProductInstances","container","isValidEntry","scrollToBeginning","outer","yMax","TCOResults","getContentfulPricing","cloudStandard","cloudPremium","getTotalSelfManagedCosts","getCloudTotal","getGraph","getComparison","getResultsContent","getResultFooter","subHeadline","cost","getHeadline","getTotalCloudCosts","tagline","costs","print","innerRow","getSelfManagedSection","getCloudSection","resetInfo","getPrintStyle","self","selfOpCosts","selfMaintenance","linkArrow","syncInfoToEditMode","cloud","switcher","cloudOpCosts","annualSubscriptions","cloudType","productGenericTitle","productTitleGeneric","numPrice","shownPrice","suffix","outerHTML","allFooters","col1","col2","options","margin","filename","image","quality","html2canvas","scale","jsPDF","unit","format","orientation","printContainer","getEditPage","then","html2pdf","getPdf","remove","error","err","console","log","footnoteContainer","tcoDom","resultsContent","currencyCode","indexKeys","editInfo","passedDom","passedProducts","results","getEmptyStart","addEventListener","tagName","match","location","hash","scrollIntoView","firstProduct","_labels","_x","arguments","toString","val","JSON","parse","stringify","undefined","theProduct","numOfTiers","pricingTiers","multiplier","period","pricingStrategy","t","priceTier","upper","unitLimitUpper","unitLimitLower","el","document","createElement","opt","dataAtt","toLowerCase","dataVal","withErrors","getStartPage","getElementById","focus","getResultsPage","lineItem","lineValue","htmlFor","toggleSVG","isCheckbox","dotted","headingLabel","on","cloudCostsLess","isOld","newObj","prefix","prodKey","instKey","linkType","linkInfo","oldInfo","currentInfo","convertForTracking","trackInfo","assign","eventComponent","eventContainer","labelDescription","old","tracking","num","allowDecimal","Number","noCurrencyCode","decimalPlaces","places","toFixed","maxUsers","_regeneratorRuntime","exports","Op","prototype","hasOwn","hasOwnProperty","defineProperty","obj","desc","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","_typeof","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","state","Error","done","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","TypeError","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","i","doneResult","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_defineProperties","props","descriptor","input","hint","prim","toPrimitive","res","String","_toPrimitive","TCOTool","domRoot","params","Constructor","mainRoot","availableProducts","_callee","pricingKey","_context","all","pricingObject","identifiers","init","args","protoProps","parent","isEmbeddedIframe"],"sourceRoot":""}