/** * GET Parameter Parsing & URL Cleanup */ (function () { 'use strict'; var App = window.BenchmarkApp = window.BenchmarkApp || {}; var VALID_INDUSTRIES = ['pet', 'fashion', 'wellness']; var VALID_REVENUE = Object.keys(App.REVENUE_MAP); var VALID_BUDGET = Object.keys(App.BUDGET_MAP); var VALID_GROWTH = Object.keys(App.GROWTH_MAP); function escapeHtml(str) { var div = document.createElement('div'); div.appendChild(document.createTextNode(str)); return div.innerHTML; } /** * Parse GET parameters from URL. * Returns parsed object or null if invalid. * Also extracts A/B variant override before cleaning URL. */ App.parseParams = function () { var search = window.location.search; if (!search) return null; var params = new URLSearchParams(search); // Extract variant override before cleaning var variantOverride = params.get('variant'); if (variantOverride) { variantOverride = variantOverride.toLowerCase(); if (variantOverride === 'a' || variantOverride === 'b') { App._variantOverride = variantOverride.toUpperCase(); } } // Clean URL immediately history.replaceState(null, '', window.location.pathname); // Extract required params var company = params.get('company'); var industry = params.get('industry'); var revenue = params.get('revenue'); var budget = params.get('budget'); var asins = params.get('asins'); var growth = params.get('growth'); // Validate all required params exist if (!company || !industry || !revenue || !budget || !asins || !growth) { return null; } // Normalize industry = industry.toLowerCase().trim(); revenue = revenue.toLowerCase().trim(); budget = budget.toLowerCase().trim(); growth = growth.toLowerCase().trim(); // Validate against allowed values if (VALID_INDUSTRIES.indexOf(industry) === -1) return null; if (VALID_REVENUE.indexOf(revenue) === -1) return null; if (VALID_BUDGET.indexOf(budget) === -1) return null; if (VALID_GROWTH.indexOf(growth) === -1) return null; // Parse ASINs as integer (min 1) var asinsNum = parseInt(asins, 10); if (isNaN(asinsNum) || asinsNum < 1) asinsNum = 1; return { company: escapeHtml(company.trim()), companyRaw: company.trim(), industry: industry, revenue: revenue, budget: budget, asins: asinsNum, growth: growth }; }; })();