Version 1.0.0 - Ajout de WebMetrics et de l'édit utilisateur
All checks were successful
Neutral/pipeline/head This commit looks good
All checks were successful
Neutral/pipeline/head This commit looks good
This commit is contained in:
@ -1180,6 +1180,86 @@ class User {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Permet de créer un composant de vue de type "Metrics"
|
||||
*/
|
||||
class Metric {
|
||||
properties;
|
||||
View;
|
||||
Component;
|
||||
data;
|
||||
constructor(settings) {
|
||||
this.properties = settings.properties
|
||||
this.View = settings.View
|
||||
this.Component = settings.Component
|
||||
this.data = settings.properties.data
|
||||
}
|
||||
|
||||
generateHTML() {
|
||||
return `
|
||||
<div class="metric">
|
||||
<div class="metric-info">
|
||||
<div class="metric-text">
|
||||
<p class='metric-title'><strong>${this.properties.name}</strong></p>
|
||||
<p class='metric-id'>${this.properties.id}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id='${this.properties.id}_content' class="metric-content">
|
||||
</div>
|
||||
<div class="metric-actions">
|
||||
|
||||
<button id='${this.properties.id}_metricpower' class='btn red'><span><i class='fa fa-trash'></i> Supprimer<span></button>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
`
|
||||
|
||||
}
|
||||
|
||||
loadScript() {
|
||||
|
||||
const contentDiv = getID(`${this.properties.id}_content`)
|
||||
|
||||
for(const data of this.data) {
|
||||
contentDiv.innerHTML += `<div class='metric-data'><div class='metric-data-div'><p class='metric-data-title'>${data.description}</p><p class='metric-data-id'>${data.name}</p></div><p class='metric-data-value'>Valeur : <span>${data.value}<span></p></div>`
|
||||
|
||||
}
|
||||
|
||||
const deleteButton = getID(`${this.properties.id}_metricpower`)
|
||||
|
||||
deleteButton.addEventListener("click", () => {
|
||||
this.View.createPopup({
|
||||
title: `<i class='fa fa-trash'></i> Supprimer la métrique : ${this.properties.name}`,
|
||||
content: `
|
||||
<p class='us-delete'>Voulez-vous vraiment supprimer la métrique <strong>${this.properties.name}</strong> ?</p>
|
||||
|
||||
<button id="${this.properties.id}_deleteconfirm" class="btn red"><span><i class='fa fa-trash'></i> Supprimer</span></button>
|
||||
|
||||
`
|
||||
})
|
||||
|
||||
const deleteCButton = getID(`${this.properties.id}_deleteconfirm`)
|
||||
|
||||
deleteCButton.addEventListener("click", () => {
|
||||
const request = post(`MT_DELETE`, this.properties.id)
|
||||
request.then((answer) => {
|
||||
if(answer == "OK") {
|
||||
this.View.destroyPopup()
|
||||
this.View.destroy()
|
||||
this.Component.forceWindow()
|
||||
|
||||
} else {
|
||||
console.log(answer)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Permet de créer un item de la barre des tâches
|
||||
@ -1196,7 +1276,6 @@ class ViewItem {
|
||||
|
||||
show() {
|
||||
const viewItems = getID("views-items")
|
||||
|
||||
const item = document.createElement("div")
|
||||
item.id = `${this.window.ViewProperties.title}_item`
|
||||
item.classList.add("view-item")
|
||||
|
@ -14,7 +14,7 @@ explorer.createWindow(() => {
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -58,6 +58,9 @@ explorer.createWindow(() => {
|
||||
</div>
|
||||
</div>
|
||||
<div id='${View.getViewTitle()}_explorer' class='fx-explorer'>
|
||||
<div style='font-size: 24px; margin-top: 225px;' class='t-center'>
|
||||
<p><i class="fa-solid fa-rotate fa-spin"></i> Chargement en cours ...</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -7,6 +7,7 @@ loadUserInfo()
|
||||
|
||||
|
||||
function loadUserInfo() {
|
||||
|
||||
|
||||
const infoUsername = getID("infoUsername")
|
||||
const infoUserimage = getID("infoUserimage")
|
||||
@ -25,7 +26,7 @@ function loadUserInfo() {
|
||||
const permissions = ANS_user.permission
|
||||
|
||||
const AvailableViews = new Array()
|
||||
|
||||
//
|
||||
permissions.forEach((permValue) => {
|
||||
|
||||
AllComponents.forEach((component) => {
|
||||
@ -64,3 +65,4 @@ function loadUserInfo() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -11,7 +11,11 @@ links.createWindow(() => {
|
||||
<div class='ln-bar'>
|
||||
<button id='${View.getViewTitle()}_add' class='btn blue'><span><i class='fa fa-add'></i> Ajouter un lien</span></button>
|
||||
</div>
|
||||
<div class='ln-links' id='${View.getViewTitle()}_links'></div>
|
||||
<div class='ln-links' id='${View.getViewTitle()}_links'>
|
||||
<div style='font-size: 24px; margin-top: 225px;' class='t-center'>
|
||||
<p><i class="fa-solid fa-rotate fa-spin"></i> Chargement en cours ...</p>
|
||||
</div>
|
||||
</div>
|
||||
`)
|
||||
|
||||
const addBtn = getID(`${View.getViewTitle()}_add`)
|
||||
@ -182,8 +186,6 @@ links.createWindow(() => {
|
||||
</div>
|
||||
`
|
||||
|
||||
|
||||
|
||||
})
|
||||
|
||||
links.forEach((link) => {
|
||||
|
@ -0,0 +1,138 @@
|
||||
metrics.createWindow(() => {
|
||||
|
||||
const View = new ViewWindow({
|
||||
title: `<i class="fa-solid fa-square-poll-vertical"></i> Web Metrik`,
|
||||
width: "600px",
|
||||
height: "600px",
|
||||
})
|
||||
|
||||
loadMetrics()
|
||||
|
||||
function loadMetrics() {
|
||||
|
||||
View.setContent(`
|
||||
<div class="metrics">
|
||||
<div class='mt-bar'>
|
||||
<p> <strong>WebMetrik</strong> : <span id='${View.getViewTitle()}_number'><i>Calcul en cours</i></span></p>
|
||||
<div>
|
||||
<button id='${View.getViewTitle()}_refresh' class='btn green'><span><i class='fa fa-rotate-left'></i> Rafraîchir</span></button>
|
||||
<button id='${View.getViewTitle()}_add' class='btn blue'><span><i class='fa fa-add'></i> Ajouter un WebMetrik</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class='mt-metrics' id='${View.getViewTitle()}_metrics'>
|
||||
|
||||
<div style='font-size: 24px; margin-top: 180px;' class='t-center'>
|
||||
<p><i class="fa-solid fa-rotate fa-spin"></i> Chargement en cours ...</p>
|
||||
</div>
|
||||
|
||||
</div>`)
|
||||
|
||||
const metricsList = new Array()
|
||||
const metricsComponent = new Array()
|
||||
const metricsReq = get("MT_ALL")
|
||||
|
||||
const metricsDiv = document.getElementById(`${View.getViewTitle()}_metrics`)
|
||||
const metricsNumber = document.getElementById(`${View.getViewTitle()}_number`)
|
||||
const addButton = document.getElementById(`${View.getViewTitle()}_add`)
|
||||
const refreshButton = document.getElementById(`${View.getViewTitle()}_refresh`)
|
||||
const metricsView = document.getElementById(`${View.getViewTitle()}_metrics`)
|
||||
|
||||
refreshButton.addEventListener("click", () => {
|
||||
loadMetrics()
|
||||
})
|
||||
|
||||
metricsReq.then((ANS_metrics) => {
|
||||
if(ANS_metrics != "UNAVAILABLE") {
|
||||
metricsList.length = 0
|
||||
ANS_metrics.forEach((metric) => {
|
||||
const metricComponent = new Metric({
|
||||
properties: metric,
|
||||
Component: metrics,
|
||||
View: View
|
||||
})
|
||||
metricsList.push(metricComponent.generateHTML())
|
||||
|
||||
metricsComponent.push(metricComponent)
|
||||
})
|
||||
metricsDiv.innerHTML = metricsList.join("")
|
||||
metricsNumber.innerHTML = ANS_metrics.length
|
||||
|
||||
for(const metric of metricsComponent) {
|
||||
metric.loadScript()
|
||||
}
|
||||
} else {
|
||||
metricsDiv.innerHTML = `<div style='font-size: 24px; margin-top: 180px;' class='t-center'>
|
||||
<p><i class="fa-solid fa-warning"></i> Une erreur est survenue lors du chargement des WebMetrik</p>
|
||||
</div>`
|
||||
}
|
||||
})
|
||||
|
||||
// Generate a pop to add metrics with 3 settings, the adress, the port, the name of the metrics and the key to authentificate
|
||||
|
||||
addButton.addEventListener("click", () => {
|
||||
|
||||
View.createPopup({
|
||||
title: "Ajouter un WebMetrik",
|
||||
content: `
|
||||
<div class='mt-add'>
|
||||
<p>Adresse</p>
|
||||
<input class='field' type="text" id="mt-add-address" placeholder="Adresse">
|
||||
<p>Port</p>
|
||||
<input class='field' type="number" id="mt-add-port" placeholder="Port">
|
||||
<p>Nom</p>
|
||||
<input class='field' type="text" id="mt-add-name" placeholder="Nom">
|
||||
<p>Clé d'authentification</p>
|
||||
<input class='field' type="password" id="mt-add-key" placeholder="Clé d'authentification">
|
||||
<span id='mtaddinfo'></span>
|
||||
<button id='mt-add-btn' class='btn blue'><span><i class='fa fa-add'></i> Ajouter</span></button>
|
||||
</div>
|
||||
`
|
||||
})
|
||||
|
||||
const addBtn = document.getElementById("mt-add-btn")
|
||||
const address = document.getElementById("mt-add-address")
|
||||
const port = document.getElementById("mt-add-port")
|
||||
const name = document.getElementById("mt-add-name")
|
||||
const key = document.getElementById("mt-add-key")
|
||||
const infoMTAdd = new TextResponse("mtaddinfo")
|
||||
|
||||
|
||||
addBtn.addEventListener("click", () => {
|
||||
|
||||
// Check if all fields are filled
|
||||
|
||||
if(address.value == "" || port.value == "" || name.value == "" || key.value == "") {
|
||||
infoMTAdd.err("Veuillez remplir tous les champs")
|
||||
return
|
||||
}
|
||||
|
||||
post("MT_ADD", {
|
||||
address: address.value,
|
||||
port: port.value,
|
||||
name: name.value,
|
||||
key: key.value
|
||||
}).then((res) => {
|
||||
if(res != "ERROR") {
|
||||
View.destroyPopup()
|
||||
loadMetrics()
|
||||
} else {
|
||||
View.createPopup({
|
||||
title: "Erreur",
|
||||
content: `<p class='yellow'><i class='fa fa-warning'></i> Une erreur est survenue lors de l'ajout de la WebMetrik</p>`
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/*
|
||||
<div style='font-size: 24px; margin-top: 180px;' class='t-center'>
|
||||
<p><i class="fa-solid fa-rotate fa-spin"></i> Chargement en cours ...</p>
|
||||
</div>*/
|
@ -7,6 +7,8 @@ const explorer = new ViewComponent({
|
||||
icon: "fa-solid fa-folder",
|
||||
permission: "FILES_EXPLORER"
|
||||
})
|
||||
|
||||
|
||||
|
||||
const services = new ViewComponent({
|
||||
name: "Gestion des services",
|
||||
@ -27,7 +29,7 @@ const explorer = new ViewComponent({
|
||||
})
|
||||
|
||||
const metrics = new ViewComponent({
|
||||
name: "Web Metrics",
|
||||
name: "Web Metrik",
|
||||
icon: "fa-solid fa-square-poll-vertical",
|
||||
permission: "METRICS"
|
||||
})
|
||||
|
119
public/javascripts/personal.js
Normal file
119
public/javascripts/personal.js
Normal file
@ -0,0 +1,119 @@
|
||||
|
||||
const menulogo = getID("menu-logo")
|
||||
const usersettingsBtn = getID("user-settings-button")
|
||||
|
||||
menu.style.display = "none"
|
||||
|
||||
menulogo.addEventListener("click", () => {
|
||||
|
||||
const menu = getID("menu")
|
||||
|
||||
if(menu.style.display == "block") {
|
||||
menu.style.display = "none"
|
||||
} else {
|
||||
menu.style.display = "block"
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
usersettingsBtn.addEventListener("click", () => {
|
||||
const View = new ViewWindow({
|
||||
title: `<i class="fa fa-user"></i> Mon Compte`,
|
||||
width: "600px",
|
||||
height: "650px"
|
||||
})
|
||||
|
||||
View.setContent(`
|
||||
<div class="user-settings">
|
||||
<p>Mes informations</p>
|
||||
<div class="us-settings">
|
||||
|
||||
<img class='us-settings-image' id="us-settings-image" src="">
|
||||
|
||||
<div class="us-settings-info">
|
||||
<p>Nom d'utilisateur</p>
|
||||
<input class="field" type="text" id="us-settings-username" placeholder="Nom d'utilisateur">
|
||||
<p>Nom d'affichage</p>
|
||||
<input class="field" type="text" id="us-settings-displayname" placeholder="Nom d'affichage">
|
||||
<p>Mot de passe</p>
|
||||
<input class="field" type="password" id="us-settings-password" placeholder="Mot de passe">
|
||||
<p>Photo de profil</p>
|
||||
<input type="file" id="us-settings-picture" accept="image/png, image/jpeg">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<br>
|
||||
<span id='us-settings-return-info'></span>
|
||||
<button id="us-settings-save" class="btn green"><span> Sauvegarder</span></button>
|
||||
</div>
|
||||
<p>Mes permissions</p>
|
||||
<div id="us-settings-permissions">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
`)
|
||||
|
||||
const usSettingsImage = getID("us-settings-image")
|
||||
const usSettingsUsername = getID("us-settings-username")
|
||||
const usSettingsDisplayname = getID("us-settings-displayname")
|
||||
const usSettingsPassword = getID("us-settings-password")
|
||||
const usSettingsPermissions = getID("us-settings-permissions")
|
||||
const usSettingsSave = getID("us-settings-save")
|
||||
const usSettingsPicture = getID("us-settings-picture")
|
||||
const returnInfo = new TextResponse("us-settings-return-info")
|
||||
|
||||
const REQ_user = get("USERINFO")
|
||||
|
||||
var actualUsername = ""
|
||||
|
||||
REQ_user.then((ANS_user) => {
|
||||
usSettingsImage.src = ANS_user.picture
|
||||
usSettingsUsername.value = ANS_user.username
|
||||
usSettingsDisplayname.value = ANS_user.display_name
|
||||
actualUsername = ANS_user.username
|
||||
|
||||
const permissions = ANS_user.permission
|
||||
const permValid = new Array()
|
||||
|
||||
permissions.forEach((permValue) => {
|
||||
|
||||
permValid.push("<p>" + permValue + "</p>")
|
||||
|
||||
})
|
||||
|
||||
usSettingsPermissions.innerHTML = permValid.join("")
|
||||
})
|
||||
|
||||
usSettingsSave.addEventListener("click", () => {
|
||||
const request = post(`US_EDIT_PERSONNAL`, {username: actualUsername, newusername: usSettingsUsername.value, display_name: usSettingsDisplayname.value, password: usSettingsPassword.value, picture: usSettingsPicture.files[0]})
|
||||
request.then((answer) => {
|
||||
if(answer == "ALREADY_EXIST") {
|
||||
|
||||
returnInfo.err("L'utilisateur existe déjà !")
|
||||
|
||||
} else if(answer == "USERNAME_MISSING") {
|
||||
|
||||
returnInfo.err("Le nom d'utilisateur est manquant !")
|
||||
} else if(answer == "DISPLAY_NAME_MISSING") {
|
||||
|
||||
returnInfo.err("Le nom d'affichage est manquant !")
|
||||
} else if(answer == "PASSWORD_MISSING") {
|
||||
|
||||
returnInfo.err("Le mot de passe est manquant !")
|
||||
} else {
|
||||
|
||||
View.destroy()
|
||||
loadUserInfo()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
|
||||
document.addEventListener("click", (e) => {
|
||||
if(e.target != menulogo) {
|
||||
menu.style.display = "none"
|
||||
}
|
||||
})
|
@ -36,7 +36,7 @@ pipelines.createWindow(() => {
|
||||
|
||||
View.setContent(`
|
||||
<div class="pipelines">
|
||||
<div id='reload_Btn_pipeline' class='pl-reload'><i class='fa fa-rotate-left'></i> Recharger les pipelines</div>
|
||||
<button id='reload_Btn_pipeline' class='btn blue'><span><i class='fa fa-rotate-left'></i> Recharger les pipelines</span></button>
|
||||
${pipelinesList.join("")}
|
||||
</div>`)
|
||||
|
||||
|
@ -18,7 +18,9 @@ users.createWindow(async () => {
|
||||
<button id='${View.getViewTitle()}_add' class='btn blue'><span><i class='fa fa-add'></i> Ajouter un utilisateur</span></button>
|
||||
</div>
|
||||
<div class='us-users' id='${View.getViewTitle()}_users'>
|
||||
|
||||
<div style='font-size: 24px; margin-top: 180px;' class='t-center'>
|
||||
<p><i class="fa-solid fa-rotate fa-spin"></i> Chargement en cours ...</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>`)
|
||||
|
||||
@ -87,7 +89,7 @@ users.createWindow(async () => {
|
||||
})
|
||||
|
||||
|
||||
const addButton = document.getElementById("us-add-button")
|
||||
const addCButton = document.getElementById("us-add-button")
|
||||
const username = document.getElementById("us-add-username")
|
||||
const displayname = document.getElementById("us-add-displayname")
|
||||
const password = document.getElementById("us-add-password")
|
||||
@ -96,7 +98,7 @@ users.createWindow(async () => {
|
||||
const returnInfo = new TextResponse("user-addreturn-info")
|
||||
|
||||
|
||||
addButton.addEventListener("click", () => {
|
||||
addCButton.addEventListener("click", () => {
|
||||
var permissionsList = new Array()
|
||||
for(var permission of permissions) {
|
||||
console.log(permission.children[0].checked)
|
||||
@ -164,6 +166,7 @@ users.createWindow(async () => {
|
||||
|
||||
for(var user of usersList) {
|
||||
usersContent.push(user.generateHTML())
|
||||
|
||||
}
|
||||
|
||||
usersDiv.innerHTML = usersContent.join("")
|
||||
|
Reference in New Issue
Block a user