From c64c35f7dba9fae24406120594df5def815911f7 Mon Sep 17 00:00:00 2001 From: crookeDog Date: Sun, 15 Jun 2025 19:42:04 +0200 Subject: [PATCH 1/2] First commit --- .../_locales/en/messages.json | 38 +++++ .../_locales/it/messages.json | 38 +++++ .../assets/pugliasalute-128.png | Bin 0 -> 8000 bytes .../assets/pugliasalute-16.png | Bin 0 -> 339 bytes .../assets/pugliasalute-48.png | Bin 0 -> 5669 bytes submissions/betterPugliaSalute/manifest.json | 38 +++++ submissions/betterPugliaSalute/popup.html | 53 +++++++ .../scripts/browser-polyfill.min.js | 8 + .../betterPugliaSalute/scripts/content.js | 0 .../betterPugliaSalute/scripts/popup.js | 63 ++++++++ submissions/betterPugliaSalute/style.css | 149 ++++++++++++++++++ 11 files changed, 387 insertions(+) create mode 100644 submissions/betterPugliaSalute/_locales/en/messages.json create mode 100644 submissions/betterPugliaSalute/_locales/it/messages.json create mode 100644 submissions/betterPugliaSalute/assets/pugliasalute-128.png create mode 100644 submissions/betterPugliaSalute/assets/pugliasalute-16.png create mode 100644 submissions/betterPugliaSalute/assets/pugliasalute-48.png create mode 100644 submissions/betterPugliaSalute/manifest.json create mode 100644 submissions/betterPugliaSalute/popup.html create mode 100644 submissions/betterPugliaSalute/scripts/browser-polyfill.min.js create mode 100644 submissions/betterPugliaSalute/scripts/content.js create mode 100644 submissions/betterPugliaSalute/scripts/popup.js create mode 100644 submissions/betterPugliaSalute/style.css diff --git a/submissions/betterPugliaSalute/_locales/en/messages.json b/submissions/betterPugliaSalute/_locales/en/messages.json new file mode 100644 index 00000000..48cf1e3e --- /dev/null +++ b/submissions/betterPugliaSalute/_locales/en/messages.json @@ -0,0 +1,38 @@ +{ + "tab_rd": { + "message": "RD" + }, + "future_feature_tab": { + "message": "Coming Soon" + }, + "rd_title": { + "message": "Dematerialized Prescription" + }, + "open": { + "message": "Open" + }, + "rd_description": { + "message": "Automatically fill in the site fields to save time" + }, + "cf_label": { + "message": "Tax Code" + }, + "cfid_label": { + "message": "Health Card ID" + }, + "phone_label": { + "message": "Phone Number" + }, + "email_label": { + "message": "Email" + }, + "save_button": { + "message": "Save" + }, + "coming_soon_title": { + "message": "Coming Soon" + }, + "coming_soon_text": { + "message": "Future feature under development." + } +} diff --git a/submissions/betterPugliaSalute/_locales/it/messages.json b/submissions/betterPugliaSalute/_locales/it/messages.json new file mode 100644 index 00000000..cf1203ec --- /dev/null +++ b/submissions/betterPugliaSalute/_locales/it/messages.json @@ -0,0 +1,38 @@ +{ + "tab_rd": { + "message": "RD" + }, + "future_feature_tab": { + "message": "Prossimamente" + }, + "rd_title": { + "message": "Ricetta Dematerializzata" + }, + "open": { + "message": "Apri" + }, + "rd_description": { + "message": "Riempi automaticamente i campi del sito per risparmiare tempo" + }, + "cf_label": { + "message": "Codice Fiscale" + }, + "cfid_label": { + "message": "ID Tessera Sanitaria" + }, + "phone_label": { + "message": "Numero di Telefono" + }, + "email_label": { + "message": "Email" + }, + "save_button": { + "message": "Salva" + }, + "coming_soon_title": { + "message": "In arrivo" + }, + "coming_soon_text": { + "message": "Funzionalità futura in fase di sviluppo." + } +} \ No newline at end of file diff --git a/submissions/betterPugliaSalute/assets/pugliasalute-128.png b/submissions/betterPugliaSalute/assets/pugliasalute-128.png new file mode 100644 index 0000000000000000000000000000000000000000..35209dd50c9937dd8e668825596f6d8bbc790e32 GIT binary patch literal 8000 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

1wq zUaZzkRx3Blq^3N=G6$$@Nswq8N9f>iB|P;^8<{*k^L{KDdQ!GbRJxg=O`5>?Bj|Vx=qmdU)&-2(Fbs=#qfM>tQhz|41h5FVET*_=_ zboabg^!l~&))-hZb0g%ltzlwCXE87?B1Xi1*y$?G-*XZHCbju(ZzPPO|v8oU=X zZnvRSbF9&$ARyg_U)5M=>Jn)9VIW_iFY%zNu?0E)er$%Vs-F&JY=B;7Wj#2$F0Jl) zO7~N7)OIgkY{c9;_}p0G;SX`s1O(M=uuF0}>eOr(eOOEqyB80911|(mMk&j72Ch$E zuIAsI$=i&v)=%Cm_Sv501Vr27EO{$Q8xpEy|HnnG#h!(x>>ustkaFit&E;=xf$P;( zAOAcosr7=ZSD*jz7b^X>Sf4*S?w51zro!Y)ljD!A13Pa&^&w*h;}36qcud8@!-%GAeKCUaOk`e-xY0Li*Ano@k zIP>;M)m-)=KzM5ko7Hpp*+rd{s4);We{d_2?8|}IbQT8u-&jdLFz-LC@2Gpm;abI= z2YjXHw<$na=K=}S07$HkehKHbE;h8a--Re@kQ4TU6Lb4w7G^Ldk-4Y;8o^o8Wt=6& zZlriuRb_=)oQY7w%e@wF*$@M!>dzecXJCWaWL;{OH=O6t(qy*(nZtZnRj*ch?t6#y z@Jm0fA3RrS^nPKKIb_vA0W8+s1vi|ZlZe!I1r*%KvRh@xC|+YTh=nfV_wRsLMVDWf2-IzP zL7|?MsN;aS_b#5IndPdSipiM$M*zDI4{i)XJ=z^@RdfZ#dh5>YZe zOmso-yrP4~+32f{4x554G?q^&&iiM5eLYWXr3wWsN5=%?6^Y#^Z$~-FSRO$LX)6jp z_m-7NmZ)S_q=!xdKmS4mdavL!rpE&Rw9t6jO^=Yc2KS}h1-ziD>T(G9!KWmS<<;d; zwlMsWic_KiFdUhC=0!q#gc<+eDNWF=V?NBC^hg`{X;>HvhcmkM;5N&-4gb#LEjmNS zG8g5C`Tzbu*UXNz4Sv5Mwb_2-%Yz}~RN~2~0qm`_4jD7O*KF-b!uUkYfBTWK==ULi z)sfuMmQC|VaW)@b=M(#i^#bIo{#@SVXdyUiHsXFJe12X%1oR*HV8@A}*@VtPKF4dZu5oyc2z54fw`D7gdx-LjIQ4VBY!y8gL-zB$8uYO1Y3NMs*QJ}1N zZXJfhS(dV!@F>0Wy>D>oAF)_pI{cah(glg+6;M=pn~XKlJ#jMDcRFxRnyYS*(s_uq zNddf+)U=~SESgJdhYdg**SHllN9j~XO+U|BAEgWq=o80qFD>Qx5W)B+*HVk->Z;M6zgrgez4$#WQqB6WfWtjEPJo0 z-R%o&wc88+L>F912M^O7OvBJTqB+BGXpZNx6Ac6e1G4ZFI@^7m^B9^;I&cV65h~S) zubC@sa$$rU7!e~8>XEB4cdiVMQK#^b&pJ!l#!x@JyYt_Aq^Bv#w=#p3(G!8cvB}6M zHxC^e+Pd+#O(qCm2gtLtG|m6*UWHknxyCmMKV#zX+y@(y4BCUI(~dLjc?qc$WaBms z-R~QdV+rs@_<;2B$PgBv0KEXgqPeS=-E;Rh31i|2iKtHVY&-vtoXOv|8Tob`kvJZO zDL_*DHNs?gVtuU)Pm@tKTKsOISSnd7CQc#HJPhi1G`Uzlf2B6VKIfqH)oY_#X#)>ZoFW zu^#nq6)fO*I8%L{M8;LUM>+nMTlodla|36|+|W-gh@`g8%k0z{gglJ4aUM84JzjqK zK`y?%IX96^wfk(^n&3z%ljV4X@Dq-o?qlj*?=)?fR(mvhA9$TPq8cGmv(As3cSd5tgc z`62W)Sq7pMvtgGLD4J~IN=;nUO*)FNmY-@;$THB*9RAY6^`@gh?9jw52?H;x- z$dn77&>m8RawXafFXP=!1m3y=h9Lx_O`jd!gFHeGzR$Q7vW$1efsW=yjXZVRkpBTg Cepe&_ literal 0 HcmV?d00001 diff --git a/submissions/betterPugliaSalute/assets/pugliasalute-16.png b/submissions/betterPugliaSalute/assets/pugliasalute-16.png new file mode 100644 index 0000000000000000000000000000000000000000..7f8efc632bf167b489a44fc9bbc4ec08241163b3 GIT binary patch literal 339 zcmV-Z0j&OsP)mAUY+Y1OyTXrvZwa>k)Ae)PU@7 lWWy-WOd!+9&5@w&3;-v>nKP{7&mRB)002ovPDHLkV1lmOhF|~y literal 0 HcmV?d00001 diff --git a/submissions/betterPugliaSalute/assets/pugliasalute-48.png b/submissions/betterPugliaSalute/assets/pugliasalute-48.png new file mode 100644 index 0000000000000000000000000000000000000000..aa1c0585abb52601904857707bb9de72dc6e6e74 GIT binary patch literal 5669 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 literal 0 HcmV?d00001 diff --git a/submissions/betterPugliaSalute/manifest.json b/submissions/betterPugliaSalute/manifest.json new file mode 100644 index 00000000..e4e07d19 --- /dev/null +++ b/submissions/betterPugliaSalute/manifest.json @@ -0,0 +1,38 @@ +{ + "manifest_version": 3, + "name": "betterPugliaSalute", + "version": "0.1.0", + "description": "An extension that enhances the Apulian Sanity website.", + "permissions": [ + "activeTab", + "storage" + ], + "default_locale": "it", + "host_permissions": [ + "https://www.sanita.puglia.it/*" + ], + "action": { + "default_popup": "popup.html", + "default_icon": "assets/pugliasalute-128.png" + }, + "content_scripts": [ + { + "matches": [ + "https://www.sanita.puglia.it/*" + ], + "js": [ + "scripts/content.js" + ] + } + ], + "icons": { + "16": "assets/pugliasalute-16.png", + "48": "assets/pugliasalute-48.png", + "128": "assets/pugliasalute-128.png" + }, + "browser_specific_settings": { + "gecko": { + "id": "betterpugliasalute@crookedog.it" + } + } +} \ No newline at end of file diff --git a/submissions/betterPugliaSalute/popup.html b/submissions/betterPugliaSalute/popup.html new file mode 100644 index 00000000..27d47a65 --- /dev/null +++ b/submissions/betterPugliaSalute/popup.html @@ -0,0 +1,53 @@ + + + + + + + Puglia Salute + + + + + + +

+ + +
+ +
+
+

+ +
+

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ +
+

+

+
+ + + + \ No newline at end of file diff --git a/submissions/betterPugliaSalute/scripts/browser-polyfill.min.js b/submissions/betterPugliaSalute/scripts/browser-polyfill.min.js new file mode 100644 index 00000000..37f6ee9c --- /dev/null +++ b/submissions/betterPugliaSalute/scripts/browser-polyfill.min.js @@ -0,0 +1,8 @@ +(function(a,b){if("function"==typeof define&&define.amd)define("webextension-polyfill",["module"],b);else if("undefined"!=typeof exports)b(module);else{var c={exports:{}};b(c),a.browser=c.exports}})("undefined"==typeof globalThis?"undefined"==typeof self?this:self:globalThis,function(a){"use strict";if(!globalThis.chrome?.runtime?.id)throw new Error("This script should only be loaded in a browser extension.");if("undefined"==typeof globalThis.browser||Object.getPrototypeOf(globalThis.browser)!==Object.prototype){a.exports=(a=>{const b={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(b).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class c extends WeakMap{constructor(a,b=void 0){super(b),this.createItem=a}get(a){return this.has(a)||this.set(a,this.createItem(a)),super.get(a)}}const d=a=>a&&"object"==typeof a&&"function"==typeof a.then,e=(b,c)=>(...d)=>{a.runtime.lastError?b.reject(new Error(a.runtime.lastError.message)):c.singleCallbackArg||1>=d.length&&!1!==c.singleCallbackArg?b.resolve(d[0]):b.resolve(d)},f=a=>1==a?"argument":"arguments",g=(a,b)=>function(c,...d){if(d.lengthb.maxArgs)throw new Error(`Expected at most ${b.maxArgs} ${f(b.maxArgs)} for ${a}(), got ${d.length}`);return new Promise((f,g)=>{if(b.fallbackToNoCallback)try{c[a](...d,e({resolve:f,reject:g},b))}catch(e){console.warn(`${a} API method doesn't seem to support the callback parameter, `+"falling back to call it without a callback: ",e),c[a](...d),b.fallbackToNoCallback=!1,b.noCallback=!0,f()}else b.noCallback?(c[a](...d),f()):c[a](...d,e({resolve:f,reject:g},b))})},h=(a,b,c)=>new Proxy(b,{apply(b,d,e){return c.call(d,a,...e)}});let i=Function.call.bind(Object.prototype.hasOwnProperty);const j=(a,b={},c={})=>{let d=Object.create(null),e=Object.create(a);return new Proxy(e,{has(b,c){return c in a||c in d},get(e,f){if(f in d)return d[f];if(!(f in a))return;let k=a[f];if("function"==typeof k){if("function"==typeof b[f])k=h(a,a[f],b[f]);else if(i(c,f)){let b=g(f,c[f]);k=h(a,a[f],b)}else k=k.bind(a);}else if("object"==typeof k&&null!==k&&(i(b,f)||i(c,f)))k=j(k,b[f],c[f]);else if(i(c,"*"))k=j(k,b[f],c["*"]);else return Object.defineProperty(d,f,{configurable:!0,enumerable:!0,get(){return a[f]},set(b){a[f]=b}}),k;return d[f]=k,k},set(b,c,e){return c in d?d[c]=e:a[c]=e,!0},defineProperty(a,b,c){return Reflect.defineProperty(d,b,c)},deleteProperty(a,b){return Reflect.deleteProperty(d,b)}})},k=a=>({addListener(b,c,...d){b.addListener(a.get(c),...d)},hasListener(b,c){return b.hasListener(a.get(c))},removeListener(b,c){b.removeListener(a.get(c))}}),l=new c(a=>"function"==typeof a?function(b){const c=j(b,{},{getContent:{minArgs:0,maxArgs:0}});a(c)}:a),m=new c(a=>"function"==typeof a?function(b,c,e){let f,g,h=!1,i=new Promise(a=>{f=function(b){h=!0,a(b)}});try{g=a(b,c,f)}catch(a){g=Promise.reject(a)}const j=!0!==g&&d(g);if(!0!==g&&!j&&!h)return!1;const k=a=>{a.then(a=>{e(a)},a=>{let b;b=a&&(a instanceof Error||"string"==typeof a.message)?a.message:"An unexpected error occurred",e({__mozWebExtensionPolyfillReject__:!0,message:b})}).catch(a=>{console.error("Failed to send onMessage rejected reply",a)})};return j?k(g):k(i),!0}:a),n=({reject:b,resolve:c},d)=>{a.runtime.lastError?a.runtime.lastError.message==="The message port closed before a response was received."?c():b(new Error(a.runtime.lastError.message)):d&&d.__mozWebExtensionPolyfillReject__?b(new Error(d.message)):c(d)},o=(a,b,c,...d)=>{if(d.lengthb.maxArgs)throw new Error(`Expected at most ${b.maxArgs} ${f(b.maxArgs)} for ${a}(), got ${d.length}`);return new Promise((a,b)=>{const e=n.bind(null,{resolve:a,reject:b});d.push(e),c.sendMessage(...d)})},p={devtools:{network:{onRequestFinished:k(l)}},runtime:{onMessage:k(m),onMessageExternal:k(m),sendMessage:o.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:o.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},q={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return b.privacy={network:{"*":q},services:{"*":q},websites:{"*":q}},j(a,p,b)})(chrome)}else a.exports=globalThis.browser}); +//# sourceMappingURL=browser-polyfill.min.js.map + +// webextension-polyfill v.0.10.0 (https://github.com/mozilla/webextension-polyfill) + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ diff --git a/submissions/betterPugliaSalute/scripts/content.js b/submissions/betterPugliaSalute/scripts/content.js new file mode 100644 index 00000000..e69de29b diff --git a/submissions/betterPugliaSalute/scripts/popup.js b/submissions/betterPugliaSalute/scripts/popup.js new file mode 100644 index 00000000..78a9e2db --- /dev/null +++ b/submissions/betterPugliaSalute/scripts/popup.js @@ -0,0 +1,63 @@ +const STORAGE_KEY = 'rdFormData'; + +document.querySelectorAll('.tabs button').forEach(button => { + button.addEventListener('click', () => { + document.querySelectorAll('.tabs button').forEach(btn => btn.classList.remove('active')); + document.querySelectorAll('.tab-content').forEach(tab => tab.classList.remove('active')); + button.classList.add('active'); + document.querySelector(`#${button.dataset.tab}`).classList.add('active'); + }); +}); + +document.querySelector('#open-rd').addEventListener('click', () => { + window.browser.tabs.create({ + url: 'https://www.sanita.puglia.it/servizialcittadino/#/RicercaPrenotazioneDematerializzata?azienda=regionale' + }); +}); + +document.querySelectorAll('[data-i18n]').forEach(el => { + const msg = window.browser.i18n.getMessage(el.dataset.i18n); + if (msg) el.textContent = msg; +}); + +async function loadFormData() { + try { + const result = await browser.storage.local.get(STORAGE_KEY); + const data = result[STORAGE_KEY] || {}; + const form = document.getElementById('rd-form'); + if (!form) return; + + for (const field of form.elements) { + if (field.name && data[field.name] !== undefined) { + field.value = data[field.name]; + } + } + } catch (e) { + console.error('Error loading form data:', e); + } +} + +function formDataToObject(formData) { + const data = {}; + for (const [key, value] of formData.entries()) { + data[key] = value; + } + return data; +} + +async function saveFormData(formData) { + try { + const data = formDataToObject(formData); + await browser.storage.local.set({ [STORAGE_KEY]: data }); + } catch (e) { + console.error('Error saving form data:', e); + } +} + +document.getElementById('rd-form').addEventListener('submit', async (event) => { + event.preventDefault(); + const formData = new FormData(event.target); + await saveFormData(formData); +}); + +loadFormData(); \ No newline at end of file diff --git a/submissions/betterPugliaSalute/style.css b/submissions/betterPugliaSalute/style.css new file mode 100644 index 00000000..952ffc3b --- /dev/null +++ b/submissions/betterPugliaSalute/style.css @@ -0,0 +1,149 @@ +body { + font-family: Arial, sans-serif; + width: 300px; + padding: 10px; + + --main-c: #dd628d; + --main-c-light: #f0b2d1; + --main-c-dark: #a74c6b; + --main-c-text: #ffffff; + --main-c-text-light: #f0f0f0; + --main-c-text-dark: #000000; + + --background: #ffdddd; + --background-text: #423838; + + background-color: var(--background); + color: var(--background-text); +} + +.tabs { + display: flex; + margin-bottom: 10px; +} + +.tabs>button { + flex: 1; + padding: 8px; + border: none; + background-color: var(--main-c-light); + cursor: pointer; + + transition: all .4s; + + &:first-of-type { + border-top-left-radius: 16px; + border-bottom-left-radius: 16px; + } + + &:last-of-type { + border-top-right-radius: 16px; + border-bottom-right-radius: 16px; + } + + &:hover { + background-color: var(--main-c-dark); + color: white; + } + + &.active { + background-color: var(--main-c); + color: white; + } +} + +div.title { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + + text-align: center; +} + +div.title>button { + padding: 4px 12px; + background-color: var(--main-c); + color: white; + border: none; + border-radius: 12px; + cursor: pointer; + + &:hover { + background-color: var(--main-c-dark); + transition: all .4s; + } +} + +.tab-content { + display: none; + + &.active { + display: block; + } +} + +#rd > p { + margin: 0; + padding: 0; + color: var(--main-c-text-dark); +} + + +form { + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 10px; +} + +form > .value { + display: flex; + flex-direction: column; +} + +form > .value label { + margin-bottom: -1px; + margin-left: 6px; + font-weight: bold; +} +form > .value input { + padding: 4px 6px; + border: 1px solid var(--main-c); + border-radius: 8px; + background-color: var(--main-c-light); + color: var(--main-c-text-dark); + + transition: all .4s; + + &:focus { + border-color: var(--main-c-dark); + outline: none; + background-color: var(--main-c-text-light); + color: var(--main-c-text-dark); + } + &::placeholder { + color: var(--main-c-text-dark); + } +} + +form > button { + padding-block: 6px; + background-color: var(--main-c); + color: var(--main-c-text); + border: none; + border-radius: 16px; + cursor: pointer; + + max-width: fit-content; + padding-inline: 48px; + + transition: all .4s; + + margin-inline: auto; + + &:hover { + background-color: var(--main-c-dark); + color: var(--main-c-text-light); + } +} From 593534aa444603614ff030b47f791844ea5eeff1 Mon Sep 17 00:00:00 2001 From: crookeDog Date: Sun, 15 Jun 2025 21:00:36 +0200 Subject: [PATCH 2/2] Made the code more tidy Added content script --- .../betterPugliaSalute/scripts/content.js | 68 +++++++++++++++++++ .../betterPugliaSalute/scripts/popup.js | 45 ++++++------ 2 files changed, 88 insertions(+), 25 deletions(-) diff --git a/submissions/betterPugliaSalute/scripts/content.js b/submissions/betterPugliaSalute/scripts/content.js index e69de29b..dc1ade0f 100644 --- a/submissions/betterPugliaSalute/scripts/content.js +++ b/submissions/betterPugliaSalute/scripts/content.js @@ -0,0 +1,68 @@ +if (typeof browser === 'undefined') { + window.browser = chrome; +} +const STORAGE_KEY = 'rdFormData'; + +// This function is from https://stackoverflow.com/questions/5525071/how-to-wait-until-an-element-exists but I modified it +const awaitElement = (selector) => + new Promise((resolve) => { + const interval = setInterval(() => { + const element = document.querySelector(selector); + if (element) { + clearInterval(interval); + resolve(element); + } + }, 100); + setTimeout(() => { + clearInterval(interval); + resolve(null); + }, 10000); + }); + +// I hate Angular +function fillAndTrigger(element, value) { + if (element && value) { + element.value = value; + element.dispatchEvent(new Event('input', { bubbles: true })); + element.dispatchEvent(new Event('change', { bubbles: true })); + } +} + +async function autofillForm() { + const result = await browser.storage.local.get(STORAGE_KEY); + const data = result[STORAGE_KEY]; + + if (!data || !data.cf || !data.cfid) { + return; + } + + const accessButton = await awaitElement('a.buttonaccesso_disattivo'); + if (accessButton) { + accessButton.click(); + } + + const cfInput = await awaitElement('[name="codiceFiscale"]'); + const cfidInput = await awaitElement('[name="numeroTessera"]'); + + if (cfInput && cfidInput) { + fillAndTrigger(cfInput, data.cf); + fillAndTrigger(cfidInput, data.cfid); + + const firstSubmitButton = cfInput.closest('form').querySelector('button.button'); + if (firstSubmitButton) { + firstSubmitButton.click(); + } + } + + const phoneInput = await awaitElement('[name="recapitoTelefonico"]'); + const emailInput = await awaitElement('[name="email"]'); + + fillAndTrigger(phoneInput, data.phone); + fillAndTrigger(emailInput, data.email); +} + +// TODO: add more features +// and then move this to a separate file +if (window.location.hash.startsWith('#/RicercaPrenotazioneDematerializzata')) { + autofillForm(); +} \ No newline at end of file diff --git a/submissions/betterPugliaSalute/scripts/popup.js b/submissions/betterPugliaSalute/scripts/popup.js index 78a9e2db..b8066d1f 100644 --- a/submissions/betterPugliaSalute/scripts/popup.js +++ b/submissions/betterPugliaSalute/scripts/popup.js @@ -20,23 +20,6 @@ document.querySelectorAll('[data-i18n]').forEach(el => { if (msg) el.textContent = msg; }); -async function loadFormData() { - try { - const result = await browser.storage.local.get(STORAGE_KEY); - const data = result[STORAGE_KEY] || {}; - const form = document.getElementById('rd-form'); - if (!form) return; - - for (const field of form.elements) { - if (field.name && data[field.name] !== undefined) { - field.value = data[field.name]; - } - } - } catch (e) { - console.error('Error loading form data:', e); - } -} - function formDataToObject(formData) { const data = {}; for (const [key, value] of formData.entries()) { @@ -45,19 +28,31 @@ function formDataToObject(formData) { return data; } -async function saveFormData(formData) { +document.getElementById('rd-form').addEventListener('submit', async (event) => { + event.preventDefault(); + const formData = new FormData(event.target); + try { const data = formDataToObject(formData); await browser.storage.local.set({ [STORAGE_KEY]: data }); } catch (e) { console.error('Error saving form data:', e); } -} - -document.getElementById('rd-form').addEventListener('submit', async (event) => { - event.preventDefault(); - const formData = new FormData(event.target); - await saveFormData(formData); }); -loadFormData(); \ No newline at end of file +(async () => { + try { + const result = await browser.storage.local.get(STORAGE_KEY); + const data = result[STORAGE_KEY] || {}; + const form = document.getElementById('rd-form'); + if (!form) return; + + for (const field of form.elements) { + if (field.name && data[field.name] !== undefined) { + field.value = data[field.name]; + } + } + } catch (e) { + console.error('Error loading form data:', e); + } +})(); \ No newline at end of file