From 41e4a2e547890c3711b0ca775e540156b80990e3 Mon Sep 17 00:00:00 2001 From: mic Date: Mon, 1 Apr 2024 22:58:39 +0200 Subject: [PATCH] First working version --- _locales/en/messages.json | 111 +++++++++++++++++++++++ _locales/it/messages.json | 111 +++++++++++++++++++++++ images/icon-16px.png | Bin 0 -> 802 bytes images/icon-32px.png | Bin 0 -> 2240 bytes images/icon.png | Bin 0 -> 6563 bytes js/mzta-chatgpt.js | 156 ++++++++++++++++++++++++++++++++ js/mzta-compose-script.js | 76 ++++++++++++++++ js/mzta-i18n.js | 67 ++++++++++++++ js/mzta-prompts.js | 25 +++++ manifest.json | 45 +++++++++ messageMenu/mzta-msgmenu.css | 16 ++++ messageMenu/mzta-msgmenu.html | 13 +++ messageMenu/mzta-msgmenu.js | 65 +++++++++++++ mzta-background.html | 9 ++ mzta-background.js | 75 +++++++++++++++ options/mzta-options.css | 27 ++++++ options/mzta-options.html | 21 +++++ options/mzta-options.js | 31 +++++++ options/mzta-release-notes.css | 19 ++++ options/mzta-release-notes.html | 15 +++ options/mzta-release-notes.js | 3 + 21 files changed, 885 insertions(+) create mode 100644 _locales/en/messages.json create mode 100644 _locales/it/messages.json create mode 100644 images/icon-16px.png create mode 100644 images/icon-32px.png create mode 100644 images/icon.png create mode 100644 js/mzta-chatgpt.js create mode 100644 js/mzta-compose-script.js create mode 100644 js/mzta-i18n.js create mode 100644 js/mzta-prompts.js create mode 100644 manifest.json create mode 100644 messageMenu/mzta-msgmenu.css create mode 100644 messageMenu/mzta-msgmenu.html create mode 100644 messageMenu/mzta-msgmenu.js create mode 100644 mzta-background.html create mode 100644 mzta-background.js create mode 100644 options/mzta-options.css create mode 100644 options/mzta-options.html create mode 100644 options/mzta-options.js create mode 100644 options/mzta-release-notes.css create mode 100644 options/mzta-release-notes.html create mode 100644 options/mzta-release-notes.js diff --git a/_locales/en/messages.json b/_locales/en/messages.json new file mode 100644 index 00000000..57dbdf4c --- /dev/null +++ b/_locales/en/messages.json @@ -0,0 +1,111 @@ +{ + "extensionDescription": { + "message": "Use ChatGPT to enhance you emails!", + "description": "Description of the extension." + }, + + "menu_title": { + "message": "AI", + "description": "" + }, + + "prompt_lang": { + "message": "Replay in ", + "description": "" + }, + + "prompt_translate_lang": { + "message": "english.", + "description": "" + }, + + "prompt_reply": { + "message": "Reply to this", + "description": "" + }, + + "prompt_rewrite_polite": { + "message": "Rewrite polite", + "description": "" + }, + + "prompt_rewrite_formal": { + "message": "Rewrite formal", + "description": "" + }, + + "prompt_classify": { + "message": "Classify", + "description": "" + }, + + "prompt_summarize_this": { + "message": "Summarize this", + "description": "" + }, + + "prompt_translate_this": { + "message": "Translate this", + "description": "" + }, + + "prompt_selection_needed": { + "message": "To proceed, you need to select some text!", + "description": "" + }, + + "chatgpt_win_working": { + "message": "Work in progress...", + "description": "" + }, + + "chatgpt_win_job_completed": { + "message": "Completed!", + "description": "" + }, + + "chatgpt_win_get_answer": { + "message": "Use last answer", + "description": "" + }, + + "chatgpt_win_close": { + "message": "Close", + "description": "" + }, + + "prefsInfoTitle": { + "message": "Important Information", + "description": "" + }, + + "prefsInfoDesc_1": { + "message": "It's not always possibile to get the right file type from the email received by Sharepoint or OneDrive.", + "description": "" + }, + + "prefsInfoDesc_2": { + "message": "If this extension can't understand the file type, it will show four buttons: one to use Word, one to use Excel, one to use PowerPoint and one to open the file in the browser.", + "description": "" + }, + + "prefsInfoDesc_3": { + "message": "The option to force to use Microsoft Edge is for a scenario where you do not use Edge as the default browser, but is the browser used with your Business account.", + "description": "" + }, + + "prefsDonation_1": { + "message": "Do you like this addon?", + "description": "" + }, + + "prefsDonation_2": { + "message": "Consider to make a donation!", + "description": "" + }, + + "backToOptionsText": { + "message": "Options", + "description": "" + } +} diff --git a/_locales/it/messages.json b/_locales/it/messages.json new file mode 100644 index 00000000..d18de435 --- /dev/null +++ b/_locales/it/messages.json @@ -0,0 +1,111 @@ +{ + "extensionDescription": { + "message": "Apri un condiviso di un file di SharePoint o OneDrive direttamente con l'applicazione corretta, invece che il browser.", + "description": "Descrizione dell'estensione." + }, + + "menu_title": { + "message": "IA", + "description": "" + }, + + "prompt_lang": { + "message": "Rispondi in ", + "description": "" + }, + + "prompt_translate_lang": { + "message": "italiano.", + "description": "" + }, + + "prompt_reply": { + "message": "Rispondi", + "description": "" + }, + + "prompt_rewrite_polite": { + "message": "Riscrivi cortese", + "description": "" + }, + + "prompt_rewrite_formal": { + "message": "Riscrivi formale", + "description": "" + }, + + "prompt_classify": { + "message": "Classifica", + "description": "" + }, + + "prompt_summarize_this": { + "message": "Riassumi", + "description": "" + }, + + "prompt_translate_this": { + "message": "Traduci", + "description": "" + }, + + "prompt_selection_needed": { + "message": "Per procedere è necessario che selezioni del testo!", + "description": "" + }, + + "chatgpt_win_working": { + "message": "Elaborazione in corso...", + "description": "" + }, + + "chatgpt_win_job_completed": { + "message": "Completato!", + "description": "" + }, + + "chatgpt_win_get_answer": { + "message": "Usa l'ultima risposta", + "description": "" + }, + + "chatgpt_win_close": { + "message": "Chiudi", + "description": "" + }, + + "prefsInfoTitle": { + "message": "Informazioni Importanti", + "description": "" + }, + + "prefsInfoDesc_1": { + "message": "Non è sempre possibile capire il tupo di file dalla mail ricevuta da SharePoint o OneDrive.", + "description": "" + }, + + "prefsInfoDesc_2": { + "message": "Se questa estensione non riesce a riconoscere il tipo del file, mostrerà quattro pulsanti: uno per usare Word, uno per Excel, uno per PowerPoint e uno per aprire il link nel browser.", + "description": "" + }, + + "prefsInfoDesc_3": { + "message": "L'opzione di forzare l'apertura in Microsoft Edge è per lo scenario in cui non stai usando Edge come browser predefinito, ma è il browser con il tuo account aziendale.", + "description": "" + }, + + "prefsDonation_1": { + "message": "Ti piace questo componente aggiuntivo?", + "description": "" + }, + + "prefsDonation_2": { + "message": "Considera di fare una donazione!", + "description": "" + }, + + "backToOptionsText": { + "message": "Opzioni", + "description": "" + } +} diff --git a/images/icon-16px.png b/images/icon-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..430ae54c8801465ba92a3d5e6718e977662ce688 GIT binary patch literal 802 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 O0000RxP)00001b5ch_0Itp) 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 { + if (!sendButton?.hasAttribute('disabled')) { // send msg + method.toLowerCase() == 'click' ? sendButton.click() + : textArea.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 13, bubbles: true })); + clearInterval(delaySend); + } + }, 25); +} + +async function chatgpt_isIdle() { + return new Promise(resolve => { + const intervalId = setInterval(() => { + if (chatgpt_getRegenerateButton()) { + clearInterval(intervalId); resolve(true); +}}, 100);});} + +function chatgpt_getRegenerateButton() { + for (const mainSVG of document.querySelectorAll('main svg')) { + if (mainSVG.querySelector('path[d*="M4.5 2.5C5.05228"]')) // regen icon found + return mainSVG.parentNode.parentNode; + } +} + +async function chatgpt_getFromDOM(pos) { + const responseDivs = document.querySelectorAll('div[data-testid*="conversation-turn"]:nth-child(odd)'), + strPos = pos.toString().toLowerCase(); + let response = ''; + if (responseDivs.length) { + if (/last|final/.test(strPos)) // get last response + response = responseDivs[responseDivs.length - 1].textContent; + else { // get nth response + const nthOfResponse = ( + + // Calculate base number + Number.isInteger(pos) ? pos : // do nothing for integers + /^\d+/.test(strPos) ? /^\d+/.exec(strPos)[0] : // extract first digits for strings w/ them + ( // convert words to integers for digitless strings + /^(?:1|one|fir)(?:st)?$/.test(strPos) ? 1 + : /^(?:2|tw(?:o|en|el(?:ve|f))|seco)(?:nd|t[yi])?(?:e?th)?$/.test(strPos) ? 2 + : /^(?:3|th(?:ree|ir?))(?:rd|teen|t[yi])?(?:e?th)?$/.test(strPos) ? 3 + : /^(?:4|fou?r)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 4 + : /^(?:5|fi(?:ve|f))(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 5 + : /^(?:6|six)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 6 + : /^(?:7|seven)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 7 + : /^(?:8|eight?)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 8 + : /^(?:9|nine?)(?:teen|t[yi])?(?:e?th)?$/.test(strPos) ? 9 + : /^(?:10|ten)(?:th)?$/.test(strPos) ? 10 : 1 ) + + // Transform base number if suffixed + * ( /(ty|ieth)$/.test(strPos) ? 10 : 1 ) // x 10 if -ty/ieth + + ( /teen(th)?$/.test(strPos) ? 10 : 0 ) // + 10 if -teen/teenth + + ); + response = responseDivs[nthOfResponse - 1].textContent; + } + response = response.replace(/^ChatGPTChatGPT/, ''); // strip sender name + } + return response; +} + +function chatpgt_scrollToBottom () { + try { document.querySelector('button[class*="cursor"][class*="bottom"]').click(); } + catch (err) { console.error('', err); } +} + +function addCustomDiv(prompt_action,tabId) { + // Create