From 8d34088021b1c29d69baed941e4705d575dfb074 Mon Sep 17 00:00:00 2001 From: iw0 Date: Fri, 13 Oct 2023 20:48:11 +0200 Subject: [PATCH] initial commit --- content_script.js | 82 +++++++++++++++++++++++++++++++++++++++++++++ icons/icon.png | Bin 0 -> 3066 bytes manifest.json | 30 +++++++++++++++++ options/index.html | 28 ++++++++++++++++ options/script.js | 29 ++++++++++++++++ options/style.css | 3 ++ 6 files changed, 172 insertions(+) create mode 100644 content_script.js create mode 100644 icons/icon.png create mode 100644 manifest.json create mode 100644 options/index.html create mode 100644 options/script.js create mode 100644 options/style.css diff --git a/content_script.js b/content_script.js new file mode 100644 index 0000000..b0acd01 --- /dev/null +++ b/content_script.js @@ -0,0 +1,82 @@ +// Put all the javascript code here, that you want to execute after page load. + +let bcFilled = false; +let bdayFilled = false; +let clickThroughForms = false; + +function clickContinue() { + if (bdayFilled && bcFilled) { + document.querySelector('.fahrgastrechte-bahn-card-auswahl button.fahrgastrechte-continue-button')?.dispatchEvent(new Event('click')); + } +} + +function processMutations(mutationList, observer) { + for (const mutation of mutationList) { + if (mutation.type === "childList") { + mutation.addedNodes.forEach(node => { + if (node.nodeType === 1) { + if (node.classList.contains("antrag-starten")) { + node.querySelector('button.test-antrag-starten-button').dispatchEvent(new Event('click', { bubbles: true })); + } + else if (node.classList.contains("fahrgastrechte-bahn-card-auswahl")) { + node.querySelectorAll('input').forEach(e => { + if (e.name === "fahrgastrechte-bahn-card-nummer") { + fillBcnum().then(clickContinue); + } else if (e.name === "fahrgastrechte-bahn-card-auswahl-geburts-datum") { + fillBday().then(clickContinue); + } + }) + } + if (clickThroughForms) { + if (node.classList.contains("antrags-typ-auswahl")) { + node.querySelector('input#antragstyp-verspaetung').dispatchEvent(new Event('change')); + } else if (node.classList.contains("verspaetungs-auswahl")) { + node.querySelector('#verspaetungstyp-mehr-als-stunde').dispatchEvent(new Event('change')); + } else if (node.classList.contains("verspaetung-bestaetigung")) { + node.querySelector('button.fahrgastrechte-continue-button').dispatchEvent(new Event('click', { bubbles: true })); + } + } else { + console.log(node); + } + } + }) + } + } + clickContinue(); +} + +let observer = new MutationObserver(processMutations); +const addObserver = () => { + browser.storage.sync.get('autocontinue').then(v => { + clickThroughForms = !!v.autocontinue; + }).then(() => { + observer.observe(document.body, { + childList: true, subtree: true + }) + }) +}; + +addObserver(); + +async function fillBcnum() { + let bcNumberInput = document.querySelector('input[name=fahrgastrechte-bahn-card-nummer]'); + browser.storage.sync.get('bcnum').then(v => { + let bcNum = v.bcnum || null; + if (bcNum !== null && bcNum !== "") { + bcNumberInput.value = bcNum; + bcNumberInput.dispatchEvent(new Event('input', { bubbles: true })); + bcFilled = true; + } + }) +} +async function fillBday() { + let birthdayInput = document.querySelector('input[name=fahrgastrechte-bahn-card-auswahl-geburts-datum'); + browser.storage.sync.get('bday').then(v => { + bDay = v.bday || null; + if (bDay !== null && bDay !== "") { + birthdayInput.value = bDay; + birthdayInput.dispatchEvent(new Event('input', { bubbles: true })); + bdayFilled = true; + } + }) +} \ No newline at end of file diff --git a/icons/icon.png b/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..063cfa8f40d2773ce841dea48d343e3940b2b7ee GIT binary patch literal 3066 zcmV z|GfVHoCCu|`E-W4U&-k7gg@K%j4ZO_WYO^}A8#LaeqNUZU1IKM8rhdOo%w+;JEglK zv7;4<8}H{GBk}L!vy$47miuA`Lglk_Z0(dxTW?ixWNH%o7ggdkRdN<-5_d-7*|ish zl)i@tGY?uN3ma!9wrhQMwyh(aT#(MRWXzDf?E@EZQUu33;(1Q-I*V1wC94v9z(*RO z1)A!0L_zvbTB<_wAVp-~Q@u`E^SW+m^WA#2LO)X^=PAWw|2am96~gB-yC%!LL!zGA zP9(P}f}L0R;+bg%(2-X@kaEfmA8Jts>f|P;VcjMpvj*)&PqrikJKP z+&o8rvxF~rIwz_kw?&)px>SXwdR>?BGyKl9Gl>JZ)Wy}%LYklr8c%0Aeq0UY6*MhAMcr7Z5;)X1 zTB{dh3j2Z{Hq}@YWWhc_6}ZjjK*A0npwoUng^fwP#2uRm;x9rlJih;M!VKg7pOGm0b^?t*<70E*J8y+U9>@4U_`?| zL$=8QhXQ6s?*FG;NERHu7y|gxY-0mpzWX{YK8xxSuL!o@H0*bq5ntU2+-_jhYkf5YmmcggYN8n5AuzDx;Z<-*#F%X&`P2AeBbz_Md?D&b9?YVkqpZ<7fVhEUgB&@*qqGHiXatlu-Vs3DMAp+Fz3-cw)Ls?Y zt#>oPX@Dtkoff&R;CffZ<6u!09n)!%k(Q;ZJ5837$>fEH8YCCa!| z$?-0MR5XL|w*p$ESdZ}K%!D6NFtLn=(D%(H2Y?o6g0^}tM!G((3G716>%7>kk|HAs zB2A^~{C zpdq4~Ax%KnDBId8OSXZUqSH2NFc{;ruQ#j;A6YKQU%8# z%E$jhdva_;HN1aUpbgr_bnQl5z$xZSot$oPz>$*@*NX8W&d+gY1m5Xip1)#9WpG)l z9$5U8t}WrmHdB-Eqg!Ce}9tM$kr_qGFO3Xo5Cq3@jN? zE_>bca4%{AoSK!`L0y*mUhy9$mR;OES1;KoZ{uO6mri+Y{dp2nCuR>Bp$Y`hDo z@3O+R1$9k@?ZgF~@>dNrID#uUgF7@BT1XSLL8C9zkyPtY_4D@5f#pwsSh8)(rLqH} zUVhMPG!7S0FC&oB+_`$en&%7irniqXeWFCGwi@v;qLve#OQ>W1eNg*2a4Mx9E;Bk$ zyu~}LLDZoM+Muz{sikEk$7@Rl?zp&P=5;i#StPw^{m9GbJWq5oeX2B=d63qEFQVVo zIgjcV-X4KV(Feb{3~se?h8A_nz@1t~xA+(jK-#p?-tPN(C^x;b%8N#USN98*!IeYL z9vjX)YUyN&BC%)=!0)VJs+95uR}4K1ZsietjiFB(w6}YI4o#*&^RwE=X^RIOzPMw? z_o3Xmm7&~udT4k0jlzwiF9veDzhU)^K@-_2Q61o6r&`5Ti4(YmcBS7ixDsb@hX!b| z1bUhl3w6j zd-AD*eJo{U-`0_>eM`H*IHtLM$9gdj$%1_pMQe3GXbLAkr%@Menv_VD?~SwjUR+fWt{atW;+nZPlk5QsR-@K!s>fNTh#ML_|YXECtAw}Z?+|@9yfpqY}kM;c|p(N4RQly_Crh^ zTsM4U>7Qp+RPDiK`$fHQ{mXalBnVi*tcpcKWUGK|)`;it#V1S2T*3NR{u-jVJ2C*F z=t~bQ>3_%KfdQ<@fDE<@$!0#;zUL0`Nsgp~4@Q2Bz@u8kxYuK3VUby+=|XLR0j$Uf z54K3yOI2FjpWC) z-#q0h{QbC+^8I{ejZsj?;YwYH7&UsIu#3nBY{6!u+6K`ZisV{YxZ#y@^iox?Vg3ex zJJ_@X&<1U9B{gs+VZ%nF>G>M5z-*?4EOJZp*9L;D2%;?7w#pHofD{Zyk3PIF4OPt}11 zOkg*OsPK#FZ68x5w@8^;N%5A6v~6Y4@EsM~T7bDvbFDp4t7M=6eg*{92*S;7&P`!1u z?$Yykr%~|tTZEBsH;faGPG?L=`ao{REb-CUT}UhAvIBt@6@qINuV<0*(7oh_YLZz zO|v=^$jfRUcOuiiZcP7#?>a?s!03Jn-~BhkzAn$|8D3-m0#b)|yCXX#fBK literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..5e4ef88 --- /dev/null +++ b/manifest.json @@ -0,0 +1,30 @@ +{ + "manifest_version": 2, + "name": "BC100 Autofill", + "description": "Autofills your BahnCard 100 number and birthday into the passenger rights claim form.", + "version": "0.0.1", + "icons": { + "64": "icons/icon.png" + }, + "content_scripts": [ + { + "matches": [ + "https://www.bahn.de/buchung/fahrgastrechte?einstiegtyp=BC100" + ], + "js": [ + "content_script.js" + ] + } + ], + "permissions": [ + "storage" + ], + "options_ui": { + "page": "options/index.html" + }, + "browser_specific_settings": { + "gecko": { + "id": "bc100-autofill@iw0.name" + } + } +} \ No newline at end of file diff --git a/options/index.html b/options/index.html new file mode 100644 index 0000000..e7f730b --- /dev/null +++ b/options/index.html @@ -0,0 +1,28 @@ + + + + + + + + + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + + + \ No newline at end of file diff --git a/options/script.js b/options/script.js new file mode 100644 index 0000000..b3b8a22 --- /dev/null +++ b/options/script.js @@ -0,0 +1,29 @@ +async function saveOptions(e) { + console.log("Saving options."); + e.preventDefault(); + let bcNum = document.querySelector("#bcnum").value; + let bDay = document.querySelector('#birthday').value; + let autoContinue = document.querySelector('#autocontinue').checked; + let options = { + bcnum: bcNum, + bday: bDay, + autocontinue: autoContinue + }; + await browser.storage.sync.set(options); + console.log("Saved!"); +} + +async function restoreOptions() { + // We do not save user data in managed storage. + // let res = await browser.storage.managed.get('colour'); + // document.querySelector("#managed-colour").innerText = res.colour; + + settings = await browser.storage.sync.get(); + console.log(settings); + document.querySelector("#bcnum").value = settings.bcnum || ""; + document.querySelector("#birthday").value = settings.bday || ""; + document.querySelector("#autocontinue").checked = settings.autocontinue || false; +} + +document.addEventListener('DOMContentLoaded', restoreOptions); +document.querySelector("form").addEventListener("submit", saveOptions); \ No newline at end of file diff --git a/options/style.css b/options/style.css new file mode 100644 index 0000000..001d5c5 --- /dev/null +++ b/options/style.css @@ -0,0 +1,3 @@ +h1 { + font-style: italic; +}