| 1 | | {"version":3,"file":"wpm-admin.p1.min.js","mappings":"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","sources":["webpack://Pixel-Manager-for-WooCommerce/./src/js-src/admin/script-blocker-warning.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/admin/tabs.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/admin/helpers.js","webpack://Pixel-Manager-for-WooCommerce/webpack/bootstrap","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/admin/main.js"],"sourcesContent":["function wpm_hide_script_blocker_warning() {\n\tjQuery(\"#script-blocker-notice\").hide()\n}\n\n// try to hide as soon as this script is loaded\n// might be too early in some cases, as the HTML is not rendered yet\nwpm_hide_script_blocker_warning()\n\n// if all other earlier attempts to hide did fail\n// run the function after entire DOM has been loaded\njQuery(function () {\n\twpm_hide_script_blocker_warning()\n})\n","jQuery(function () {\n\n\t// Don't run if we are not one of the\n\t// WPM main tabs\n\tif (\"wpm\" !== wpmGetPageId()) return\n\n\tlet sections = []\n\tlet subsections = {}\n\n\t// Hide unnecessary elements\n\tjQuery(\".section\").closest(\"tr\").hide()\n\n\t// Collect information on sections\n\tjQuery(\".section\").each(function () {\n\t\tsections.push({\n\t\t\t\"slug\" : jQuery(this).data(\"sectionSlug\"),\n\t\t\t\"title\" : jQuery(this).data(\"sectionTitle\"),\n\t\t\t\"badgeCount\": jQuery(this).data(\"badgeCount\") || 0,\n\t\t})\n\t})\n\n\t// Collect information on subsections\n\tjQuery(\".subsection\").each(function () {\n\n\t\tsubsections[jQuery(this).data(\"sectionSlug\")] = subsections[jQuery(this).data(\"sectionSlug\")] || []\n\n\t\tsubsections[jQuery(this).data(\"sectionSlug\")].push({\n\t\t\t\"title\": jQuery(this).data(\"subsectionTitle\"),\n\t\t\t\"slug\" : jQuery(this).data(\"subsectionSlug\"),\n\t\t})\n\t})\n\n\t// Create tabs for sections\n\tsections.forEach(\n\t\tfunction (section) {\n\t\t\tlet badge = section[\"badgeCount\"] > 0 ? \"<span class=\\\"pmw-tab-badge\\\">\" + section[\"badgeCount\"] + \"</span>\" : \"\"\n\t\t\tjQuery(\".nav-tab-wrapper\").append(\"<a href=\\\"#\\\" class=\\\"nav-tab\\\" data-section-slug=\\\"\" + section[\"slug\"] + \"\\\">\" + section[\"title\"] + badge + \"</a>\")\n\t\t})\n\n\t// Create tabs for each subsections\n\tjQuery(\".nav-tab-wrapper\").after(wpmCreateSubtabUlHtml(subsections))\n\n\t// Create on-click events on section tabs that toggle the views\n\tjQuery(\".nav-tab-wrapper a\").on(\"click\", function (e) {\n\n\t\te.preventDefault()\n\n\t\t// show clicked tab as active\n\t\tjQuery(this).addClass(\"nav-tab-active\").siblings().removeClass(\"nav-tab-active\")\n\n\t\t// toggle the sections visible / invisible based on clicked tab\n\n\t\tlet sectionSlug = jQuery(this).data(\"section-slug\")\n\t\twpmToggleSections(sectionSlug, sections)\n\n\t\t// if subsection exists, click on first subsection\n\t\tif (sectionSlug in subsections) {\n\t\t\tjQuery(\"ul[data-section-slug=\" + sectionSlug + \"]\").children(\":first\").trigger(\"click\")\n\t\t}\n\t})\n\n\t// Create on-click events on subsection tabs that toggle the views\n\tjQuery(\".pmw-subnav-li\").on(\"click\", function (e) {\n\n\t\te.preventDefault()\n\t\te.stopPropagation()\n\n\t\t// jQuery(this).hide();\n\t\tjQuery(this)\n\t\t\t.addClass(\"pmw-subnav-li-active\").removeClass(\"pmw-subnav-li-inactive\")\n\t\t\t.siblings()\n\t\t\t.addClass(\"pmw-subnav-li-inactive\").removeClass(\"pmw-subnav-li-active\")\n\n\t\twpmToggleSubsection(jQuery(this).parent().data(\"section-slug\"), jQuery(this).data(\"subsection-slug\"))\n\t})\n\n\t/**\n\t * If someone accesses a plugin tab by deep link, open the right tab\n\t * or fallback to default (first tab)\n\t *\n\t * If deeplink is being opened,\n\t * open the according section and subsection\n\t */\n\tif (wpmGetSectionParams()) {\n\n\t\tlet sectionParams = wpmGetSectionParams()\n\n\t\tjQuery(\"a[data-section-slug=\" + sectionParams[\"section\"] + \"]\").trigger(\"click\")\n\n\t\tif (sectionParams[\"subsection\"] !== false) {\n\t\t\tjQuery(\"ul[data-section-slug=\" + sectionParams[\"section\"] + \"]\").children(\"[data-subsection-slug=\" + sectionParams[\"subsection\"] + \"]\").trigger(\"click\")\n\t\t}\n\t} else {\n\t\tjQuery(\"a[data-section-slug=\" + sections[0][\"slug\"] + \"]\").trigger(\"click\")\n\t}\n})\n\n// Creates the html with all subsection elements\nwpmCreateSubtabUlHtml = (subsections) => {\n\n\tlet subsectionsKeys = Object.keys(subsections)\n\n\tlet html = \"\"\n\n\tsubsectionsKeys.forEach(function (subsectionKey) {\n\t\thtml += \"<ul class=\\\"pmw-subnav-tabs\\\" data-section-slug=\\\"\" + subsectionKey + \"\\\">\"\n\n\t\tlet subtabs = subsections[subsectionKey]\n\n\t\tsubtabs.forEach(function (subtab) {\n\t\t\thtml += \"<li class=\\\"pmw-subnav-li pmw-subnav-li-inactive\\\" style=\\\"cursor: pointer;\\\" data-subsection-slug=\\\"\" + subtab[\"slug\"] + \"\\\">\" + subtab[\"title\"] + \"</li>\"\n\t\t})\n\n\t\thtml += \"</ul>\"\n\t})\n\n\treturn html\n}\n\n/**\n * If section (and subsection) URL parameters are set,\n * return them, otherwise return false\n */\nwpmGetSectionParams = () => {\n\n\tconst queryString = window.location.search\n\tconst urlParams = new URLSearchParams(queryString)\n\n\tif (urlParams.get(\"section\")) {\n\t\treturn {\n\t\t\t\"section\" : urlParams.get(\"section\"),\n\t\t\t\"subsection\": urlParams.get(\"subsection\"),\n\t\t}\n\t} else {\n\t\treturn false\n\t}\n}\n\n// Toggles the sections\nwpmToggleSections = (sectionSlug, sections) => {\n\n\tjQuery(\"#wpm_settings_form > h2\").nextUntil(\".submit\").andSelf().hide()\n\tjQuery(\".pmw-subnav-tabs\").hide()\n\tjQuery(\".pmw-subnav-tabs[data-section-slug=\" + sectionSlug + \"]\").show()\n\n\tlet sectionPos = sections.findIndex((arrayElement) => arrayElement[\"slug\"] === sectionSlug)\n\n\tjQuery(\"div[data-section-slug=\" + sectionSlug + \"]\").closest(\"table\").prevAll(\"h2:first\").next().nextUntil(\"h2, .submit\").andSelf().show()\n\n\t// set the URL with the active tab parameter\n\twpmSetUrl(sections[sectionPos][\"slug\"])\n}\n\nconst wpmToggleSubsection = (sectionSlug, subsectionSlug) => {\n\n\tjQuery(\"#wpm_settings_form > h2\").nextUntil(\".submit\").andSelf().hide()\n\tjQuery(\"[data-section-slug=\" + sectionSlug + \"][data-subsection-slug=\" + subsectionSlug + \"]\").closest(\"tr\").siblings().andSelf().hide()\n\n\tjQuery(\"[data-section-slug=\" + sectionSlug + \"][data-subsection-slug=\" + subsectionSlug + \"]\").closest(\"table\").show()\n\tjQuery(\"[data-section-slug=\" + sectionSlug + \"][data-subsection-slug=\" + subsectionSlug + \"]\").closest(\"tr\").nextUntil(jQuery(\"[data-section-slug=\" + sectionSlug + \"][data-subsection-slug]\").closest(\"tr\")).show()\n\n\t// Set the URL with the active tab parameter\n\twpmSetUrl(sectionSlug, subsectionSlug)\n}\n\n// Sets the new URL parameters\nwpmSetUrl = (sectionSlug, subsectionSlug = \"\") => {\n\n\tconst queryString = window.location.search\n\tconst urlParams = new URLSearchParams(queryString)\n\n\turlParams.delete(\"section\")\n\turlParams.delete(\"subsection\")\n\n\tlet newParams = \"section=\" + sectionSlug\n\tnewParams += subsectionSlug ? \"&subsection=\" + subsectionSlug : \"\"\n\n\thistory.pushState(\"\", \"wpm\" + sectionSlug, document.location.pathname + \"?page=wpm&\" + newParams)\n\n\t// Make WP remember which was the selected tab on a save and return to the same tab after saving\n\tjQuery(\"input[name =\\\"_wp_http_referer\\\"]\").val(wpmGetAdminPath() + \"?page=wpm&\" + newParams + \"&settings-updated=true\")\n}\n\nwpmGetAdminPath = () => {\n\tlet url = new URL(jQuery(\"#wp-admin-canonical\").attr(\"href\"))\n\treturn url.pathname\n}\n\nwpmGetPageId = () => {\n\n\tconst queryString = window.location.search\n\tconst urlParams = new URLSearchParams(queryString)\n\n\treturn urlParams.get(\"page\")\n}\n\n// On click of an element that contains a data-section-slug with any value show an alert box with the text hello\njQuery(document).on(\"click\", \"[data-section-slug]\", function () {\n\n\tconst infoTabs = [\n\t\t\"opportunities\",\n\t\t\"diagnostics\",\n\t\t\"support\",\n\t]\n\n\t// If the data-section-slug value is one of infoTabs, hide the save button, otherwise show it\n\tif (infoTabs.includes(jQuery(this).data(\"section-slug\"))) {\n\t\t// Hide the element with class submit\n\t\tjQuery(\".submit\").hide()\n\t} else {\n\t\t// Show the element with class submit\n\t\tjQuery(\".submit\").show()\n\t}\n})\n\n\n// if a link with the class advanced-section-link is clicked,\n// get the data-AS-section and the data-AS-subsection values of the clicked element\n// and trigger a click on the element with the data-ssection-slug value and a click on the element with the data-subsection-slug value\njQuery(document).on(\"click\", \".advanced-section-link\", (e) => {\n\n\te.preventDefault()\n\n\tlet sectionSlug = jQuery(e.currentTarget).data(\"as-section\")\n\tlet subsectionSlug = jQuery(e.currentTarget).data(\"as-subsection\")\n\n\tjQuery(`a[data-section-slug=${sectionSlug}]`).trigger(\"click\")\n\n\tjQuery(`ul[data-section-slug=${sectionSlug}]`).children(`[data-subsection-slug=${subsectionSlug}]`).trigger(\"click\")\n})\n","jQuery(function () {\n\n\t/**\n\t * Copy debug info to clipboard when the button is clicked.\n\t */\n\tjQuery(\"#debug-info-button\").on(\"click\", () => {\n\t\t// Select text in textarea\n\t\tconst textarea = jQuery(\"#debug-info-textarea\")[0];\n\t\ttextarea.select();\n\t\ttextarea.setSelectionRange(0, 99999); // For mobile devices\n\n\t\t// Copy selected text to clipboard\n\t\twpm.copyTextToClipboard(jQuery(\"#debug-info-textarea\").val());\n\n\t\t// Show success message and hide after 3 seconds\n\t\tconst successElement = jQuery(\"#debug-info-success\");\n\t\tsuccessElement.fadeIn(200);\n\t\tsetTimeout(() => successElement.fadeOut(200), 3000);\n\t});\n\n\tjQuery(\"#pmw-pro-version-demo\").on(\"click\", function () {\n\t\tjQuery(\"#submit\").trigger(\"click\");\n\t});\n\n\tif (document.getElementById(\"json-settings-file-input\")) {\n\t\tdocument.getElementById(\"json-settings-file-input\")\n\t\t\t.addEventListener(\"change\", wpm.readSettingsFile, false);\n\t}\n\n\t// if element ga4-data-api-credentials-upload-button exists, then we are on the GA4 settings page\n\tif (document.getElementById(\"ga4-data-api-credentials-upload-button\")) {\n\n\t\tdocument.getElementById(\"ga4-data-api-credentials-upload-button\")\n\t\t\t.addEventListener(\"change\", wpm.readGa4DataApiCredentials, false);\n\t}\n\n\t// if element ga4-data-api-credentials-upload-button exists, then we are on the GA4 settings page\n\tif (document.getElementById(\"ga4-data-api-credentials-delete-button\")) {\n\n\t\tdocument.getElementById(\"ga4-data-api-credentials-delete-button\")\n\t\t\t.addEventListener(\"click\", () => {\n\t\t\t\twpm.saveGa4DataApiCredentialsToDb({});\n\t\t\t}, false);\n\t}\n\n\t/**\n\t * Handle log files download via REST API\n\t */\n\tjQuery(\"#wgact_download_logs_zip\").on(\"click\", function(e) {\n\t\te.preventDefault();\n\t\t\n\t\tif (jQuery(this).prop(\"disabled\")) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tconst source = jQuery(this).data(\"source\");\n\t\tconst button = jQuery(this);\n\t\tconst originalText = button.text();\n\t\t\n\t\t// Disable button and change text\n\t\tbutton.prop(\"disabled\", true).text(\"Downloading...\");\n\t\t\n\t\t// Use fetch with proper authentication\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/logs/download\", {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t\t\"X-WP-Nonce\": pmwAdminApi.nonce\n\t\t\t},\n\t\t\tbody: new URLSearchParams({\n\t\t\t\tsource: source\n\t\t\t}),\n\t\t\tcredentials: 'same-origin'\n\t\t})\n\t\t.then(response => {\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t\t}\n\t\t\treturn response.blob();\n\t\t})\n\t\t.then(blob => {\n\t\t\t// Create download link\n\t\t\tconst url = window.URL.createObjectURL(blob);\n\t\t\tconst a = document.createElement(\"a\");\n\t\t\ta.href = url;\n\t\t\ta.download = \"pmw-logs-\" + new Date().toISOString().slice(0,19).replace(/:/g, \"-\") + \".zip\";\n\t\t\tdocument.body.appendChild(a);\n\t\t\ta.click();\n\t\t\twindow.URL.revokeObjectURL(url);\n\t\t\tdocument.body.removeChild(a);\n\t\t\t\n\t\t\t// Re-enable the button\n\t\t\tbutton.prop(\"disabled\", false).text(originalText);\n\t\t})\n\t\t.catch(error => {\n\t\t\tconsole.error(\"Download error:\", error);\n\t\t\tbutton.prop(\"disabled\", false).text(originalText);\n\t\t\talert(\"Error downloading log files. Please try again.\");\n\t\t});\n\t});\n});\n\n// jQuery(function () {\n//\n// \timport(\"../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs\")\n// \t\t.then(({\n// \t\t\t\t computePosition,\n// \t\t\t\t flip,\n// \t\t\t\t shift,\n// \t\t\t\t offset,\n// \t\t\tarrow,\n// \t\t\t }) => {\n// \t\t\tconsole.log(\"computePosition: \", computePosition)\n//\n// \t\t\tconst button = document.querySelector('#button');\n// \t\t\tconst tooltip = document.querySelector('#tooltip');\n// \t\t\tconst arrowElement = document.querySelector('#arrow');\n//\n// \t\t\tcomputePosition(button, tooltip, {\n// \t\t\t\tplacement: 'top',\n// \t\t\t\tmiddleware: [\n// \t\t\t\t\toffset(6),\n// \t\t\t\t\tflip(),\n// \t\t\t\t\tshift({padding: 5}),\n// \t\t\t\t\tarrow({element: arrowElement}),\n// \t\t\t\t],\n// \t\t\t}).then(({x, y}) => {\n// \t\t\t\tObject.assign(tooltip.style, {\n// \t\t\t\t\tleft: `${x}px`,\n// \t\t\t\t\ttop: `${y}px`,\n// \t\t\t\t});\n// \t\t\t});\n//\n// \t\t})\n// \t\t.catch(err => {\n// \t\t\tconsole.error(err)\n// \t\t})\n//\n// });\n\n\n(function (wpm, $, undefined) {\n\n\twpm.saveSettingsToDisk = () => {\n\t\tlet text = document.getElementById(\"export-settings-json\").value;\n\n\t\t// Extract timestamp from the settings JSON\n\t\tlet timestamp = \"unknown\";\n\t\ttry {\n\t\t\tlet settings = JSON.parse(text);\n\t\t\tif (settings.timestamp) {\n\t\t\t\ttimestamp = settings.timestamp;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"Could not extract timestamp from settings:\", error);\n\t\t}\n\n\t\ttext = text.replace(/\\n/g, \"\\r\\n\"); // To retain the Line breaks.\n\t\tlet blob = new Blob([text], {type: \"text/plain\"});\n\t\tlet anchor = document.createElement(\"a\");\n\t\tanchor.download = \"pixel-manager-settings_\" + timestamp + \"_\" + wpm.getDateTimeFromTimestamp(timestamp) + \".json\";\n\t\tanchor.href = window.URL.createObjectURL(blob);\n\t\tanchor.target = \"_blank\";\n\t\tanchor.style.display = \"none\"; // just to be safe!\n\t\tdocument.body.appendChild(anchor);\n\t\tanchor.click();\n\t\tdocument.body.removeChild(anchor);\n\t};\n\n\t// Get date and time from timestamp in year.month.day_hour-minute-second format. All components are zero padded.\n\t// Uses WordPress site timezone to match what's displayed on admin pages.\n\twpm.getDateTimeFromTimestamp = (timestamp) => {\n\t\t// If timestamp is \"unknown\" or invalid, fall back to current date/time\n\t\tif (timestamp === \"unknown\" || !timestamp || isNaN(timestamp)) {\n\t\t\treturn wpm.getCurrentDateForFileName();\n\t\t}\n\n\t\t// Convert Unix timestamp (seconds) to milliseconds for JavaScript Date\n\t\tlet date = new Date(timestamp * 1000);\n\n\t\t// Apply WordPress timezone offset if available\n\t\tif (pmwAdminApi && pmwAdminApi.timezone && typeof pmwAdminApi.timezone.offset === \"number\") {\n\t\t\t// Create new date in WordPress timezone by adding the offset\n\t\t\tlet wpTimezoneOffsetMs = pmwAdminApi.timezone.offset * 60 * 60 * 1000; // Convert hours to milliseconds\n\t\t\tdate = new Date(date.getTime() + wpTimezoneOffsetMs);\n\n\t\t\t// Get WordPress timezone date/time components using UTC methods\n\t\t\t// (since we've already applied the offset to the date object)\n\t\t\tlet year = date.getUTCFullYear();\n\t\t\tlet month = (\"0\" + (date.getUTCMonth() + 1)).slice(-2);\n\t\t\tlet day = (\"0\" + date.getUTCDate()).slice(-2);\n\t\t\tlet hours = (\"0\" + date.getUTCHours()).slice(-2);\n\t\t\tlet minutes = (\"0\" + date.getUTCMinutes()).slice(-2);\n\t\t\tlet seconds = (\"0\" + date.getUTCSeconds()).slice(-2);\n\n\t\t\treturn year + \".\" + month + \".\" + day + \"_\" + hours + \"-\" + minutes + \"-\" + seconds;\n\t\t} else {\n\t\t\t// Fallback to browser local timezone if WordPress timezone data is not available\n\t\t\tlet year = date.getFullYear();\n\t\t\tlet month = (\"0\" + (date.getMonth() + 1)).slice(-2);\n\t\t\tlet day = (\"0\" + date.getDate()).slice(-2);\n\t\t\tlet hours = (\"0\" + date.getHours()).slice(-2);\n\t\t\tlet minutes = (\"0\" + date.getMinutes()).slice(-2);\n\t\t\tlet seconds = (\"0\" + date.getSeconds()).slice(-2);\n\t\t\treturn year + \".\" + month + \".\" + day + \"_\" + hours + \"-\" + minutes + \"-\" + seconds;\n\t\t}\n\t};\n\n\t// Get current date and time in year.month.day_hour-minute-second format. All components are zero padded.\n\t// Uses WordPress site timezone to match what's displayed on admin pages.\n\twpm.getCurrentDateForFileName = () => {\n\t\tlet date = new Date();\n\n\t\t// Apply WordPress timezone offset if available\n\t\tif (pmwAdminApi && pmwAdminApi.timezone && typeof pmwAdminApi.timezone.offset === \"number\") {\n\t\t\t// Apply WordPress timezone offset\n\t\t\tlet wpTimezoneOffsetMs = pmwAdminApi.timezone.offset * 60 * 60 * 1000; // Convert hours to milliseconds\n\t\t\tdate = new Date(date.getTime() + wpTimezoneOffsetMs);\n\n\t\t\t// Get WordPress timezone date/time components using UTC methods\n\t\t\t// (since we've already applied the offset to the date object)\n\t\t\tlet year = date.getUTCFullYear();\n\t\t\tlet month = (\"0\" + (date.getUTCMonth() + 1)).slice(-2);\n\t\t\tlet day = (\"0\" + date.getUTCDate()).slice(-2);\n\t\t\tlet hours = (\"0\" + date.getUTCHours()).slice(-2);\n\t\t\tlet minutes = (\"0\" + date.getUTCMinutes()).slice(-2);\n\t\t\tlet seconds = (\"0\" + date.getUTCSeconds()).slice(-2);\n\n\t\t\treturn year + \".\" + month + \".\" + day + \"_\" + hours + \"-\" + minutes + \"-\" + seconds;\n\t\t} else {\n\t\t\t// Fallback to browser local timezone if WordPress timezone data is not available\n\t\t\tlet year = date.getFullYear();\n\t\t\tlet month = (\"0\" + (date.getMonth() + 1)).slice(-2);\n\t\t\tlet day = (\"0\" + date.getDate()).slice(-2);\n\t\t\tlet hours = (\"0\" + date.getHours()).slice(-2);\n\t\t\tlet minutes = (\"0\" + date.getMinutes()).slice(-2);\n\t\t\tlet seconds = (\"0\" + date.getSeconds()).slice(-2);\n\t\t\treturn year + \".\" + month + \".\" + day + \"_\" + hours + \"-\" + minutes + \"-\" + seconds;\n\t\t}\n\n\t\t// return date.toLocaleDateString(\n\t\t// \t\"en-US\", {\n\t\t// \t\tyear : \"numeric\",\n\t\t// \t\tmonth: \"2-digit\",\n\t\t// \t\tday : \"2-digit\",\n\t\t// \t},\n\t\t// )\n\t};\n\n\twpm.readSettingsFile = e => {\n\n\t\tlet file = e.target.files[0];\n\t\tif (!file) return;\n\t\tlet reader = new FileReader();\n\t\treader.onload = function (e) {\n\n\t\t\t// Check if the file is a valid JSON file\n\t\t\t// If it is not a valid JSON file, display an error message\n\t\t\ttry {\n\t\t\t\tJSON.parse(e.target.result);\n\t\t\t} catch (error) {\n\t\t\t\tdocument.getElementById(\"settings-upload-status-error\").style.display = \"block\";\n\t\t\t\tdocument.getElementById(\"settings-upload-status-error-message\").innerHTML = \"Invalid JSON file.\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet contents = JSON.parse(e.target.result);\n\n\t\t\t// document.getElementById(\"import-settings-json\").textContent = JSON.stringify(contents)\n\n\t\t\twpm.saveImportedSettingsToDb(contents);\n\t\t};\n\t\treader.readAsText(file);\n\t};\n\n\twpm.saveImportedSettingsToDb = settings => {\n\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/settings/\", {\n\t\t\tmethod : \"POST\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\theaders : {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"X-WP-Nonce\" : pmwAdminApi.nonce,\n\t\t\t},\n\t\t\tbody : JSON.stringify(settings),\n\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(async message => {\n\t\t\t\tif (message.success) {\n\t\t\t\t\tconsole.log(message);\n\t\t\t\t\t// reload window\n\t\t\t\t\tdocument.getElementById(\"settings-upload-status-success\").style.display = \"block\";\n\t\t\t\t\t// wait 5 seconds\n\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 1000));\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(message);\n\t\t\t\t\tdocument.getElementById(\"settings-upload-status-error\").style.display = \"block\";\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tdocument.getElementById(\"settings-upload-status-error\").style.display = \"block\";\n\t\t\t});\n\t};\n\n\twpm.restoreBackup = (timestamp) => {\n\n\t\tconsole.log(\"restoreBackup() - timestamp: \", timestamp);\n\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/options-backup/\" + timestamp + \"/restore\", {\n\t\t\tmethod : \"POST\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\theaders : {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"X-WP-Nonce\" : pmwAdminApi.nonce,\n\t\t\t},\n\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(async message => {\n\n\t\t\t\tif (message?.data?.message) {\n\t\t\t\t\tconsole.log(\"restoreBackup() - message: \", message.data.message);\n\t\t\t\t}\n\n\t\t\t\tif (message.success) {\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t} else {\n\t\t\t\t\talert(message.data.message);\n\t\t\t\t}\n\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\talert(error.message);\n\t\t\t});\n\t};\n\n\twpm.readGa4DataApiCredentials = e => {\n\n\t\tlet file = e.target.files[0];\n\t\tif (!file) return;\n\t\tlet reader = new FileReader();\n\t\treader.onload = function (e) {\n\n\t\t\t// Check if the file is a valid JSON file\n\t\t\t// If it is not a valid JSON file, display an error message\n\t\t\ttry {\n\t\t\t\tJSON.parse(e.target.result);\n\t\t\t} catch (error) {\n\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error\").style.display = \"block\";\n\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error-message\").innerHTML = \"Invalid JSON file.\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet contents = JSON.parse(e.target.result);\n\n\t\t\t// document.getElementById(\"import-settings-json\").textContent = JSON.stringify(contents)\n\n\t\t\twpm.saveGa4DataApiCredentialsToDb(contents);\n\t\t};\n\t\treader.readAsText(file);\n\t};\n\n\twpm.deleteGa4DataApiCredentials = e => {\n\t\twpm.saveGa4DataApiCredentialsToDb({});\n\t};\n\n\twpm.saveGa4DataApiCredentialsToDb = credentials => {\n\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/ga4/data-api/credentials\", {\n\t\t\tmethod : \"POST\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\theaders : {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"X-WP-Nonce\" : pmwAdminApi.nonce,\n\t\t\t},\n\t\t\tbody : JSON.stringify(credentials),\n\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(async responseJson => {\n\t\t\t\tif (responseJson.success) {\n\t\t\t\t\tconsole.log(responseJson);\n\t\t\t\t\t// reload window\n\t\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-success\").style.display = \"block\";\n\t\t\t\t\t// wait 5 seconds\n\t\t\t\t\t// await new Promise(resolve => setTimeout(resolve, 5000))\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(responseJson);\n\t\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error\").style.display = \"block\";\n\t\t\t\t\t// and add the error message\n\t\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error-message\").innerHTML = \"Error message: \" + responseJson.data.message;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error\").style.display = \"block\";\n\t\t\t});\n\t};\n\n\twpm.getAiBotUrl = () => {\n\t\tif (pmw_cody?.url) {\n\t\t\treturn pmw_cody.url;\n\t\t}\n\t};\n\n\t/**\n\t * Opens the chatbot in a side panel (like n8n)\n\t * The panel slides in from the right side of the screen\n\t */\n\twpm.loadAiChatWindow = () => {\n\t\tconst panel = document.getElementById(\"pmw-chatbot-panel\");\n\t\tconst iframe = document.getElementById(\"pmw-chatbot-iframe\");\n\n\t\tif (!panel || !iframe) {\n\t\t\tconsole.error(\"Chatbot panel elements not found\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Set the iframe source\n\t\tiframe.src = wpm.getAiBotUrl();\n\n\t\t// Add body class to push content left\n\t\tdocument.body.classList.add(\"pmw-chatbot-open\");\n\n\t\t// Open the panel\n\t\tpanel.classList.add(\"pmw-chatbot-panel-open\");\n\t};\n\n\t/**\n\t * Closes the chatbot side panel\n\t */\n\twpm.closeChatbot = () => {\n\t\tconst panel = document.getElementById(\"pmw-chatbot-panel\");\n\t\tif (panel) {\n\t\t\tpanel.classList.remove(\"pmw-chatbot-panel-open\");\n\t\t\t// Remove body class to restore content position\n\t\t\tdocument.body.classList.remove(\"pmw-chatbot-open\");\n\t\t}\n\t};\n\n\t/**\n\t * Check if the Cody AI chatbot is available.\n\t *\n\t * @return {boolean}\n\t */\n\twpm.codyAvailable = () => {\n\t\tif (typeof window.pmw_cody !== \"undefined\" && window.pmw_cody?.available) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\t// Schedule a recalculation of the LTV by sending a POST REST request to the server\n\twpm.ltvRecalculation = event => {\n\n\t\tconst displayStatusMessage = (message) => {\n\t\t\tlet elements = document.getElementsByClassName(\"ltv-message\");\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\telements[i].style.display = \"none\";\n\t\t\t}\n\t\t\tdocument.getElementById(\"ltv-message-error\").style.display = \"block\";\n\t\t\tdocument.getElementById(\"ltv-message-error-text\").innerHTML = message;\n\t\t};\n\n\t\tconst displayRunImmediatelyButton = () => {\n\t\t\tlet elements = document.getElementsByClassName(\"ltv-button-text\");\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\telements[i].style.display = \"none\";\n\t\t\t}\n\t\t\tdocument.getElementById(\"ltv-instant-recalculation-button-text\").style.display = \"block\";\n\t\t};\n\n\t\tconst removeAllMessages = () => {\n\t\t\tlet elements = document.getElementsByClassName(\"ltv-message\");\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\telements[i].style.display = \"none\";\n\t\t\t}\n\n\t\t\tdocument.getElementById(\"ltv-message-error\").style.display = \"none\";\n\t\t};\n\n\t\t// console log the data-action from the nested span element of the clicked element\n\t\t// console.log(\"event.target.dataset.action\", event.target.dataset.action)\n\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/ltv/\", {\n\t\t\tmethod : \"POST\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\theaders : {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"X-WP-Nonce\" : pmwAdminApi.nonce,\n\t\t\t},\n\t\t\tbody : JSON.stringify({\n\t\t\t\t\"action\": event.target.dataset.action,\n\t\t\t}),\n\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(message => {\n\t\t\t\tif (message.success) {\n\t\t\t\t\tconsole.log(message);\n\t\t\t\t\t// reload window\n\n\t\t\t\t\tif (message.data.status.is_scheduled) {\n\t\t\t\t\t\tremoveAllMessages();\n\t\t\t\t\t\tdisplayRunImmediatelyButton();\n\t\t\t\t\t\tdocument.getElementById(\"ltv-schedule-recalculation-confirmation-message\").style.display = \"block\";\n\t\t\t\t\t}\n\n\t\t\t\t\tif (message.data.status.is_running) {\n\t\t\t\t\t\t// Get the button element with the id \"wgact_ltv_recalculation\" and disable it\n\t\t\t\t\t\tdocument.getElementById(\"wgact_ltv_recalculation\").disabled = true;\n\t\t\t\t\t\tremoveAllMessages();\n\t\t\t\t\t\tdocument.getElementById(\"ltv-running-recalculation-confirmation-message\").style.display = \"block\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// if is neither message.data.status.is_running nor message.data.status.is_scheduled\n\t\t\t\t\t// then display the error message\n\t\t\t\t\tif (!message.data.status.is_running && !message.data.status.is_scheduled) {\n\t\t\t\t\t\tdisplayStatusMessage(message.data.message);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t\tdisplayStatusMessage(message.data.message);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tdisplayStatusMessage(error);\n\t\t\t});\n\t};\n\n\twpm.copyTextToClipboard = (text) => {\n\t\tnavigator.clipboard.writeText(text)\n\t\t\t.catch(err => {\n\t\t\t\tconsole.error(\"Failed to copy: \", err);\n\t\t\t});\n\t};\n\n}(window.wpm = window.wpm || {}, jQuery));\n\n/**\n * This script listens for the DOMContentLoaded event. Once the DOM is fully loaded,\n * it checks if the chatbot (wpm.codyAvailable()) is available.\n * If the chatbot is available, it displays the chat widget button.\n * If the chatbot is not available, it logs a message to the console indicating that the chatbot is unavailable.\n *\n * @listens document#DOMContentLoaded\n */\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n\n\tif (wpm.codyAvailable()) {\n\t\tconst chatbotWidget = document.getElementById(\"pmw-chatbot-widget\");\n\t\tif (chatbotWidget) {\n\t\t\tchatbotWidget.style.display = \"block\";\n\t\t}\n\n\t\t// Show the chatbot line in the support section\n\t\tconst chatbotListItem = document.getElementById(\"pmw-chat-li\");\n\t\tif (chatbotListItem) {\n\t\t\tchatbotListItem.style.display = \"list-item\";\n\t\t}\n\n\t\t// Set up event listeners for the chatbot widget\n\t\tconst chatbotToggle = document.getElementById(\"pmw-chatbot-toggle\");\n\t\tconst chatbotClose = document.getElementById(\"pmw-chatbot-close\");\n\n\t\tif (chatbotToggle) {\n\t\t\tchatbotToggle.addEventListener(\"click\", (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\twpm.loadAiChatWindow();\n\t\t\t});\n\t\t}\n\n\t\tif (chatbotClose) {\n\t\t\tchatbotClose.addEventListener(\"click\", (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\twpm.closeChatbot();\n\t\t\t});\n\t\t}\n\n\t\t// Close chatbot on ESC key\n\t\tdocument.addEventListener(\"keydown\", (event) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\twpm.closeChatbot();\n\t\t\t}\n\t\t});\n\t} else {\n\t\tconsole.log(\"DOMContentLoaded - chatbot is not available\");\n\t}\n\n}, true);\n\n// Wait until the DOM is loaded, then console log\n// the message \"DOMContentLoaded - chatbot is not available\"\n// use jquery\njQuery(() => {\n\tif (document.querySelector(\"#wgact_ltv_recalculation\")) {\n\t\tdocument.querySelector(\"#wgact_ltv_recalculation\").addEventListener(\"click\", event => {\n\t\t\tevent.preventDefault();\n\t\t\twpm.ltvRecalculation(event);\n\t\t});\n\t}\n\n\tif (document.querySelector(\"#pmw_stop_ltv_calculation\")) {\n\t\tdocument.querySelector(\"#pmw_stop_ltv_calculation\").addEventListener(\"click\", event => {\n\t\t\tevent.preventDefault();\n\t\t\twpm.ltvRecalculation(event);\n\t\t});\n\t}\n\n\t// Add event listeners for backup restore buttons\n\tjQuery(() => {\n\t\tjQuery(document).on(\"click\", \".pmw-restore-backup-button\", function (event) {\n\t\t\tevent.preventDefault();\n\t\t\tconst timestamp = jQuery(this).data(\"timestamp\");\n\t\t\tif (timestamp) {\n\t\t\t\twpm.restoreBackup(timestamp);\n\t\t\t}\n\t\t});\n\t});\n});\n\n/**\n * add an event listener to the button with the id \"wgact_copy_log_file_links\"\n * when the button is clicked, copy the log file links to the clipboard\n * the data-links attribute of the button contains a json string with the links\n */\njQuery(() => {\n\n\tif (!document.querySelector(\"#wgact_copy_log_file_links\")) {\n\t\treturn;\n\t}\n\n\tdocument.querySelector(\"#wgact_copy_log_file_links\").addEventListener(\"click\", event => {\n\t\tevent.preventDefault();\n\n\t\tconst jsonOfLinks = JSON.parse(event.target.dataset.links);\n\n\t\tlet strOfLinks = \"\";\n\n\t\tfor (let i = 0, len = jsonOfLinks.length; i < len; i++) {\n\t\t\tstrOfLinks += jsonOfLinks[i] + \"\\n\";\n\t\t}\n\n\t\twpm.copyTextToClipboard(strOfLinks);\n\n\t\t// make the button text change to \"Copied!\" and keep the same width and text for 3 seconds\n\t\tlet button = document.getElementById(\"wgact_copy_log_file_links\");\n\t\tbutton.style.width = getComputedStyle(button).width;\n\t\tconst originalText = button.innerHTML;\n\t\tbutton.innerHTML = event.target.dataset.textCopied;\n\t\tsetTimeout(function () {\n\t\t\tbutton.innerHTML = originalText;\n\t\t}, 3000);\n\t});\n});\n\n// on pressing enter in form inputs, click the submit button\njQuery(() => {\n\tjQuery(document).on(\"keydown\", \"input, textarea, select\", function (event) {\n\t\tif (event.key === \"Enter\" && !event.shiftKey && !event.ctrlKey && !event.altKey) {\n\t\t\t// Only trigger submit if we're in a form and not in a textarea (where Enter should create new lines)\n\t\t\tconst $target = jQuery(event.target);\n\t\t\tif ($target.is(\"input\") && $target.closest(\"form\").length > 0) {\n\t\t\t\tconst form = $target.closest(\"form\")[0];\n\t\t\t\tconst submitButton = jQuery(form).find(\"#submit\");\n\t\t\t\tif (submitButton.length > 0) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsubmitButton.click();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Combine all admin scripts\n * (which only run on the wpm pages)\n */\n\n// require(\"./environment-check\")\nrequire(\"./helpers\")\nrequire(\"./script-blocker-warning\")\nrequire(\"./tabs\")\n\n// #if process.env.TIER === 'premium'\n// // require(\"./helpers_premium\")\n// #endif\n\n// console.log('Pixel Manager for WooCommerce admin script')\n"],"names":["wpm_hide_script_blocker_warning","jQuery","hide","wpmGetPageId","sections","subsections","closest","each","push","this","data","forEach","section","badge","append","after","wpmCreateSubtabUlHtml","on","e","preventDefault","addClass","siblings","removeClass","sectionSlug","wpmToggleSections","children","trigger","stopPropagation","wpmToggleSubsection","parent","wpmGetSectionParams","sectionParams","subsectionsKeys","Object","keys","html","subsectionKey","subtab","queryString","window","location","search","urlParams","URLSearchParams","get","nextUntil","andSelf","show","sectionPos","findIndex","arrayElement","prevAll","next","wpmSetUrl","subsectionSlug","delete","newParams","history","pushState","document","pathname","val","wpmGetAdminPath","URL","attr","includes","currentTarget","textarea","select","setSelectionRange","wpm","copyTextToClipboard","successElement","fadeIn","setTimeout","fadeOut","getElementById","addEventListener","readSettingsFile","readGa4DataApiCredentials","saveGa4DataApiCredentialsToDb","prop","source","button","originalText","text","fetch","pmwAdminApi","root","method","headers","nonce","body","credentials","then","response","ok","Error","status","blob","url","createObjectURL","a","createElement","href","download","Date","toISOString","slice","replace","appendChild","click","revokeObjectURL","removeChild","catch","error","console","alert","saveSettingsToDisk","value","timestamp","settings","JSON","parse","warn","Blob","type","anchor","getDateTimeFromTimestamp","target","style","display","isNaN","getCurrentDateForFileName","date","timezone","offset","wpTimezoneOffsetMs","getTime","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","file","files","reader","FileReader","onload","result","innerHTML","contents","saveImportedSettingsToDb","readAsText","stringify","json","async","message","success","log","Promise","resolve","reload","restoreBackup","deleteGa4DataApiCredentials","responseJson","getAiBotUrl","pmw_cody","loadAiChatWindow","panel","iframe","src","classList","add","closeChatbot","remove","codyAvailable","available","ltvRecalculation","event","displayStatusMessage","elements","getElementsByClassName","i","length","removeAllMessages","dataset","action","is_scheduled","displayRunImmediatelyButton","is_running","disabled","navigator","clipboard","writeText","err","chatbotWidget","chatbotListItem","chatbotToggle","chatbotClose","key","querySelector","jsonOfLinks","links","strOfLinks","len","width","getComputedStyle","textCopied","shiftKey","ctrlKey","altKey","$target","is","form","submitButton","find","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","require"],"sourceRoot":""} |
| | 1 | {"version":3,"file":"wpm-admin.p1.min.js","mappings":"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","sources":["webpack://Pixel-Manager-for-WooCommerce/./src/js-src/admin/script-blocker-warning.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/admin/tabs.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/admin/helpers.js","webpack://Pixel-Manager-for-WooCommerce/webpack/bootstrap","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/admin/main.js"],"sourcesContent":["function wpm_hide_script_blocker_warning() {\n\tjQuery(\"#script-blocker-notice\").hide()\n}\n\n// try to hide as soon as this script is loaded\n// might be too early in some cases, as the HTML is not rendered yet\nwpm_hide_script_blocker_warning()\n\n// if all other earlier attempts to hide did fail\n// run the function after entire DOM has been loaded\njQuery(function () {\n\twpm_hide_script_blocker_warning()\n})\n","jQuery(function () {\n\n\t// Don't run if we are not one of the\n\t// WPM main tabs\n\tif (\"wpm\" !== wpmGetPageId()) return\n\n\tlet sections = []\n\tlet subsections = {}\n\n\t// Hide unnecessary elements\n\tjQuery(\".section\").closest(\"tr\").hide()\n\n\t// Collect information on sections\n\tjQuery(\".section\").each(function () {\n\t\tsections.push({\n\t\t\t\"slug\" : jQuery(this).data(\"sectionSlug\"),\n\t\t\t\"title\" : jQuery(this).data(\"sectionTitle\"),\n\t\t\t\"badgeCount\": jQuery(this).data(\"badgeCount\") || 0,\n\t\t})\n\t})\n\n\t// Collect information on subsections\n\tjQuery(\".subsection\").each(function () {\n\n\t\tsubsections[jQuery(this).data(\"sectionSlug\")] = subsections[jQuery(this).data(\"sectionSlug\")] || []\n\n\t\tsubsections[jQuery(this).data(\"sectionSlug\")].push({\n\t\t\t\"title\": jQuery(this).data(\"subsectionTitle\"),\n\t\t\t\"slug\" : jQuery(this).data(\"subsectionSlug\"),\n\t\t})\n\t})\n\n\t// Create tabs for sections\n\tsections.forEach(\n\t\tfunction (section) {\n\t\t\tlet badge = section[\"badgeCount\"] > 0 ? \"<span class=\\\"pmw-tab-badge\\\">\" + section[\"badgeCount\"] + \"</span>\" : \"\"\n\t\t\tjQuery(\".nav-tab-wrapper\").append(\"<a href=\\\"#\\\" class=\\\"nav-tab\\\" data-section-slug=\\\"\" + section[\"slug\"] + \"\\\">\" + section[\"title\"] + badge + \"</a>\")\n\t\t})\n\n\t// Create tabs for each subsections\n\tjQuery(\".nav-tab-wrapper\").after(wpmCreateSubtabUlHtml(subsections))\n\n\t// Create on-click events on section tabs that toggle the views\n\tjQuery(\".nav-tab-wrapper a\").on(\"click\", function (e) {\n\n\t\te.preventDefault()\n\n\t\t// show clicked tab as active\n\t\tjQuery(this).addClass(\"nav-tab-active\").siblings().removeClass(\"nav-tab-active\")\n\n\t\t// toggle the sections visible / invisible based on clicked tab\n\n\t\tlet sectionSlug = jQuery(this).data(\"section-slug\")\n\t\twpmToggleSections(sectionSlug, sections)\n\n\t\t// if subsection exists, click on first subsection\n\t\tif (sectionSlug in subsections) {\n\t\t\tjQuery(\"ul[data-section-slug=\" + sectionSlug + \"]\").children(\":first\").trigger(\"click\")\n\t\t}\n\t})\n\n\t// Create on-click events on subsection tabs that toggle the views\n\tjQuery(\".pmw-subnav-li\").on(\"click\", function (e) {\n\n\t\te.preventDefault()\n\t\te.stopPropagation()\n\n\t\t// jQuery(this).hide();\n\t\tjQuery(this)\n\t\t\t.addClass(\"pmw-subnav-li-active\").removeClass(\"pmw-subnav-li-inactive\")\n\t\t\t.siblings()\n\t\t\t.addClass(\"pmw-subnav-li-inactive\").removeClass(\"pmw-subnav-li-active\")\n\n\t\twpmToggleSubsection(jQuery(this).parent().data(\"section-slug\"), jQuery(this).data(\"subsection-slug\"))\n\t})\n\n\t/**\n\t * If someone accesses a plugin tab by deep link, open the right tab\n\t * or fallback to default (first tab)\n\t *\n\t * If deeplink is being opened,\n\t * open the according section and subsection\n\t */\n\tif (wpmGetSectionParams()) {\n\n\t\tlet sectionParams = wpmGetSectionParams()\n\n\t\tjQuery(\"a[data-section-slug=\" + sectionParams[\"section\"] + \"]\").trigger(\"click\")\n\n\t\tif (sectionParams[\"subsection\"] !== false) {\n\t\t\tjQuery(\"ul[data-section-slug=\" + sectionParams[\"section\"] + \"]\").children(\"[data-subsection-slug=\" + sectionParams[\"subsection\"] + \"]\").trigger(\"click\")\n\t\t}\n\t} else {\n\t\tjQuery(\"a[data-section-slug=\" + sections[0][\"slug\"] + \"]\").trigger(\"click\")\n\t}\n})\n\n// Creates the html with all subsection elements\nwpmCreateSubtabUlHtml = (subsections) => {\n\n\tlet subsectionsKeys = Object.keys(subsections)\n\n\tlet html = \"\"\n\n\tsubsectionsKeys.forEach(function (subsectionKey) {\n\t\thtml += \"<ul class=\\\"pmw-subnav-tabs\\\" data-section-slug=\\\"\" + subsectionKey + \"\\\">\"\n\n\t\tlet subtabs = subsections[subsectionKey]\n\n\t\tsubtabs.forEach(function (subtab) {\n\t\t\thtml += \"<li class=\\\"pmw-subnav-li pmw-subnav-li-inactive\\\" style=\\\"cursor: pointer;\\\" data-subsection-slug=\\\"\" + subtab[\"slug\"] + \"\\\">\" + subtab[\"title\"] + \"</li>\"\n\t\t})\n\n\t\thtml += \"</ul>\"\n\t})\n\n\treturn html\n}\n\n/**\n * If section (and subsection) URL parameters are set,\n * return them, otherwise return false\n */\nwpmGetSectionParams = () => {\n\n\tconst queryString = window.location.search\n\tconst urlParams = new URLSearchParams(queryString)\n\n\tif (urlParams.get(\"section\")) {\n\t\treturn {\n\t\t\t\"section\" : urlParams.get(\"section\"),\n\t\t\t\"subsection\": urlParams.get(\"subsection\"),\n\t\t}\n\t} else {\n\t\treturn false\n\t}\n}\n\n// Toggles the sections\nwpmToggleSections = (sectionSlug, sections) => {\n\n\tjQuery(\"#wpm_settings_form > h2\").nextUntil(\".submit\").andSelf().hide()\n\tjQuery(\".pmw-subnav-tabs\").hide()\n\tjQuery(\".pmw-subnav-tabs[data-section-slug=\" + sectionSlug + \"]\").show()\n\n\tlet sectionPos = sections.findIndex((arrayElement) => arrayElement[\"slug\"] === sectionSlug)\n\n\tjQuery(\"div[data-section-slug=\" + sectionSlug + \"]\").closest(\"table\").prevAll(\"h2:first\").next().nextUntil(\"h2, .submit\").andSelf().show()\n\n\t// set the URL with the active tab parameter\n\twpmSetUrl(sections[sectionPos][\"slug\"])\n}\n\nconst wpmToggleSubsection = (sectionSlug, subsectionSlug) => {\n\n\tjQuery(\"#wpm_settings_form > h2\").nextUntil(\".submit\").andSelf().hide()\n\tjQuery(\"[data-section-slug=\" + sectionSlug + \"][data-subsection-slug=\" + subsectionSlug + \"]\").closest(\"tr\").siblings().andSelf().hide()\n\n\tjQuery(\"[data-section-slug=\" + sectionSlug + \"][data-subsection-slug=\" + subsectionSlug + \"]\").closest(\"table\").show()\n\tjQuery(\"[data-section-slug=\" + sectionSlug + \"][data-subsection-slug=\" + subsectionSlug + \"]\").closest(\"tr\").nextUntil(jQuery(\"[data-section-slug=\" + sectionSlug + \"][data-subsection-slug]\").closest(\"tr\")).show()\n\n\t// Set the URL with the active tab parameter\n\twpmSetUrl(sectionSlug, subsectionSlug)\n}\n\n// Sets the new URL parameters\nwpmSetUrl = (sectionSlug, subsectionSlug = \"\") => {\n\n\tconst queryString = window.location.search\n\tconst urlParams = new URLSearchParams(queryString)\n\n\turlParams.delete(\"section\")\n\turlParams.delete(\"subsection\")\n\n\tlet newParams = \"section=\" + sectionSlug\n\tnewParams += subsectionSlug ? \"&subsection=\" + subsectionSlug : \"\"\n\n\thistory.pushState(\"\", \"wpm\" + sectionSlug, document.location.pathname + \"?page=wpm&\" + newParams)\n\n\t// Make WP remember which was the selected tab on a save and return to the same tab after saving\n\tjQuery(\"input[name =\\\"_wp_http_referer\\\"]\").val(wpmGetAdminPath() + \"?page=wpm&\" + newParams + \"&settings-updated=true\")\n}\n\nwpmGetAdminPath = () => {\n\tlet url = new URL(jQuery(\"#wp-admin-canonical\").attr(\"href\"))\n\treturn url.pathname\n}\n\nwpmGetPageId = () => {\n\n\tconst queryString = window.location.search\n\tconst urlParams = new URLSearchParams(queryString)\n\n\treturn urlParams.get(\"page\")\n}\n\n// On click of an element that contains a data-section-slug with any value show an alert box with the text hello\njQuery(document).on(\"click\", \"[data-section-slug]\", function () {\n\n\tconst infoTabs = [\n\t\t\"opportunities\",\n\t\t\"diagnostics\",\n\t\t\"support\",\n\t]\n\n\t// If the data-section-slug value is one of infoTabs, hide the save button, otherwise show it\n\tif (infoTabs.includes(jQuery(this).data(\"section-slug\"))) {\n\t\t// Hide the element with class submit\n\t\tjQuery(\".submit\").hide()\n\t} else {\n\t\t// Show the element with class submit\n\t\tjQuery(\".submit\").show()\n\t}\n})\n\n\n// if a link with the class advanced-section-link is clicked,\n// get the data-AS-section and the data-AS-subsection values of the clicked element\n// and trigger a click on the element with the data-ssection-slug value and a click on the element with the data-subsection-slug value\njQuery(document).on(\"click\", \".advanced-section-link\", (e) => {\n\n\te.preventDefault()\n\n\tlet sectionSlug = jQuery(e.currentTarget).data(\"as-section\")\n\tlet subsectionSlug = jQuery(e.currentTarget).data(\"as-subsection\")\n\n\tjQuery(`a[data-section-slug=${sectionSlug}]`).trigger(\"click\")\n\n\tjQuery(`ul[data-section-slug=${sectionSlug}]`).children(`[data-subsection-slug=${subsectionSlug}]`).trigger(\"click\")\n})\n","jQuery(function () {\n\n\t/**\n\t * Copy debug info to clipboard when the button is clicked.\n\t */\n\tjQuery(\"#debug-info-button\").on(\"click\", () => {\n\t\t// Select text in textarea\n\t\tconst textarea = jQuery(\"#debug-info-textarea\")[0];\n\t\ttextarea.select();\n\t\ttextarea.setSelectionRange(0, 99999); // For mobile devices\n\n\t\t// Copy selected text to clipboard\n\t\twpm.copyTextToClipboard(jQuery(\"#debug-info-textarea\").val());\n\n\t\t// Show success message and hide after 3 seconds\n\t\tconst successElement = jQuery(\"#debug-info-success\");\n\t\tsuccessElement.fadeIn(200);\n\t\tsetTimeout(() => successElement.fadeOut(200), 3000);\n\t});\n\n\tjQuery(\"#pmw-pro-version-demo\").on(\"click\", function () {\n\t\tjQuery(\"#submit\").trigger(\"click\");\n\t});\n\n\tif (document.getElementById(\"json-settings-file-input\")) {\n\t\tdocument.getElementById(\"json-settings-file-input\")\n\t\t\t.addEventListener(\"change\", wpm.readSettingsFile, false);\n\t}\n\n\t// if element ga4-data-api-credentials-upload-button exists, then we are on the GA4 settings page\n\tif (document.getElementById(\"ga4-data-api-credentials-upload-button\")) {\n\n\t\tdocument.getElementById(\"ga4-data-api-credentials-upload-button\")\n\t\t\t.addEventListener(\"change\", wpm.readGa4DataApiCredentials, false);\n\t}\n\n\t// if element ga4-data-api-credentials-upload-button exists, then we are on the GA4 settings page\n\tif (document.getElementById(\"ga4-data-api-credentials-delete-button\")) {\n\n\t\tdocument.getElementById(\"ga4-data-api-credentials-delete-button\")\n\t\t\t.addEventListener(\"click\", () => {\n\t\t\t\twpm.saveGa4DataApiCredentialsToDb({});\n\t\t\t}, false);\n\t}\n\n\t/**\n\t * Handle log files download via REST API\n\t */\n\tjQuery(\"#wgact_download_logs_zip\").on(\"click\", function(e) {\n\t\te.preventDefault();\n\t\t\n\t\tif (jQuery(this).prop(\"disabled\")) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tconst source = jQuery(this).data(\"source\");\n\t\tconst button = jQuery(this);\n\t\tconst originalText = button.text();\n\t\t\n\t\t// Disable button and change text\n\t\tbutton.prop(\"disabled\", true).text(\"Downloading...\");\n\t\t\n\t\t// Use fetch with proper authentication\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/logs/download\", {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t\t\"X-WP-Nonce\": pmwAdminApi.nonce\n\t\t\t},\n\t\t\tbody: new URLSearchParams({\n\t\t\t\tsource: source\n\t\t\t}),\n\t\t\tcredentials: 'same-origin'\n\t\t})\n\t\t.then(response => {\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t\t}\n\t\t\treturn response.blob();\n\t\t})\n\t\t.then(blob => {\n\t\t\t// Create download link\n\t\t\tconst url = window.URL.createObjectURL(blob);\n\t\t\tconst a = document.createElement(\"a\");\n\t\t\ta.href = url;\n\t\t\ta.download = \"pmw-logs-\" + new Date().toISOString().slice(0,19).replace(/:/g, \"-\") + \".zip\";\n\t\t\tdocument.body.appendChild(a);\n\t\t\ta.click();\n\t\t\twindow.URL.revokeObjectURL(url);\n\t\t\tdocument.body.removeChild(a);\n\t\t\t\n\t\t\t// Re-enable the button\n\t\t\tbutton.prop(\"disabled\", false).text(originalText);\n\t\t})\n\t\t.catch(error => {\n\t\t\tconsole.error(\"Download error:\", error);\n\t\t\tbutton.prop(\"disabled\", false).text(originalText);\n\t\t\talert(\"Error downloading log files. Please try again.\");\n\t\t});\n\t});\n});\n\n// jQuery(function () {\n//\n// \timport(\"../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs\")\n// \t\t.then(({\n// \t\t\t\t computePosition,\n// \t\t\t\t flip,\n// \t\t\t\t shift,\n// \t\t\t\t offset,\n// \t\t\tarrow,\n// \t\t\t }) => {\n// \t\t\tconsole.log(\"computePosition: \", computePosition)\n//\n// \t\t\tconst button = document.querySelector('#button');\n// \t\t\tconst tooltip = document.querySelector('#tooltip');\n// \t\t\tconst arrowElement = document.querySelector('#arrow');\n//\n// \t\t\tcomputePosition(button, tooltip, {\n// \t\t\t\tplacement: 'top',\n// \t\t\t\tmiddleware: [\n// \t\t\t\t\toffset(6),\n// \t\t\t\t\tflip(),\n// \t\t\t\t\tshift({padding: 5}),\n// \t\t\t\t\tarrow({element: arrowElement}),\n// \t\t\t\t],\n// \t\t\t}).then(({x, y}) => {\n// \t\t\t\tObject.assign(tooltip.style, {\n// \t\t\t\t\tleft: `${x}px`,\n// \t\t\t\t\ttop: `${y}px`,\n// \t\t\t\t});\n// \t\t\t});\n//\n// \t\t})\n// \t\t.catch(err => {\n// \t\t\tconsole.error(err)\n// \t\t})\n//\n// });\n\n\n(function (wpm, $, undefined) {\n\n\twpm.saveSettingsToDisk = () => {\n\t\tlet text = document.getElementById(\"export-settings-json\").value;\n\n\t\t// Extract timestamp from the settings JSON\n\t\tlet timestamp = \"unknown\";\n\t\ttry {\n\t\t\tlet settings = JSON.parse(text);\n\t\t\tif (settings.timestamp) {\n\t\t\t\ttimestamp = settings.timestamp;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"Could not extract timestamp from settings:\", error);\n\t\t}\n\n\t\ttext = text.replace(/\\n/g, \"\\r\\n\"); // To retain the Line breaks.\n\t\tlet blob = new Blob([text], {type: \"text/plain\"});\n\t\tlet anchor = document.createElement(\"a\");\n\t\tanchor.download = \"pixel-manager-settings_\" + timestamp + \"_\" + wpm.getDateTimeFromTimestamp(timestamp) + \".json\";\n\t\tanchor.href = window.URL.createObjectURL(blob);\n\t\tanchor.target = \"_blank\";\n\t\tanchor.style.display = \"none\"; // just to be safe!\n\t\tdocument.body.appendChild(anchor);\n\t\tanchor.click();\n\t\tdocument.body.removeChild(anchor);\n\t};\n\n\t// Get date and time from timestamp in year.month.day_hour-minute-second format. All components are zero padded.\n\t// Uses WordPress site timezone to match what's displayed on admin pages.\n\twpm.getDateTimeFromTimestamp = (timestamp) => {\n\t\t// If timestamp is \"unknown\" or invalid, fall back to current date/time\n\t\tif (timestamp === \"unknown\" || !timestamp || isNaN(timestamp)) {\n\t\t\treturn wpm.getCurrentDateForFileName();\n\t\t}\n\n\t\t// Convert Unix timestamp (seconds) to milliseconds for JavaScript Date\n\t\tlet date = new Date(timestamp * 1000);\n\n\t\t// Apply WordPress timezone offset if available\n\t\tif (pmwAdminApi && pmwAdminApi.timezone && typeof pmwAdminApi.timezone.offset === \"number\") {\n\t\t\t// Create new date in WordPress timezone by adding the offset\n\t\t\tlet wpTimezoneOffsetMs = pmwAdminApi.timezone.offset * 60 * 60 * 1000; // Convert hours to milliseconds\n\t\t\tdate = new Date(date.getTime() + wpTimezoneOffsetMs);\n\n\t\t\t// Get WordPress timezone date/time components using UTC methods\n\t\t\t// (since we've already applied the offset to the date object)\n\t\t\tlet year = date.getUTCFullYear();\n\t\t\tlet month = (\"0\" + (date.getUTCMonth() + 1)).slice(-2);\n\t\t\tlet day = (\"0\" + date.getUTCDate()).slice(-2);\n\t\t\tlet hours = (\"0\" + date.getUTCHours()).slice(-2);\n\t\t\tlet minutes = (\"0\" + date.getUTCMinutes()).slice(-2);\n\t\t\tlet seconds = (\"0\" + date.getUTCSeconds()).slice(-2);\n\n\t\t\treturn year + \".\" + month + \".\" + day + \"_\" + hours + \"-\" + minutes + \"-\" + seconds;\n\t\t} else {\n\t\t\t// Fallback to browser local timezone if WordPress timezone data is not available\n\t\t\tlet year = date.getFullYear();\n\t\t\tlet month = (\"0\" + (date.getMonth() + 1)).slice(-2);\n\t\t\tlet day = (\"0\" + date.getDate()).slice(-2);\n\t\t\tlet hours = (\"0\" + date.getHours()).slice(-2);\n\t\t\tlet minutes = (\"0\" + date.getMinutes()).slice(-2);\n\t\t\tlet seconds = (\"0\" + date.getSeconds()).slice(-2);\n\t\t\treturn year + \".\" + month + \".\" + day + \"_\" + hours + \"-\" + minutes + \"-\" + seconds;\n\t\t}\n\t};\n\n\t// Get current date and time in year.month.day_hour-minute-second format. All components are zero padded.\n\t// Uses WordPress site timezone to match what's displayed on admin pages.\n\twpm.getCurrentDateForFileName = () => {\n\t\tlet date = new Date();\n\n\t\t// Apply WordPress timezone offset if available\n\t\tif (pmwAdminApi && pmwAdminApi.timezone && typeof pmwAdminApi.timezone.offset === \"number\") {\n\t\t\t// Apply WordPress timezone offset\n\t\t\tlet wpTimezoneOffsetMs = pmwAdminApi.timezone.offset * 60 * 60 * 1000; // Convert hours to milliseconds\n\t\t\tdate = new Date(date.getTime() + wpTimezoneOffsetMs);\n\n\t\t\t// Get WordPress timezone date/time components using UTC methods\n\t\t\t// (since we've already applied the offset to the date object)\n\t\t\tlet year = date.getUTCFullYear();\n\t\t\tlet month = (\"0\" + (date.getUTCMonth() + 1)).slice(-2);\n\t\t\tlet day = (\"0\" + date.getUTCDate()).slice(-2);\n\t\t\tlet hours = (\"0\" + date.getUTCHours()).slice(-2);\n\t\t\tlet minutes = (\"0\" + date.getUTCMinutes()).slice(-2);\n\t\t\tlet seconds = (\"0\" + date.getUTCSeconds()).slice(-2);\n\n\t\t\treturn year + \".\" + month + \".\" + day + \"_\" + hours + \"-\" + minutes + \"-\" + seconds;\n\t\t} else {\n\t\t\t// Fallback to browser local timezone if WordPress timezone data is not available\n\t\t\tlet year = date.getFullYear();\n\t\t\tlet month = (\"0\" + (date.getMonth() + 1)).slice(-2);\n\t\t\tlet day = (\"0\" + date.getDate()).slice(-2);\n\t\t\tlet hours = (\"0\" + date.getHours()).slice(-2);\n\t\t\tlet minutes = (\"0\" + date.getMinutes()).slice(-2);\n\t\t\tlet seconds = (\"0\" + date.getSeconds()).slice(-2);\n\t\t\treturn year + \".\" + month + \".\" + day + \"_\" + hours + \"-\" + minutes + \"-\" + seconds;\n\t\t}\n\n\t\t// return date.toLocaleDateString(\n\t\t// \t\"en-US\", {\n\t\t// \t\tyear : \"numeric\",\n\t\t// \t\tmonth: \"2-digit\",\n\t\t// \t\tday : \"2-digit\",\n\t\t// \t},\n\t\t// )\n\t};\n\n\twpm.readSettingsFile = e => {\n\n\t\tlet file = e.target.files[0];\n\t\tif (!file) return;\n\t\tlet reader = new FileReader();\n\t\treader.onload = function (e) {\n\n\t\t\t// Check if the file is a valid JSON file\n\t\t\t// If it is not a valid JSON file, display an error message\n\t\t\ttry {\n\t\t\t\tJSON.parse(e.target.result);\n\t\t\t} catch (error) {\n\t\t\t\tdocument.getElementById(\"settings-upload-status-error\").style.display = \"block\";\n\t\t\t\tdocument.getElementById(\"settings-upload-status-error-message\").innerHTML = \"Invalid JSON file.\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet contents = JSON.parse(e.target.result);\n\n\t\t\t// document.getElementById(\"import-settings-json\").textContent = JSON.stringify(contents)\n\n\t\t\twpm.saveImportedSettingsToDb(contents);\n\t\t};\n\t\treader.readAsText(file);\n\t};\n\n\twpm.saveImportedSettingsToDb = settings => {\n\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/settings/\", {\n\t\t\tmethod : \"POST\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\theaders : {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"X-WP-Nonce\" : pmwAdminApi.nonce,\n\t\t\t},\n\t\t\tbody : JSON.stringify(settings),\n\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(async message => {\n\t\t\t\tif (message.success) {\n\t\t\t\t\tconsole.log(message);\n\t\t\t\t\t// reload window\n\t\t\t\t\tdocument.getElementById(\"settings-upload-status-success\").style.display = \"block\";\n\t\t\t\t\t// wait 5 seconds\n\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 1000));\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(message);\n\t\t\t\t\tdocument.getElementById(\"settings-upload-status-error\").style.display = \"block\";\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tdocument.getElementById(\"settings-upload-status-error\").style.display = \"block\";\n\t\t\t});\n\t};\n\n\twpm.restoreBackup = (timestamp) => {\n\n\t\tconsole.log(\"restoreBackup() - timestamp: \", timestamp);\n\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/options-backup/\" + timestamp + \"/restore\", {\n\t\t\tmethod : \"POST\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\theaders : {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"X-WP-Nonce\" : pmwAdminApi.nonce,\n\t\t\t},\n\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(async message => {\n\n\t\t\t\tif (message?.data?.message) {\n\t\t\t\t\tconsole.log(\"restoreBackup() - message: \", message.data.message);\n\t\t\t\t}\n\n\t\t\t\tif (message.success) {\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t} else {\n\t\t\t\t\talert(message.data.message);\n\t\t\t\t}\n\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\talert(error.message);\n\t\t\t});\n\t};\n\n\twpm.readGa4DataApiCredentials = e => {\n\n\t\tlet file = e.target.files[0];\n\t\tif (!file) return;\n\t\tlet reader = new FileReader();\n\t\treader.onload = function (e) {\n\n\t\t\t// Check if the file is a valid JSON file\n\t\t\t// If it is not a valid JSON file, display an error message\n\t\t\ttry {\n\t\t\t\tJSON.parse(e.target.result);\n\t\t\t} catch (error) {\n\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error\").style.display = \"block\";\n\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error-message\").innerHTML = \"Invalid JSON file.\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet contents = JSON.parse(e.target.result);\n\n\t\t\t// document.getElementById(\"import-settings-json\").textContent = JSON.stringify(contents)\n\n\t\t\twpm.saveGa4DataApiCredentialsToDb(contents);\n\t\t};\n\t\treader.readAsText(file);\n\t};\n\n\twpm.deleteGa4DataApiCredentials = e => {\n\t\twpm.saveGa4DataApiCredentialsToDb({});\n\t};\n\n\twpm.saveGa4DataApiCredentialsToDb = credentials => {\n\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/ga4/data-api/credentials\", {\n\t\t\tmethod : \"POST\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\theaders : {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"X-WP-Nonce\" : pmwAdminApi.nonce,\n\t\t\t},\n\t\t\tbody : JSON.stringify(credentials),\n\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(async responseJson => {\n\t\t\t\tif (responseJson.success) {\n\t\t\t\t\tconsole.log(responseJson);\n\t\t\t\t\t// reload window\n\t\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-success\").style.display = \"block\";\n\t\t\t\t\t// wait 5 seconds\n\t\t\t\t\t// await new Promise(resolve => setTimeout(resolve, 5000))\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(responseJson);\n\t\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error\").style.display = \"block\";\n\t\t\t\t\t// and add the error message\n\t\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error-message\").innerHTML = \"Error message: \" + responseJson.data.message;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tdocument.getElementById(\"ga4-api-credentials-upload-status-error\").style.display = \"block\";\n\t\t\t});\n\t};\n\n\twpm.getAiBotUrl = () => {\n\t\tif (pmw_cody?.url) {\n\t\t\treturn pmw_cody.url;\n\t\t}\n\t};\n\n\t/**\n\t * Opens the chatbot in a side panel (like n8n)\n\t * The panel slides in from the right side of the screen\n\t */\n\twpm.loadAiChatWindow = () => {\n\t\tconst panel = document.getElementById(\"pmw-chatbot-panel\");\n\t\tconst iframe = document.getElementById(\"pmw-chatbot-iframe\");\n\n\t\tif (!panel || !iframe) {\n\t\t\tconsole.error(\"Chatbot panel elements not found\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Set the iframe source\n\t\tiframe.src = wpm.getAiBotUrl();\n\n\t\t// Add body class to push content left\n\t\tdocument.body.classList.add(\"pmw-chatbot-open\");\n\n\t\t// Open the panel\n\t\tpanel.classList.add(\"pmw-chatbot-panel-open\");\n\t};\n\n\t/**\n\t * Closes the chatbot side panel\n\t */\n\twpm.closeChatbot = () => {\n\t\tconst panel = document.getElementById(\"pmw-chatbot-panel\");\n\t\tif (panel) {\n\t\t\tpanel.classList.remove(\"pmw-chatbot-panel-open\");\n\t\t\t// Remove body class to restore content position\n\t\t\tdocument.body.classList.remove(\"pmw-chatbot-open\");\n\t\t}\n\t};\n\n\t/**\n\t * Check if the Cody AI chatbot is available.\n\t *\n\t * @return {boolean}\n\t */\n\twpm.codyAvailable = () => {\n\t\tif (typeof window.pmw_cody !== \"undefined\" && window.pmw_cody?.available) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\t// Schedule a recalculation of the LTV by sending a POST REST request to the server\n\twpm.ltvRecalculation = event => {\n\n\t\tconst displayStatusMessage = (message) => {\n\t\t\tlet elements = document.getElementsByClassName(\"ltv-message\");\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\telements[i].style.display = \"none\";\n\t\t\t}\n\t\t\tdocument.getElementById(\"ltv-message-error\").style.display = \"block\";\n\t\t\tdocument.getElementById(\"ltv-message-error-text\").innerHTML = message;\n\t\t};\n\n\t\tconst displayRunImmediatelyButton = () => {\n\t\t\tlet elements = document.getElementsByClassName(\"ltv-button-text\");\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\telements[i].style.display = \"none\";\n\t\t\t}\n\t\t\tdocument.getElementById(\"ltv-instant-recalculation-button-text\").style.display = \"block\";\n\t\t};\n\n\t\tconst removeAllMessages = () => {\n\t\t\tlet elements = document.getElementsByClassName(\"ltv-message\");\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\telements[i].style.display = \"none\";\n\t\t\t}\n\n\t\t\tdocument.getElementById(\"ltv-message-error\").style.display = \"none\";\n\t\t};\n\n\t\t// console log the data-action from the nested span element of the clicked element\n\t\t// console.log(\"event.target.dataset.action\", event.target.dataset.action)\n\n\t\tfetch(pmwAdminApi.root + \"pmw/v1/ltv/\", {\n\t\t\tmethod : \"POST\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\theaders : {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"X-WP-Nonce\" : pmwAdminApi.nonce,\n\t\t\t},\n\t\t\tbody : JSON.stringify({\n\t\t\t\t\"action\": event.target.dataset.action,\n\t\t\t}),\n\t\t})\n\t\t\t.then(response => response.json())\n\t\t\t.then(message => {\n\t\t\t\tif (message.success) {\n\t\t\t\t\tconsole.log(message);\n\t\t\t\t\t// reload window\n\n\t\t\t\t\tif (message.data.status.is_scheduled) {\n\t\t\t\t\t\tremoveAllMessages();\n\t\t\t\t\t\tdisplayRunImmediatelyButton();\n\t\t\t\t\t\tdocument.getElementById(\"ltv-schedule-recalculation-confirmation-message\").style.display = \"block\";\n\t\t\t\t\t}\n\n\t\t\t\t\tif (message.data.status.is_running) {\n\t\t\t\t\t\t// Get the button element with the id \"wgact_ltv_recalculation\" and disable it\n\t\t\t\t\t\tdocument.getElementById(\"wgact_ltv_recalculation\").disabled = true;\n\t\t\t\t\t\tremoveAllMessages();\n\t\t\t\t\t\tdocument.getElementById(\"ltv-running-recalculation-confirmation-message\").style.display = \"block\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// if is neither message.data.status.is_running nor message.data.status.is_scheduled\n\t\t\t\t\t// then display the error message\n\t\t\t\t\tif (!message.data.status.is_running && !message.data.status.is_scheduled) {\n\t\t\t\t\t\tdisplayStatusMessage(message.data.message);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t\tdisplayStatusMessage(message.data.message);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tdisplayStatusMessage(error);\n\t\t\t});\n\t};\n\n\twpm.copyTextToClipboard = (text) => {\n\t\tnavigator.clipboard.writeText(text)\n\t\t\t.catch(err => {\n\t\t\t\tconsole.error(\"Failed to copy: \", err);\n\t\t\t});\n\t};\n\n}(window.wpm = window.wpm || {}, jQuery));\n\n/**\n * This script listens for the DOMContentLoaded event. Once the DOM is fully loaded,\n * it checks if the chatbot (wpm.codyAvailable()) is available.\n * If the chatbot is available, it displays the chat widget button.\n * If the chatbot is not available, it logs a message to the console indicating that the chatbot is unavailable.\n *\n * @listens document#DOMContentLoaded\n */\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n\n\tif (wpm.codyAvailable()) {\n\t\tconst chatbotWidget = document.getElementById(\"pmw-chatbot-widget\");\n\t\tif (chatbotWidget) {\n\t\t\tchatbotWidget.style.display = \"block\";\n\t\t}\n\n\t\t// Show the chatbot line in the support section\n\t\tconst chatbotListItem = document.getElementById(\"pmw-chat-li\");\n\t\tif (chatbotListItem) {\n\t\t\tchatbotListItem.style.display = \"list-item\";\n\t\t}\n\n\t\t// Set up event listeners for the chatbot widget\n\t\tconst chatbotToggle = document.getElementById(\"pmw-chatbot-toggle\");\n\t\tconst chatbotClose = document.getElementById(\"pmw-chatbot-close\");\n\n\t\tif (chatbotToggle) {\n\t\t\tchatbotToggle.addEventListener(\"click\", (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\twpm.loadAiChatWindow();\n\t\t\t});\n\t\t}\n\n\t\tif (chatbotClose) {\n\t\t\tchatbotClose.addEventListener(\"click\", (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\twpm.closeChatbot();\n\t\t\t});\n\t\t}\n\n\t\t// Close chatbot on ESC key\n\t\tdocument.addEventListener(\"keydown\", (event) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\twpm.closeChatbot();\n\t\t\t}\n\t\t});\n\t} else {\n\t\tconsole.log(\"DOMContentLoaded - chatbot is not available\");\n\t}\n\n}, true);\n\n// Wait until the DOM is loaded, then console log\n// the message \"DOMContentLoaded - chatbot is not available\"\n// use jquery\njQuery(() => {\n\tif (document.querySelector(\"#wgact_ltv_recalculation\")) {\n\t\tdocument.querySelector(\"#wgact_ltv_recalculation\").addEventListener(\"click\", event => {\n\t\t\tevent.preventDefault();\n\t\t\twpm.ltvRecalculation(event);\n\t\t});\n\t}\n\n\tif (document.querySelector(\"#pmw_stop_ltv_calculation\")) {\n\t\tdocument.querySelector(\"#pmw_stop_ltv_calculation\").addEventListener(\"click\", event => {\n\t\t\tevent.preventDefault();\n\t\t\twpm.ltvRecalculation(event);\n\t\t});\n\t}\n\n\t// Add event listeners for backup restore buttons\n\tjQuery(() => {\n\t\tjQuery(document).on(\"click\", \".pmw-restore-backup-button\", function (event) {\n\t\t\tevent.preventDefault();\n\t\t\tconst timestamp = jQuery(this).data(\"timestamp\");\n\t\t\tif (timestamp) {\n\t\t\t\twpm.restoreBackup(timestamp);\n\t\t\t}\n\t\t});\n\t});\n});\n\n/**\n * add an event listener to the button with the id \"wgact_copy_log_file_links\"\n * when the button is clicked, copy the log file links to the clipboard\n * the data-links attribute of the button contains a json string with the links\n */\njQuery(() => {\n\n\tif (!document.querySelector(\"#wgact_copy_log_file_links\")) {\n\t\treturn;\n\t}\n\n\tdocument.querySelector(\"#wgact_copy_log_file_links\").addEventListener(\"click\", event => {\n\t\tevent.preventDefault();\n\n\t\tconst jsonOfLinks = JSON.parse(event.target.dataset.links);\n\n\t\tlet strOfLinks = \"\";\n\n\t\tfor (let i = 0, len = jsonOfLinks.length; i < len; i++) {\n\t\t\tstrOfLinks += jsonOfLinks[i] + \"\\n\";\n\t\t}\n\n\t\twpm.copyTextToClipboard(strOfLinks);\n\n\t\t// make the button text change to \"Copied!\" and keep the same width and text for 3 seconds\n\t\tlet button = document.getElementById(\"wgact_copy_log_file_links\");\n\t\tbutton.style.width = getComputedStyle(button).width;\n\t\tconst originalText = button.innerHTML;\n\t\tbutton.innerHTML = event.target.dataset.textCopied;\n\t\tsetTimeout(function () {\n\t\t\tbutton.innerHTML = originalText;\n\t\t}, 3000);\n\t});\n});\n\n// on pressing enter in form inputs, click the submit button\njQuery(() => {\n\tjQuery(document).on(\"keydown\", \"input, textarea, select\", function (event) {\n\t\tif (event.key === \"Enter\" && !event.shiftKey && !event.ctrlKey && !event.altKey) {\n\t\t\t// Only trigger submit if we're in a form and not in a textarea (where Enter should create new lines)\n\t\t\tconst $target = jQuery(event.target);\n\t\t\tif ($target.is(\"input\") && $target.closest(\"form\").length > 0) {\n\t\t\t\tconst form = $target.closest(\"form\")[0];\n\t\t\t\tconst submitButton = jQuery(form).find(\"#submit\");\n\t\t\t\tif (submitButton.length > 0) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsubmitButton.click();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Combine all admin scripts\n * (which only run on the wpm pages)\n */\n\n// require(\"./environment-check\")\nrequire(\"./helpers\")\nrequire(\"./script-blocker-warning\")\nrequire(\"./tabs\")\n\n// #if process.env.TIER === 'premium'\n// // require(\"./helpers_premium\")\n// #endif\n\n// console.log('Pixel Manager for WooCommerce admin script')\n"],"names":["wpm_hide_script_blocker_warning","jQuery","hide","wpmGetPageId","sections","subsections","closest","each","push","this","data","forEach","section","badge","append","after","wpmCreateSubtabUlHtml","on","e","preventDefault","addClass","siblings","removeClass","sectionSlug","wpmToggleSections","children","trigger","stopPropagation","wpmToggleSubsection","parent","wpmGetSectionParams","sectionParams","subsectionsKeys","Object","keys","html","subsectionKey","subtab","queryString","window","location","search","urlParams","URLSearchParams","get","nextUntil","andSelf","show","sectionPos","findIndex","arrayElement","prevAll","next","wpmSetUrl","subsectionSlug","delete","newParams","history","pushState","document","pathname","val","wpmGetAdminPath","URL","attr","includes","currentTarget","textarea","select","setSelectionRange","wpm","copyTextToClipboard","successElement","fadeIn","setTimeout","fadeOut","getElementById","addEventListener","readSettingsFile","readGa4DataApiCredentials","saveGa4DataApiCredentialsToDb","prop","source","button","originalText","text","fetch","pmwAdminApi","root","method","headers","nonce","body","credentials","then","response","ok","Error","status","blob","url","createObjectURL","a","createElement","href","download","Date","toISOString","slice","replace","appendChild","click","revokeObjectURL","removeChild","catch","error","console","alert","saveSettingsToDisk","value","timestamp","settings","JSON","parse","warn","Blob","type","anchor","getDateTimeFromTimestamp","target","style","display","isNaN","getCurrentDateForFileName","date","timezone","offset","wpTimezoneOffsetMs","getTime","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","file","files","reader","FileReader","onload","result","innerHTML","contents","saveImportedSettingsToDb","readAsText","stringify","json","async","message","success","log","Promise","resolve","reload","restoreBackup","deleteGa4DataApiCredentials","responseJson","getAiBotUrl","pmw_cody","loadAiChatWindow","panel","iframe","src","classList","add","closeChatbot","remove","codyAvailable","available","ltvRecalculation","event","displayStatusMessage","elements","getElementsByClassName","i","length","removeAllMessages","dataset","action","is_scheduled","displayRunImmediatelyButton","is_running","disabled","navigator","clipboard","writeText","err","chatbotWidget","chatbotListItem","chatbotToggle","chatbotClose","key","querySelector","jsonOfLinks","links","strOfLinks","len","width","getComputedStyle","textCopied","shiftKey","ctrlKey","altKey","$target","is","form","submitButton","find","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","require"],"ignoreList":[],"sourceRoot":""} |