{"version":3,"file":"campaignDetail.js","sources":["../../../src/assets/scripts/creditcard/campaignDetail.js","../../../src/functions/cards/mergeUrlParams.js"],"sourcesContent":["import { mergeUrlParams } from '../../../functions/cards/mergeUrlParams'\n\nconst TARGET_HOSTS = ['www.saisoncard.co.jp', 'entry.saisoncard.co.jp']\nconst KEYS_TO_REJECT = ['utm_campaign']\n\n// GETクエリをカード詳細へと引き継ぐ処理\nfunction campaignDetail() {\n const parsedPageUrl = new URL(location.href)\n\n if (parsedPageUrl.search === '') {\n return\n }\n\n const container = document.querySelector('#campaignDetailContent')\n\n // それぞれのキャンペーンについて、CMSにてこの処理を行わないことを管理者は選択可能\n // その場合はdata-no-param-forwarding属性にtrueが入っているので、その場合は処理を行わない\n const noParamForwarding = container.getAttribute('data-no-param-forwarding') === 'true'\n if (noParamForwarding) {\n return\n }\n\n const targetSelectors = [\n '.sc21-BTN-normal[href]',\n '.sc21-CreditCardCampaignDetail-cardLink',\n '[data-dialog-order-button]',\n ]\n const links = container.querySelectorAll(targetSelectors.join(','))\n const targets = [...links].filter(isValidTarget)\n targets.forEach(target => {\n const hrefValue = target.getAttribute('href')\n const mergedUrl = mergeUrlParams(hrefValue, location.href, location.origin, KEYS_TO_REJECT)\n target.setAttribute('href', mergedUrl)\n })\n}\n\n// リンク先が同一ドメインかチェック\nfunction isValidTarget(link) {\n if (!link.href) {\n return false\n }\n const hrefUrl = new URL(link.href)\n // ホストチェック\n const isTarget = TARGET_HOSTS.some(host => hrefUrl.hostname === host)\n // ホストチェックだけだとステージングとかで絶対URLを弾いてしまうので、オリジンで同一サイトかどうかもチェックする\n return isTarget || hrefUrl.origin === location.origin\n}\n\ncampaignDetail()\n","/**\n * baseUrlにappendParamsのパラメータをマージする\n * @param sourceUrl {string} カード詳細では申込みボタンのリンクが該当 例: http://app.example.com?foo=1&bar=2\n * @param urlToMerge {string} カード詳細ではページのURLが該当 例: http://www.example.com?baz=3\n * @param baseUrl {string} new URLの第2引数に渡すURL\n * @param keysToReject {string[]} マージを除外するパラメータのキー 例: ['utm_campaign']\n * @returns {string} 例: http://app.example.com?foo=1&bar=2&baz=3\n */\nexport function mergeUrlParams(sourceUrl, urlToMerge, baseUrl, keysToReject = []) {\n const parsedBaseUrl = new URL(sourceUrl, baseUrl)\n const params = parsedBaseUrl.searchParams\n const parsedUrlToMerge = new URL(urlToMerge, baseUrl)\n const paramsToMerge = parsedUrlToMerge.searchParams\n\n paramsToMerge.forEach((value, key) => {\n if (keysToReject.includes(key)) {\n return\n }\n if (value) {\n params.append(key, paramsToMerge.get(key))\n } else {\n // 「&foo」のような=が無いケースでは、&foo=0とする(参照: https://github.com/pxgrid/www.saisoncard.co.jp/issues/146#issuecomment-748798524\n params.append(key, '0')\n }\n })\n\n return sourceUrl.replace(/\\?.+=.+/, '') + '?' + params.toString()\n}\n"],"names":["TARGET_HOSTS","KEYS_TO_REJECT","isValidTarget","link","href","hrefUrl","URL","some","host","hostname","origin","location","search","container","document","querySelector","getAttribute","querySelectorAll","join","filter","forEach","target","mergedUrl","sourceUrl","urlToMerge","baseUrl","keysToReject","params","searchParams","paramsToMerge","value","key","includes","append","get","replace","toString","mergeUrlParams","setAttribute","campaignDetail"],"mappings":"2FAEA,MAAMA,EAAe,CAAC,uBAAwB,0BACxCC,EAAiB,CAAC,gBAkCxB,SAASC,EAAcC,GACrB,IAAKA,EAAKC,KACR,OAAO,EAET,MAAMC,EAAU,IAAIC,IAAIH,EAAKC,MAI7B,OAFiBJ,EAAaO,MAAKC,GAAQH,EAAQI,WAAaD,KAE7CH,EAAQK,SAAWC,SAASD,MACjD,EAxCA,WAGE,GAA6B,KAFP,IAAIJ,IAAIK,SAASP,MAErBQ,OAChB,OAGF,MAAMC,EAAYC,SAASC,cAAc,0BAKzC,GADiF,SAAvDF,EAAUG,aAAa,4BAE/C,OASc,IADFH,EAAUI,iBALA,CACtB,yBACA,0CACA,8BAEuDC,KAAK,OACnCC,OAAOjB,GAC1BkB,SAAQC,IACd,MACMC,ECvBH,SAAwBC,EAAWC,EAAYC,EAASC,EAAe,IAC5E,MACMC,EADgB,IAAIrB,IAAIiB,EAAWE,GACZG,aAEvBC,EADmB,IAAIvB,IAAIkB,EAAYC,GACNG,aAcvC,OAZAC,EAAcT,SAAQ,CAACU,EAAOC,KACxBL,EAAaM,SAASD,KAGtBD,EACFH,EAAOM,OAAOF,EAAKF,EAAcK,IAAIH,IAGrCJ,EAAOM,OAAOF,EAAK,KACpB,IAGIR,EAAUY,QAAQ,UAAW,IAAM,IAAMR,EAAOS,UACzD,CDIsBC,CADAhB,EAAOL,aAAa,QACML,SAASP,KAAMO,SAASD,OAAQT,GAC5EoB,EAAOiB,aAAa,OAAQhB,EAAU,GAE1C,CAcAiB"}