From edd43273bb69a4cbdd6aaaebc5f586eb1c8ab90b Mon Sep 17 00:00:00 2001 From: Eric Schultz Date: Sun, 11 Jun 2023 18:09:08 -0500 Subject: [PATCH] Fix bug in the wizard --- app/javascript/common/UrlSearchParams.ts | 19 +++++++++++++++++++ .../donate-button/donate-button.v2.ts | 17 +++++++++++------ 2 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 app/javascript/common/UrlSearchParams.ts diff --git a/app/javascript/common/UrlSearchParams.ts b/app/javascript/common/UrlSearchParams.ts new file mode 100644 index 000000000..5e9525a21 --- /dev/null +++ b/app/javascript/common/UrlSearchParams.ts @@ -0,0 +1,19 @@ +// License: LGPL-3.0-or-later + +export function appendAll(base:URLSearchParams, toAdd:URLSearchParams):URLSearchParams; +export function appendAll(base:URLSearchParams, toAdd:Record):URLSearchParams; +export function appendAll(base:URLSearchParams, toAdd:Record | URLSearchParams):URLSearchParams +{ + if (toAdd instanceof URLSearchParams) { + toAdd.forEach((value, key) => { + base.append(key, value); + }); + } + else { + for (const key in toAdd) { + base.append(key, toAdd[key]); + } + } + + return base; +} diff --git a/app/javascript/donate-button/donate-button.v2.ts b/app/javascript/donate-button/donate-button.v2.ts index 67f1f6fbb..1232468f0 100644 --- a/app/javascript/donate-button/donate-button.v2.ts +++ b/app/javascript/donate-button/donate-button.v2.ts @@ -1,3 +1,5 @@ +import { appendAll } from "../common/UrlSearchParams"; + const donate_css = require('../../assets/stylesheets/donate-button/donate-button.v2.css'); const iframeHost = require('./details.js.erb') @@ -55,11 +57,14 @@ const iframeHost = require('./details.js.erb') return div } - commitchange.createIframe = (source:string) => { + commitchange.createIframe = (source:URL, params:URLSearchParams=new URLSearchParams()) => { let i = document.createElement('iframe') const url = document.location.href i.setAttribute('class', 'commitchange-closed commitchange-iframe') - i.src = source + "&origin=" + url + + appendAll(source.searchParams, params); + source.searchParams.set(origin, url); + i.src = source.toString(); return i } @@ -97,7 +102,7 @@ const iframeHost = require('./details.js.erb') } // Remove false values from the options - for(let key in options) { + for(const key in options) { if(!options[key]) delete options[key] } return options @@ -113,19 +118,19 @@ const iframeHost = require('./details.js.erb') for(let i = 0; i < elems.length; ++i) { let elem:any = elems[i] - let source = baseSource + let source = new URL(baseSource) const options = { offsite: "t", ...commitchange.getParamsFromUrl(["utm_campaign","utm_content","utm_source","utm_medium","first_name","last_name","country","postal_code","address","city"]), ...commitchange.getParamsFromButton(elem) - } + } as Record const params = new URLSearchParams(options); if(elem.hasAttribute('data-embedded')) { params.append("mode", "embedded"); - let iframe = commitchange.createIframe(new URL(baseSource + "&" + params.toString()).toString()); + let iframe = commitchange.createIframe(new URL(baseSource), params); elem.appendChild(iframe) iframe.setAttribute('class', 'commitchange-iframe-embedded') commitchange.iframes.push(iframe)