Merge branch 'v4.0.0' into multiple_additional_text_issue525
This commit is contained in:
commit
17ec054e15
6 changed files with 182 additions and 4 deletions
|
|
@ -23,6 +23,10 @@
|
|||
<li><i>[All APIs]</i> Showing the spam filter info at the top of the message. The data is saved only for the session in which the message has been checked for spam [<a href="https://github.com/micz/ThunderAI/issues/506">#506</a>].</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
<h2>Version 3.8.4 - 10/02/2026</h2>
|
||||
<ul>
|
||||
<li><i>[ChatGPT Web]</i> Fix: Correctly importing the selected text into the compose windows also when ChatGPT shows the advanced mail editor in the response [<a href="https://github.com/micz/ThunderAI/issues/646">#646</a>].</li>
|
||||
</ul>
|
||||
<h2>Version 3.8.3 - 22/01/2026</h2>
|
||||
<ul>
|
||||
<li>Fix: Correctly saving the API settings in new custom prompts [<a href="https://github.com/micz/ThunderAI/issues/623">#623</a>].</li>
|
||||
|
|
|
|||
|
|
@ -51,6 +51,12 @@ Using an API integration, you can activate some automatic features:
|
|||
> - **OpenAI Compatible API**
|
||||
> - You can also use a local OpenAI Compatible API server, like LM Studio or Mistral AI!
|
||||
> - There is also an option to remove the "v1" segment from the API url, if needed, and to manually set the model name if the server doesn't have a models list endpoint.
|
||||
> - You can also use one of these predefined configurations:
|
||||
> - DeepSeek API
|
||||
> - Grok API
|
||||
> - Mistral API
|
||||
> - OpenRouter API
|
||||
> - Perplexity API
|
||||
|
||||
|
||||
|
||||
|
|
@ -95,7 +101,7 @@ Are you using this addon in your Thunderbird?
|
|||
- Português Brasileiro (pt-br): Bruno Pereira de Souza <img src="https://micz.it/weblate/thunderai/pt-br.svg">
|
||||
- Russian (ru): [Maksim](https://hosted.weblate.org/user/law820314/) <img src="https://micz.it/weblate/thunderai/ru.svg">
|
||||
- Spanish (es): [Gerardo Sobarzo](https://hosted.weblate.org/user/gerardo.sobarzo/), [Andrés Rendón Hernández](https://hosted.weblate.org/user/arendon/), [Erick Limon](https://hosted.weblate.org/user/ErickLimonG/) <img src="https://micz.it/weblate/thunderai/es.svg">
|
||||
- Swedish (sv): [Andreas Pettersson](https://hosted.weblate.org/user/Andy_tb/) <img src="https://micz.it/weblate/thunderai/sv.svg">
|
||||
- Swedish (sv): [Andreas Pettersson](https://hosted.weblate.org/user/Andy_tb/) , [Luna Jernberg](https://hosted.weblate.org/user/bittin1ddc447d824349b2/) <img src="https://micz.it/weblate/thunderai/sv.svg">
|
||||
<br>
|
||||
|
||||
Do you want to help translate this addon? [Find out how!](https://micz.it/thunderbird-addon-thunderai/translate/) <br>
|
||||
|
|
|
|||
|
|
@ -1286,5 +1286,131 @@
|
|||
},
|
||||
"prefs_anthropic_temperature_Info": {
|
||||
"message": "Ποσότητα τυχαιότητας που εισάγεται στην απόκριση. Προεπιλογή 1,0. Εύρος από 0,0 έως 1,0. Χρησιμοποιήστε θερμοκρασία πιο κοντά στο 0,0 για αναλυτική ανάλυση."
|
||||
},
|
||||
"placeholder_mail_text_body_or_selected": {
|
||||
"message": "Σώμα μηνύματος ή επιλεγμένο κείμενο"
|
||||
},
|
||||
"placeholder_mail_html_body_or_selected": {
|
||||
"message": "Σώμα μηνύματος ή επιλεγμένη HTML"
|
||||
},
|
||||
"prompt_get_calendar_event_from_clipboard": {
|
||||
"message": "Προσθήκη συμβάντος ημερολογίου από το πρόχειρο"
|
||||
},
|
||||
"clipboard_read_error": {
|
||||
"message": "Δεν ήταν δυνατή η ανάγνωση του προχείρου. Ελέγξτε τα δικαιώματα."
|
||||
},
|
||||
"clipboard_empty_error": {
|
||||
"message": "Το πρόχειρο είναι άδειο. Παρακαλώ αντιγράψτε πρώτα κάποιο κείμενο."
|
||||
},
|
||||
"clipboard_permission_denied": {
|
||||
"message": "Η άδεια χρήσης του πρόχειρου απορρίφθηκε. Ενεργοποιήστε ξανά τη λειτουργία στις ρυθμίσεις για να παραχωρήσετε άδεια."
|
||||
},
|
||||
"clipboard_permission_error": {
|
||||
"message": "Σφάλμα κατά την αίτηση άδειας στο πρόχειρο. Δοκιμάστε ξανά."
|
||||
},
|
||||
"prefs_OptionText_get_calendar_event_from_clipboard": {
|
||||
"message": "Λήψη συμβάντος ημερολογίου από το πρόχειρο"
|
||||
},
|
||||
"prefs_OptionText_get_calendar_event_from_clipboard_Info": {
|
||||
"message": "Εμφάνιση ενός επιπλέον στοιχείου μενού για τη δημιουργία συμβάντων ημερολογίου από περιεχόμενο κειμένου στο πρόχειρο."
|
||||
},
|
||||
"Summarize_prompt_prefs_title": {
|
||||
"message": "Προσθήκη επιλογών σύνοψης"
|
||||
},
|
||||
"prompt_summarize": {
|
||||
"message": "Συνοψίστε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου ή αυτά τα μηνύματα ηλεκτρονικού ταχυδρομείου"
|
||||
},
|
||||
"prompt_summarize_full_text": {
|
||||
"message": "Είστε βοηθός που συνοψίζει συνομιλίες μέσω email. \nΔεδομένου ενός νήματος email, δημιουργήστε μια συνοπτική και ακριβή περίληψη που να καταγράφει: \n- Το κύριο θέμα ή τον σκοπό της συζήτησης \n- Βασικές αποφάσεις, συμπεράσματα ή συμφωνίες \n- Σημαντικές ερωτήσεις, αιτήματα ή ενέργειες \n- Ποιος είναι υπεύθυνος για κάθε ενέργεια (εάν αναφέρεται) \nΠαραλείψτε χαιρετισμούς, υπογραφές, παρατιθέμενο κείμενο και περιττές ανταλλαγές απόψεων. Μην προσθέτετε υποθέσεις ή πληροφορίες που δεν υπάρχουν στα email. \nΓράψτε την περίληψη σε σαφή, ουδέτερη γλώσσα, κατάλληλη για έναν πολυάσχολο επαγγελματία."
|
||||
},
|
||||
"prompt_summarize_email_template": {
|
||||
"message": "Σύνοψη προτύπου email"
|
||||
},
|
||||
"prompt_summarize_email_template_full_text": {
|
||||
"message": "Από: {%author%} \nΠρος: {%recipients%} \nΚοινοποίηση: {%cc_list%} \nΘέμα: {%mail_subject%} \nΗμερομηνία: {%mail_datetime%} \nΣυνημμένα: {%mail_attachments_info%} \nΚύριο κείμενο: \n{%mail_text_body%}"
|
||||
},
|
||||
"prompt_summarize_email_separator": {
|
||||
"message": "Διαχωριστής email"
|
||||
},
|
||||
"prompt_summarize_email_separator_full_text": {
|
||||
"message": "\n\n---------- ΕΠΟΜΕΝΟ EMAIL -----------\n\n"
|
||||
},
|
||||
"prefs_OptionText_Summarize_infoline2": {
|
||||
"message": "Μπορείτε να αλλάξετε την προτροπή όπως επιθυμείτε. Το πρώτο πεδίο είναι η κύρια προτροπή, το δεύτερο πεδίο είναι το πρότυπο για ένα μόνο μήνυμα ηλεκτρονικού ταχυδρομείου. Η λίστα των email θα προσαρτηθεί στην κύρια προτροπή. Τα email θα διαχωρίζονται με το διαχωριστικό που καθορίζεται στο τρίτο πεδίο."
|
||||
},
|
||||
"prefs_OptionText_Summarize_main_prompt": {
|
||||
"message": "Η κύρια προτροπή που περιγράφει την εργασία που θα εκτελεστεί σε όλα τα επιλεγμένα email:"
|
||||
},
|
||||
"prefs_OptionText_Summarize_email_template": {
|
||||
"message": "Το πρότυπο για ένα μόνο email:"
|
||||
},
|
||||
"prefs_OptionText_Summarize_email_separator": {
|
||||
"message": "Το διαχωριστικό μεταξύ των email:"
|
||||
},
|
||||
"prefs_OptionText_get_calendar_event_use_specific_integration_Info": {
|
||||
"message": "Εάν επιλεγεί, το μοντέλο και το API που καθορίζονται παρακάτω θα χρησιμοποιηθούν για τη δημιουργία συμβάντων ημερολογίου, ανεξάρτητα από αυτό που έχει επιλεγεί στη σελίδα επιλογών ThunderAI."
|
||||
},
|
||||
"prefs_OptionText_summarize": {
|
||||
"message": "Σύνοψη αλληλογραφίας"
|
||||
},
|
||||
"prefs_OptionText_summarize_use_specific_integration_Info": {
|
||||
"message": "Εάν επιλεγεί, το μοντέλο και το API που καθορίζονται παρακάτω θα χρησιμοποιηθούν για τη σύνοψη email(s), ανεξάρτητα από αυτό που έχει επιλεγεί στη σελίδα επιλογών ThunderAI."
|
||||
},
|
||||
"prefs_OptionText_summarize_Info": {
|
||||
"message": "Εάν είναι επιλεγμένο, προσθέτει μια επιλογή στο μενού περιβάλλοντος για τη σύνοψη της αλληλογραφίας."
|
||||
},
|
||||
"prefs_OptionText_btnManageSummarizeInfo": {
|
||||
"message": "Διαχείριση ρυθμίσεων σύνοψης"
|
||||
},
|
||||
"Summarize_PageTitle": {
|
||||
"message": "Διαχείριση ρυθμίσεων σύνοψης"
|
||||
},
|
||||
"Summarize_info_default": {
|
||||
"message": "Σε αυτήν τη σελίδα μπορείτε να τροποποιήσετε την προεπιλεγμένη προτροπή που χρησιμοποιείται για τη σύνοψη των μηνυμάτων ηλεκτρονικού ταχυδρομείου."
|
||||
},
|
||||
"Summarize_prompt_text_title": {
|
||||
"message": "Τρέχον κείμενο προτροπής"
|
||||
},
|
||||
"prefs_OptionText_spamfilter_show_msg_panel": {
|
||||
"message": "Εμφάνιση πλαισίου αναφοράς ανεπιθύμητων μηνυμάτων"
|
||||
},
|
||||
"prefs_OptionText_spamfilter_show_msg_panel_Info": {
|
||||
"message": "Εάν είναι επιλεγμένο, θα εμφανίζεται ένα πλαίσιο με την αναφορά ανεπιθύμητης αλληλογραφίας στο επάνω μέρος του μηνύματος."
|
||||
},
|
||||
"SpamReport_infoline": {
|
||||
"message": "Αυτές οι πληροφορίες αποθηκεύονται μόνο για την τρέχουσα συνεδρία."
|
||||
},
|
||||
"Spam": {
|
||||
"message": "Ανεπιθύμητα μηνύματα"
|
||||
},
|
||||
"Valid": {
|
||||
"message": "Έγκυρα Μηνύματα"
|
||||
},
|
||||
"context_menu_mzta-summarize": {
|
||||
"message": "Σύνοψη"
|
||||
},
|
||||
"CORS_alternative_2_new": {
|
||||
"message": "Πατήστε το παρακάτω κουμπί για να δώσετε άδεια στον τρέχοντα κεντρικό υπολογιστή να αποφύγει οποιοδήποτε πρόβλημα με το CORS."
|
||||
},
|
||||
"CORS_give_host_perm": {
|
||||
"message": "Δώστε άδεια στον τρέχοντα κεντρικό υπολογιστή"
|
||||
},
|
||||
"CORS_localhost_warn": {
|
||||
"message": "Εάν χρησιμοποιείτε localhost ή 127.0.0.1 επειδή ο διακομιστής AI φιλοξενείται στον υπολογιστή σας, απαιτείται το δικαίωμα <all_urls>."
|
||||
},
|
||||
"customPrompts_export_include_api_settings": {
|
||||
"message": "Θέλετε να συμπεριλάβετε τις ρυθμίσεις API στην εξαγωγή; Λάβετε υπόψη ότι και το Κλειδί API θα αποθηκευτεί στο αρχείο!"
|
||||
},
|
||||
"prefs_OptionText_calendar_no_selection": {
|
||||
"message": "Μην ζητάτε να επιλέξετε κείμενο"
|
||||
},
|
||||
"prefs_OptionText_calendar_no_selection_Info": {
|
||||
"message": "Εάν είναι επιλεγμένο, δεν χρειάζεται να επιλέξετε κάποιο κείμενο. Το πλήρες σώμα του μηνύματος θα χρησιμοποιηθεί για τη λήψη του συμβάντος ημερολογίου."
|
||||
},
|
||||
"customPrompts_btnCopy": {
|
||||
"message": "Αντιγραφή"
|
||||
},
|
||||
"copy_text": {
|
||||
"message": "αντιγραφή"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1403,5 +1403,14 @@
|
|||
},
|
||||
"Valid": {
|
||||
"message": "Giltig"
|
||||
},
|
||||
"prefs_OptionText_spamfilter_show_msg_panel": {
|
||||
"message": "Visa panelen för skräppostrapportering"
|
||||
},
|
||||
"prefs_OptionText_spamfilter_show_msg_panel_Info": {
|
||||
"message": "Om markerat visas en panel med skräppostrapporten högst upp i meddelandet."
|
||||
},
|
||||
"SpamReport_infoline": {
|
||||
"message": "Denna information sparas endast för den aktuella sessionen."
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ let isDragging = false;
|
|||
let delay_wait_completion = 7000; // milliseconds
|
||||
let _customTextArray = [];
|
||||
let _currentCustomTextIndex = 0;
|
||||
let lastSelectedHtml = "";
|
||||
|
||||
async function chatgpt_sendMsg(msg, method ='') { // return -1 send button not found, -2 textarea not found
|
||||
let textArea = document.getElementById('prompt-textarea')
|
||||
|
|
@ -209,6 +210,10 @@ function addCustomDiv(prompt_action,tabId,mailMessageId) {
|
|||
var btn_ok = document.createElement('button');
|
||||
btn_ok.id="mzta-btn_ok";
|
||||
btn_ok.classList.add('mzta-btn');
|
||||
// Prevent the button from stealing focus and clearing the selection
|
||||
btn_ok.addEventListener('mousedown', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
//console.log('>>>>>>>>>>>>>>> default: '+prompt_action)
|
||||
switch(String(prompt_action)){
|
||||
default:
|
||||
|
|
@ -251,6 +256,10 @@ function addCustomDiv(prompt_action,tabId,mailMessageId) {
|
|||
var btn_change_reply_type = document.createElement('button');
|
||||
disableButton(btn_change_reply_type);
|
||||
btn_change_reply_type.id = 'mzta-btn_change_reply_type';
|
||||
// Prevent the button from stealing focus and clearing the selection
|
||||
btn_change_reply_type.addEventListener('mousedown', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
btn_change_reply_type.classList.add('mzta-btn');
|
||||
btn_change_reply_type.title = browser.i18n.getMessage("chatgpt_win_change_reply_type");
|
||||
// Create SVG element
|
||||
|
|
@ -324,6 +333,10 @@ function addCustomDiv(prompt_action,tabId,mailMessageId) {
|
|||
var btn_diff = document.createElement('button');
|
||||
btn_diff.id='mzta-btn_diff';
|
||||
btn_diff.classList.add('mzta-btn');
|
||||
// Prevent the button from stealing focus and clearing the selection
|
||||
btn_diff.addEventListener('mousedown', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
btn_diff.textContent = browser.i18n.getMessage('btn_show_differences');
|
||||
btn_diff.style.display = 'none';
|
||||
disableButton(btn_diff);
|
||||
|
|
@ -731,7 +744,7 @@ function replaceNewlinesWithBr(node) {
|
|||
function getSelectedHtml() {
|
||||
// Get the Selection object
|
||||
var selection = window.getSelection();
|
||||
|
||||
// console.log(">>>>>>>>>>>>> getSelectedHtml selection.rangeCount: " + selection.rangeCount);
|
||||
if (selection.rangeCount > 0) {
|
||||
// Get the first selected range
|
||||
var range = selection.getRangeAt(0);
|
||||
|
|
@ -741,10 +754,14 @@ function getSelectedHtml() {
|
|||
|
||||
// Clone the contents of the range into the temporary div
|
||||
tempDiv.appendChild(range.cloneContents());
|
||||
|
||||
// console.log(">>>>>>>>>>>>>>>>>> tempDiv.innerHTML: " + tempDiv.innerHTML);
|
||||
// Return the HTML of the selected content
|
||||
return tempDiv.innerHTML.replace(/^<p>"/, '<p>').replace(/"<\\/p>$/, '</p>'); // strip quotation marks;
|
||||
}
|
||||
if (lastSelectedHtml) {
|
||||
// console.log(">>>>>>>>>>>>> getSelectedHtml using cached selection lastSelectedHtml: "+ lastSelectedHtml);
|
||||
return lastSelectedHtml;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
|
@ -767,6 +784,14 @@ document.addEventListener("selectionchange", function() {
|
|||
let btn_ok = document.getElementById('mzta-btn_ok');
|
||||
let btn_diff = document.getElementById('mzta-btn_diff');
|
||||
if (isSomethingSelected()) {
|
||||
// Cache the selection
|
||||
var selection = window.getSelection();
|
||||
if (selection.rangeCount > 0) {
|
||||
var range = selection.getRangeAt(0);
|
||||
var tempDiv = document.createElement("div");
|
||||
tempDiv.appendChild(range.cloneContents());
|
||||
lastSelectedHtml = tempDiv.innerHTML.replace(/^<p>"/, '<p>').replace(/"<\\/p>$/, '</p>');
|
||||
}
|
||||
enableButton(btn_ok);
|
||||
if(current_action == '1'){
|
||||
let btn_reply_type = document.getElementById('mzta-btn_change_reply_type');
|
||||
|
|
@ -815,7 +840,8 @@ function selectContentOnMouseUp(event) {
|
|||
// If the click was inside the excluded area, do nothing
|
||||
return;
|
||||
}
|
||||
|
||||
// console.log(">>>>>>>>>>>>> selectContentOnMouseUp isDragging: " + isDragging);
|
||||
// Reset the dragging flag when the mouse is released")
|
||||
if ((!isDragging)&&(!isSomethingSelected())) {
|
||||
// If no dragging has occurred, execute the selection code
|
||||
selectContentOnClick(event);
|
||||
|
|
@ -840,6 +866,8 @@ function selectContentOnClick(event) {
|
|||
// Traverse the DOM upwards to find the nearest parent div
|
||||
var parentDiv = clickedElement.closest('div');
|
||||
|
||||
// console.log(">>>>>>>>>>>>> parentDiv: " + parentDiv.classList);
|
||||
|
||||
if (parentDiv) {
|
||||
// Create a range object
|
||||
var range = document.createRange();
|
||||
|
|
@ -855,6 +883,7 @@ function selectContentOnClick(event) {
|
|||
|
||||
// Add the new range to the selection
|
||||
selection.addRange(range);
|
||||
// console.log(">>>>>>>>>>>>> selectContentOnClick selection.rangeCount: " + selection.rangeCount);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,10 @@
|
|||
<li><i>[All APIs]</i> Showing the spam filter info at the top of the message. The data is saved only for the session in which the message has been checked for spam [<a href="https://github.com/micz/ThunderAI/issues/506">#506</a>].</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
<h2>Version 3.8.4 - 10/02/2026</h2>
|
||||
<ul>
|
||||
<li><i>[ChatGPT Web]</i> Fix: Correctly importing the selected text into the compose windows also when ChatGPT shows the advanced mail editor in the response [<a href="https://github.com/micz/ThunderAI/issues/646">#646</a>].</li>
|
||||
</ul>
|
||||
<h2>Version 3.8.3 - 22/01/2026</h2>
|
||||
<ul>
|
||||
<li>Fix: Correctly saving the API settings in new custom prompts [<a href="https://github.com/micz/ThunderAI/issues/623">#623</a>].</li>
|
||||
|
|
|
|||
Loading…
Reference in a new issue