Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
ff2balex
Manage
Activity
Members
Labels
Plan
Issues
9
Issue boards
Milestones
Wiki
External wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Lex gaMe
ff2balex
Commits
1bf4df98
Commit
1bf4df98
authored
4 months ago
by
Lucie Bader
Browse files
Options
Downloads
Patches
Plain Diff
Modification fonction màj extension
parent
a335941a
No related branches found
Branches containing commit
No related tags found
1 merge request
!8
Test final
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/popup/popup.html
+0
-6
0 additions, 6 deletions
src/popup/popup.html
src/popup/popup.js
+107
-150
107 additions, 150 deletions
src/popup/popup.js
with
107 additions
and
156 deletions
src/popup/popup.html
+
0
−
6
View file @
1bf4df98
...
@@ -271,12 +271,6 @@
...
@@ -271,12 +271,6 @@
border-color
:
#8d5c70
;
border-color
:
#8d5c70
;
}
}
/* #stats-options {
border: 1px solid #555;
border-radius: 8px;
align-items: center;
} */
.option-row.auto-add-row
{
.option-row.auto-add-row
{
position
:
relative
;
position
:
relative
;
display
:
flex
;
display
:
flex
;
...
...
This diff is collapsed.
Click to expand it.
src/popup/popup.js
+
107
−
150
View file @
1bf4df98
...
@@ -75,118 +75,122 @@ async function updateLanguageSelection() {
...
@@ -75,118 +75,122 @@ async function updateLanguageSelection() {
}
}
// ==========================
// ==========================
// Gestion
des options et des statistiques
// Gestion
principale de l'extension
// ==========================
// ==========================
async
function
updateOptionsUI
()
{
async
function
updateExtension
()
{
// Récupération de tous les états nécessaires
const
accessToken
=
await
getAccessToken
();
const
accessToken
=
await
getAccessToken
();
const
{
extensionActive
,
isTrackingActive
,
autoAdd
,
threshold
,
pyodideSimplemmaReady
}
=
await
browser
.
storage
.
local
.
get
([
"
extensionActive
"
,
"
isTrackingActive
"
,
"
autoAdd
"
,
"
threshold
"
,
"
pyodideSimplemmaReady
"
])
||
{
extensionActive
:
false
,
isTrackingActive
:
false
,
autoAdd
:
false
,
threshold
:
10
,
pyodideSimplemmaReady
:
false
};
const
isLoggedIn
=
!!
accessToken
;
const
isLoggedIn
=
!!
accessToken
;
const
statsOptions
=
document
.
getElementById
(
"
stats-options
"
);
if
(
statsOptions
)
{
// Mise à jour du bouton d'activation de l'extension
statsOptions
.
style
.
display
=
isLoggedIn
?
"
block
"
:
"
none
"
;
const
toggleExtensionBtn
=
document
.
getElementById
(
"
toggleExtensionBtn
"
);
if
(
toggleExtensionBtn
)
{
toggleExtensionBtn
.
textContent
=
extensionActive
?
"
Désactiver l'analyse
"
:
"
Activer l'analyse
"
;
toggleExtensionBtn
.
style
.
opacity
=
isLoggedIn
?
"
1
"
:
"
0.5
"
;
toggleExtensionBtn
.
disabled
=
!
isLoggedIn
;
toggleExtensionBtn
.
title
=
isLoggedIn
?
""
:
"
Connectez-vous pour activer l'analyse
"
;
toggleExtensionBtn
.
onclick
=
handleToggleExtension
;
// Ajout de l'écouteur d'événements
}
}
const
autoAddContainer
=
document
.
getElementById
(
"
auto-add
"
)?.
parentElement
;
// Mise à jour des options de statistiques
const
autoAddCheckbox
=
document
.
getElementById
(
"
auto-add
"
);
const
statsOptions
=
document
.
getElementById
(
"
stats-options
"
);
const
autoAddOptions
=
document
.
getElementById
(
"
auto-add-options
"
);
const
thresholdInput
=
document
.
getElementById
(
"
threshold
"
);
const
saveOptionsBtn
=
document
.
getElementById
(
"
save-options
"
);
const
toggleStatsBtn
=
document
.
getElementById
(
"
toggleStatsBtn
"
);
const
toggleStatsBtn
=
document
.
getElementById
(
"
toggleStatsBtn
"
);
const
openStats
=
document
.
getElementById
(
"
open-stats
"
);
const
openStats
=
document
.
getElementById
(
"
open-stats
"
);
// // Affichage de l'option "Ajout automatique" selon la connexion
if
(
statsOptions
)
{
// if (autoAddContainer) {
statsOptions
.
style
.
display
=
(
isLoggedIn
&&
extensionActive
)
?
"
block
"
:
"
none
"
;
// autoAddContainer.style.display = isLoggedIn ? "block" : "none";
}
// }
// Chargement des préférences
const
{
isTrackingActive
,
autoAdd
,
threshold
}
=
await
browser
.
storage
.
local
.
get
([
"
isTrackingActive
"
,
"
autoAdd
"
,
"
threshold
"
])
||
{
isTrackingActive
:
false
};
// Gestion du bouton de statistiques
if
(
toggleStatsBtn
)
{
if
(
toggleStatsBtn
)
{
if
(
!
isLoggedIn
)
{
const
isEnabled
=
isLoggedIn
&&
extensionActive
;
toggleStatsBtn
.
style
.
opacity
=
"
0.5
"
;
toggleStatsBtn
.
style
.
opacity
=
isEnabled
?
"
1
"
:
"
0.5
"
;
toggleStatsBtn
.
title
=
"
Connectez-vous pour activer les statistiques
"
;
toggleStatsBtn
.
disabled
=
!
isEnabled
;
if
(
openStats
)
openStats
.
style
.
display
=
"
none
"
;
toggleStatsBtn
.
title
=
!
isLoggedIn
?
"
Connectez-vous pour activer les statistiques
"
:
}
else
{
!
extensionActive
?
"
Activez l'analyse pour utiliser les statistiques
"
:
""
;
toggleStatsBtn
.
style
.
opacity
=
"
1
"
;
toggleStatsBtn
.
title
=
""
;
if
(
openStats
)
openStats
.
style
.
display
=
"
block
"
;
}
toggleStatsBtn
.
textContent
=
isTrackingActive
?
"
Désactiver les statistiques
"
:
"
Activer les statistiques
"
;
toggleStatsBtn
.
textContent
=
isTrackingActive
?
"
Désactiver les statistiques
"
:
"
Activer les statistiques
"
;
}
}
// Affichage des options statistiques
if
(
openStats
)
{
if
(
statsOptions
)
{
openStats
.
style
.
display
=
(
isLoggedIn
&&
extensionActive
&&
isTrackingActive
)
?
"
block
"
:
"
none
"
;
statsOptions
.
classList
.
toggle
(
"
hidden
"
,
!
isTrackingActive
);
}
}
if
(
isLoggedIn
)
{
// Mise à jour des options d'ajout automatique
if
(
autoAddCheckbox
)
{
const
autoAddContainer
=
document
.
getElementById
(
"
auto-add
"
)?.
parentElement
;
autoAddCheckbox
.
checked
=
autoAdd
||
false
;
const
autoAddCheckbox
=
document
.
getElementById
(
"
auto-add
"
);
}
const
autoAddOptions
=
document
.
getElementById
(
"
auto-add-options
"
);
if
(
thresholdInput
&&
threshold
!==
undefined
)
{
const
saveOptionsBtn
=
document
.
getElementById
(
"
save-options
"
);
thresholdInput
.
value
=
threshold
;
}
if
(
autoAddContainer
)
{
if
(
autoAddOptions
)
{
autoAddContainer
.
style
.
display
=
(
isLoggedIn
&&
extensionActive
)
?
"
block
"
:
"
none
"
;
autoAddOptions
.
classList
.
toggle
(
"
hidden
"
,
!
autoAdd
);
}
if
(
saveOptionsBtn
)
{
saveOptionsBtn
.
classList
.
toggle
(
"
hidden
"
,
!
autoAdd
);
}
}
else
{
if
(
autoAddCheckbox
)
{
autoAddCheckbox
.
checked
=
false
;
}
if
(
autoAddOptions
)
{
autoAddOptions
.
classList
.
add
(
"
hidden
"
);
}
if
(
saveOptionsBtn
)
{
saveOptionsBtn
.
classList
.
add
(
"
hidden
"
);
}
}
}
}
// ==========================
if
(
autoAddCheckbox
&&
isLoggedIn
)
{
// Gestion de l'activation/désactivation de l'extension
autoAddCheckbox
.
checked
=
autoAdd
;
// ==========================
}
async
function
updateExtensionToggleButton
()
{
const
{
accessToken
,
extensionActive
}
=
await
browser
.
storage
.
local
.
get
([
"
accessToken
"
,
"
extensionActive
"
]);
const
toggleButton
=
document
.
getElementById
(
"
toggleExtensionBtn
"
);
if
(
!
toggleButton
)
{
if
(
autoAddOptions
)
{
console
.
error
(
"
❌ Le bouton d'activation de l'analyse n'a pas été trouvé.
"
);
autoAddOptions
.
classList
.
toggle
(
"
hidden
"
,
!
autoAdd
);
return
;
}
}
if
(
!
accessToken
)
{
if
(
saveOptionsBtn
)
{
toggleButton
.
textContent
=
"
Activer l'analyse
"
;
saveOptionsBtn
.
classList
.
toggle
(
"
hidden
"
,
!
autoAdd
);
toggleButton
.
style
.
opacity
=
"
0.5
"
;
toggleButton
.
title
=
"
Connectez-vous pour activer l'analyse
"
;
}
else
{
toggleButton
.
style
.
opacity
=
"
1
"
;
toggleButton
.
textContent
=
extensionActive
?
"
Désactiver l'analyse
"
:
"
Activer l'analyse
"
;
toggleButton
.
title
=
""
;
}
}
// Ajout d'un écouteur unique
// Mise à jour du message de chargement Pyodide
if
(
!
toggleButton
.
dataset
.
listenerAdded
)
{
const
statusContainer
=
document
.
getElementById
(
'
pyodide-loading
'
);
toggleButton
.
addEventListener
(
"
click
"
,
handleToggleExtension
);
if
(
statusContainer
)
{
toggleButton
.
dataset
.
listenerAdded
=
"
true
"
;
if
(
!
isLoggedIn
)
{
statusContainer
.
innerHTML
=
""
;
}
else
if
(
!
pyodideSimplemmaReady
&&
extensionActive
&&
isTrackingActive
)
{
statusContainer
.
innerHTML
=
"
<p style='color: black; text-align: center; font-size: 11px;'>Chargement de l'extension en cours, veuillez patienter...</p>
"
;
}
else
if
(
pyodideSimplemmaReady
&&
extensionActive
&&
isTrackingActive
)
{
statusContainer
.
innerHTML
=
"
<p style='color: black; text-align: center; font-size: 11px;'>C'est prêt !</p>
"
;
setTimeout
(()
=>
{
statusContainer
.
innerHTML
=
""
;
},
2000
);
}
else
{
statusContainer
.
innerHTML
=
""
;
}
}
}
}
function
handleToggleExtension
()
{
// Mise à jour de la sélection des langues
getAccessToken
().
then
(
accessToken
=>
{
await
updateLanguageSelection
();
if
(
!
accessToken
)
return
;
proceedToggleExtension
();
log
(
"
Interface mise à jour complètement
"
,
{
isLoggedIn
,
extensionActive
,
isTrackingActive
,
autoAdd
,
pyodideSimplemmaReady
});
});
}
}
async
function
handleToggleExtension
()
{
const
accessToken
=
await
getAccessToken
();
if
(
!
accessToken
)
return
;
await
proceedToggleExtension
();
}
async
function
proceedToggleExtension
()
{
async
function
proceedToggleExtension
()
{
const
{
extensionActive
,
isTrackingActive
}
=
await
browser
.
storage
.
local
.
get
({
const
{
extensionActive
,
isTrackingActive
}
=
await
browser
.
storage
.
local
.
get
({
extensionActive
:
false
,
extensionActive
:
false
,
...
@@ -195,63 +199,25 @@ async function proceedToggleExtension() {
...
@@ -195,63 +199,25 @@ async function proceedToggleExtension() {
const
newState
=
!
extensionActive
;
const
newState
=
!
extensionActive
;
await
browser
.
storage
.
local
.
set
({
extensionActive
:
newState
});
await
browser
.
storage
.
local
.
set
({
extensionActive
:
newState
});
const
toggleButton
=
document
.
getElementById
(
"
toggleExtensionBtn
"
);
if
(
toggleButton
)
{
toggleButton
.
textContent
=
newState
?
"
Désactiver l'analyse
"
:
"
Activer l'analyse
"
;
}
browser
.
runtime
.
sendMessage
({
action
:
"
toggleExtension
"
,
isActive
:
newState
});
if
(
!
newState
)
{
if
(
!
newState
)
{
await
browser
.
storage
.
local
.
set
({
isTrackingActive
:
false
});
await
browser
.
storage
.
local
.
set
({
isTrackingActive
:
false
});
// Si les statistiques étaient activées, ouvrir la page stats
if
(
isTrackingActive
)
window
.
open
(
"
stats.html
"
,
"
_blank
"
);
if
(
isTrackingActive
)
window
.
open
(
"
stats.html
"
,
"
_blank
"
);
browser
.
runtime
.
sendMessage
({
action
:
"
closeSidebarBlocks
"
});
browser
.
runtime
.
sendMessage
({
action
:
"
closeSidebarBlocks
"
});
}
}
await
updateOptionsUI
();
browser
.
runtime
.
sendMessage
({
action
:
"
toggleExtension
"
,
isActive
:
newState
});
}
await
updateExtension
();
async
function
displayLoadingMessage
()
{
const
statusContainer
=
document
.
getElementById
(
'
pyodide-loading
'
);
if
(
!
statusContainer
)
return
;
const
{
pyodideSimplemmaReady
}
=
await
browser
.
storage
.
local
.
get
(
"
pyodideSimplemmaReady
"
);
const
accessToken
=
await
getAccessToken
();
if
(
!
accessToken
)
{
statusContainer
.
innerHTML
=
""
;
}
else
if
(
!
pyodideSimplemmaReady
)
{
statusContainer
.
innerHTML
=
"
<p style='color: gray; text-align: center; font-size: 10px;'>Activation en cours, veuillez patienter...</p>
"
;
}
else
{
statusContainer
.
innerHTML
=
""
;
}
}
}
// ==========================
// ==========================
// Écouteurs d'événements
// Écouteurs d'événements
// ==========================
// ==========================
document
.
addEventListener
(
"
DOMContentLoaded
"
,
async
()
=>
{
document
.
addEventListener
(
"
DOMContentLoaded
"
,
async
()
=>
{
await
updateConnectionButton
();
await
updateConnectionButton
();
await
updateOptionsUI
();
await
updateExtension
();
await
updateLanguageSelection
();
await
updateExtensionToggleButton
();
});
});
document
.
addEventListener
(
"
DOMContentLoaded
"
,
()
=>
{
// Gestion des statistiques
displayLoadingMessage
();
const
loadingCheck
=
setInterval
(
async
()
=>
{
await
displayLoadingMessage
();
const
{
pyodideSimplemmaReady
}
=
await
browser
.
storage
.
local
.
get
(
"
pyodideSimplemmaReady
"
);
if
(
pyodideSimplemmaReady
)
{
clearInterval
(
loadingCheck
);
}
},
500
);
});
// Gestion des statistiques et options
document
.
getElementById
(
"
toggleStatsBtn
"
)?.
addEventListener
(
"
click
"
,
async
()
=>
{
document
.
getElementById
(
"
toggleStatsBtn
"
)?.
addEventListener
(
"
click
"
,
async
()
=>
{
const
accessToken
=
await
getAccessToken
();
const
accessToken
=
await
getAccessToken
();
if
(
!
accessToken
)
return
;
if
(
!
accessToken
)
return
;
...
@@ -262,39 +228,34 @@ document.getElementById("toggleStatsBtn")?.addEventListener("click", async () =>
...
@@ -262,39 +228,34 @@ document.getElementById("toggleStatsBtn")?.addEventListener("click", async () =>
if
(
!
newState
)
{
if
(
!
newState
)
{
await
browser
.
storage
.
local
.
set
({
autoAdd
:
false
});
await
browser
.
storage
.
local
.
set
({
autoAdd
:
false
});
document
.
getElementById
(
"
auto-add
"
).
checked
=
false
;
document
.
getElementById
(
"
auto-add-options
"
).
classList
.
add
(
"
hidden
"
);
document
.
getElementById
(
"
save-options
"
).
classList
.
add
(
"
hidden
"
);
}
}
document
.
getElementById
(
"
toggleStatsBtn
"
).
textContent
=
newState
?
"
Désactiver les statistiques
"
:
"
Activer les statistiques
"
;
document
.
getElementById
(
"
stats-options
"
).
classList
.
toggle
(
"
hidden
"
,
!
newState
);
browser
.
runtime
.
sendMessage
({
command
:
"
toggle-stats
"
,
isActive
:
newState
});
browser
.
runtime
.
sendMessage
({
command
:
"
toggle-stats
"
,
isActive
:
newState
});
if
(
newState
)
{
if
(
newState
)
{
log
(
"
[Popup] Demande d'initialisation de Pyodide et Simplemma
"
);
browser
.
runtime
.
sendMessage
({
command
:
"
pyodide-simplemma
"
});
browser
.
runtime
.
sendMessage
({
command
:
"
pyodide-simplemma
"
});
}
}
await
updateExtension
();
});
});
// Gestion d
u changement de l'option d
'ajout automatique
// Gestion d
e l
'ajout automatique
document
.
getElementById
(
"
auto-add
"
)?.
addEventListener
(
"
change
"
,
async
()
=>
{
document
.
getElementById
(
"
auto-add
"
)?.
addEventListener
(
"
change
"
,
async
()
=>
{
const
isChecked
=
document
.
getElementById
(
"
auto-add
"
).
checked
;
const
isChecked
=
document
.
getElementById
(
"
auto-add
"
).
checked
;
document
.
getElementById
(
"
auto-add-options
"
).
classList
.
toggle
(
"
hidden
"
,
!
isChecked
);
document
.
getElementById
(
"
auto-add-options
"
).
classList
.
toggle
(
"
hidden
"
,
!
isChecked
);
document
.
getElementById
(
"
save-options
"
).
classList
.
toggle
(
"
hidden
"
,
!
isChecked
);
document
.
getElementById
(
"
save-options
"
).
classList
.
toggle
(
"
hidden
"
,
!
isChecked
);
if
(
!
isChecked
)
{
if
(
!
isChecked
)
{
await
browser
.
storage
.
local
.
set
({
autoAdd
:
false
});
await
browser
.
storage
.
local
.
set
({
autoAdd
:
false
});
await
updateExtension
();
}
}
});
});
// Sauvegarde des options
utilisateur
// Sauvegarde des options
document
.
getElementById
(
"
save-options
"
)?.
addEventListener
(
"
click
"
,
async
()
=>
{
document
.
getElementById
(
"
save-options
"
)?.
addEventListener
(
"
click
"
,
async
()
=>
{
const
autoAdd
=
document
.
getElementById
(
"
auto-add
"
).
checked
;
const
autoAdd
=
document
.
getElementById
(
"
auto-add
"
).
checked
;
const
threshold
=
parseInt
(
document
.
getElementById
(
"
threshold
"
).
value
,
10
);
const
threshold
=
parseInt
(
document
.
getElementById
(
"
threshold
"
).
value
,
10
);
const
selectedLanguages
=
Array
.
from
(
document
.
querySelectorAll
(
"
#language-selection .lang-option.selected
"
))
const
selectedLanguages
=
Array
.
from
(
document
.
querySelectorAll
(
"
#language-selection .lang-option.selected
"
))
.
map
(
option
=>
option
.
dataset
.
value
);
.
map
(
option
=>
option
.
dataset
.
value
);
// Vérification : si auto-add est activé, au moins une langue doit être sélectionnée
const
errorMessage
=
document
.
getElementById
(
"
error-message
"
);
const
errorMessage
=
document
.
getElementById
(
"
error-message
"
);
if
(
autoAdd
&&
selectedLanguages
.
length
===
0
)
{
if
(
autoAdd
&&
selectedLanguages
.
length
===
0
)
{
errorMessage
?.
classList
.
remove
(
"
hidden
"
);
errorMessage
?.
classList
.
remove
(
"
hidden
"
);
...
@@ -307,40 +268,36 @@ document.getElementById("save-options")?.addEventListener("click", async () => {
...
@@ -307,40 +268,36 @@ document.getElementById("save-options")?.addEventListener("click", async () => {
threshold
,
threshold
,
trackedLanguages
:
selectedLanguages
trackedLanguages
:
selectedLanguages
});
});
log
(
"
Options sauvegardées :
"
,
{
autoAdd
,
threshold
,
trackedLanguages
:
selectedLanguages
});
await
updateExtension
();
log
(
"
Options sauvegardées et interface mise à jour
"
);
});
});
//
Bouton pour ouvrir la pag
e des statistiques
//
Ouvertur
e des statistiques
document
.
getElementById
(
"
open-stats
"
)?.
addEventListener
(
"
click
"
,
()
=>
{
document
.
getElementById
(
"
open-stats
"
)?.
addEventListener
(
"
click
"
,
()
=>
{
window
.
open
(
"
stats.html
"
,
"
_blank
"
);
window
.
open
(
"
stats.html
"
,
"
_blank
"
);
});
});
// ==========================
// ==========================
//
Récep
tion des messages
du background
//
Ges
tion des messages
et du stockage
// ==========================
// ==========================
browser
.
runtime
.
onMessage
.
addListener
(
async
(
message
)
=>
{
browser
.
runtime
.
onMessage
.
addListener
(
async
(
message
)
=>
{
log
(
"
📩 Message reçu dans popup.js :
"
,
message
);
log
(
"
📩 Message reçu dans popup.js :
"
,
message
);
if
(
message
.
action
===
"
updateUI
"
)
{
if
(
message
.
action
===
"
updateUI
"
)
{
log
(
"
🔄 Mise à jour de l'UI du popup...
"
);
await
updateExtension
();
await
updateConnectionButton
();
await
updateOptionsUI
();
await
updateLanguageSelection
();
}
else
if
(
message
.
action
===
"
notify
"
)
{
}
else
if
(
message
.
action
===
"
notify
"
)
{
alert
(
message
.
message
);
alert
(
message
.
message
);
}
}
});
});
// Actualisation de l'UI en cas de changement dans le stockage local
browser
.
storage
.
onChanged
.
addListener
((
changes
,
area
)
=>
{
browser
.
storage
.
onChanged
.
addListener
((
changes
,
area
)
=>
{
if
(
area
===
"
local
"
&&
changes
.
accessToken
)
{
if
(
area
===
"
local
"
)
{
updateConnectionButton
();
updateExtension
();
updateExtensionToggleButton
();
}
}
});
});
// ==========================
// ==========================
// Gestion de
l'affichage de notifications (optionnelle)
// Gestion de
s notifications
// ==========================
// ==========================
function
showNotification
(
message
)
{
function
showNotification
(
message
)
{
const
notificationBox
=
document
.
getElementById
(
"
extension-notification
"
);
const
notificationBox
=
document
.
getElementById
(
"
extension-notification
"
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment