GeGaX
Messages postés83Date d'inscriptionmardi 20 février 2018StatutMembreDernière intervention25 décembre 2018
-
Modifié le 20 févr. 2018 à 22:35
GeGaX
Messages postés83Date d'inscriptionmardi 20 février 2018StatutMembreDernière intervention25 décembre 2018
-
4 avril 2018 à 23:55
Bonjour,
J'ai une extension Google Chrome qui m'extrait les valeurs d'une page web et qui me liste les instructions sous forme de tableau
Le rendu du popup.html me donne ceci :
La dessus tout va bien pas de soucis ;)
Petite précision qui à son importance, dans la colonne TWA, les valeurs en vert sont positives et les valeurs en rouge sont négatives
Je ne parlerais que de TWA et TWAm ( BTW et BTWm c'est la même chose sauf que cela se passe sur 360° et je possède déjà le minuscule bout de code me permettant de faire la conversion)
[COURS RELOU ... ] En navigation maritime, le vert c'est à droite et on l'appelle tribord ; le rouge c'est à gauche et on l'appelle bâbord. Tribord et Bâbord sont donc 2 "cotés" différents que l'on appelle "bords" [/ COURS RELOU ...]
TWAm ne fait pas parti des valeurs extraites puis listées, c'est une valeur calculée.
# Pour les 2 premières lignes les valeurs sont rouges donc c'est le même bord ( cf COURS RELOU ... ; valeurs négatives)
de T+0:00 pour aller à T+0:10: je dois faire du -45°
de T+0:00 pour aller à T +0:30: (-45 + -50) / 2 ? , ben nan ... il y a une itération non listée ( T +0:20 = -50° ) donc le calcul sera donc (-45 + - 50 + -50) / 3 = -48,3°
# Pour la ligne suivante, les valeurs sont vertes donc changement de bord ( je remet pas le cf et ce qui va avec )
donc la valeur TWA de T +0:30 devient la valeur de réference comme si elle était T +0:00 et la logique de calcul est identique à l'exemple des 2 premieres lignes décrite ci dessus.
Oui MAIS cette logique de calcul est fausse ..., il faut passer par la trigonométrie si on travail avec des angles.
On m'a donné ce code : (Qui fait parfaitement le travail quand on lui rentre les valeurs à la main)
{
const
anglesMesuré = [ 276, 271, 270, 273, 274, 277 ],
converDegEnRadian = Math.PI / 180.0,
converRadianEnDeg = 180.0 / Math.PI;
let
arX = [],
arY = [],
sommeX = 0.0,
sommeY = 0.0,
moyenneX = 0.0,
moyenneY = 0.0,
angleMoyen = 0.0;
for ( const [ i, angle ] of anglesMesuré.entries() ){
arX[ i ] = Math.cos( angle * converDegEnRadian );
arY[ i ] = Math.sin( angle * converDegEnRadian );
}
for ( const value of arX ){
sommeX += value;
}
moyenneX = sommeX / arX.length;
for ( const value of arY ){
sommeY += value;
}
moyenneY = sommeY / arY.length;
angleMoyen = Math.round ( ( Math.atan2( moyenneY, moyenneX ) * converRadianEnDeg ) * 10 ) / 10;
console.log( `L'angle moyen du vent est de ${angleMoyen}°` );
}
Je souhaiterais mettre en place une fonction qui s'appellerais twam et qui aurait pour argument time ou ttw et twa ( il en faut peut être d'autres ... ) - function twam (time ou ttw, twa) {un code similaire à celui du dessus}
et la est mon soucis ( d'ou le post ) avec prise en compte des itérations manquantes ...
Je vous transmet le popup.js actuelle, tout ce qui concerne TWAm et BTWm est commenté dans le code.
Je suis preneur de toutes infos pouvant m'aider à réaliser cette fonction twam qui automatiserait de façon valide, ce coup ci, le calcul de moyenne limité au bord et qui recommencerait pour le bord suivant et ainsi de suite.
popus.js :
var background = [/download/telecharger-34056452-google-chrome chrome].extension.getBackgroundPage();
/*
var hour_actu = 0;
var hour_change = 0;
var hour_prec = 0;
var nb_step = 0;
var twam = 0;
var twa_prec = 0;
var tot_twa_prec = 0;
var tot_twa = 0;
var btwm = 0;
var btw_prec = 0;
var tot_btw_prec = 0;
var tot_btw = 0;
var twa_btw_change = 0;
*/
function createCell(value, row) {
var cell = document.createElement("td");
cell.innerHTML = value;
row.appendChild(cell);
}
function ttwStyling(value, cell) {
cell.align = "left";
cell.innerHTML = value;
}
function dtwStyling(value, cell) {
cell.align = "left";
cell.innerHTML = value;
}
function dtgStyling(value, cell) {
cell.align = "left";
cell.innerHTML = value;
}
function twsStyling(value1, value2, cell) {
var tws_foil = value1.replace(" kt", "");
var twa_bd = value2.replace("\u00B0", "");
if (tws_foil >= 11.1 && tws_foil <= 39.9 && Math.abs(twa_bd) >= 71 && Math.abs(twa_bd) <= 169) {
cell.style.backgroundColor = "black";
cell.style.color = "white";
} else {
cell.style.backgroundColor = "white";
cell.style.color = "black";
}
cell.innerHTML = tws_foil + " kt";
}
function twaStyling(value, cell) {
var twa_bd = value.replace("\u00B0", "");
if (twa_bd >= 0) {
cell.style.color = "green";
} else {
cell.style.color = "red";
}
cell.innerHTML = Math.abs(twa_bd) + "\u00B0";
}
function btwStyling(value, cell) {
cell.style.color = "blue";
cell.innerHTML = value;
}
function sailStyling(value, cell) {
switch (value.trim()) {
// Upwind sail
case "Jib":
cell.style.backgroundColor = "#FFD479";
break;
case "LJ":
cell.style.backgroundColor = "#FFFC79";
break;
case "Stay":
cell.style.backgroundColor = "#D4FB79";
break;
// Downwind sail
case "Spi":
cell.style.backgroundColor = "#76D6FF";
break;
case "LG":
cell.style.backgroundColor = "#7A81FF";
break;
case "HG":
cell.style.backgroundColor = "#D783FF";
break;
// Reaching sail
case "C0":
cell.style.backgroundColor = "#FF7E79";
break;
}
cell.innerHTML = value;
}
function twamStyling(value, cell) {
if (value >= 0) {
cell.style.color = "green";
} else {
cell.style.color = "red";
}
if (value != "-") {
cell.innerHTML = Math.abs(value) + "\u00B0";
} else {
cell.style.color = "black";
cell.innerHTML = value;
}
}
function btwmStyling(value, cell) {
cell.style.color = "blue";
if (value != "-") {
cell.innerHTML = value + "\u00B0";
} else {
cell.style.color = "black";
cell.innerHTML = value;
}
}
function createCellWithCustomStyling(value, row, customStyling) {
var cell = document.createElement("td");
customStyling(value, cell);
row.appendChild(cell);
}
function createCellWithCustomStyling2(value1, value2, row, customStyling) {
var cell = document.createElement("td");
customStyling(value1, value2, cell);
row.appendChild(cell);
}
/*
function calc_nb_ite(value) {
var delta_t = value.match(/.*?([0-9]{1,}):([0-9]{2})/);
hour_prec = hour_actu;
hour_actu = delta_t[1] * 6 + delta_t[2] / 10;
nb_step = hour_actu - hour_prec;
}
function calc_twam(value) {
ss_tot = parseFloat(value.replace("\u00B0", ""));
tot_twa = tot_twa_prec + (twa_prec * nb_step);
if (hour_actu == hour_change) {
twam = "-";
} else {
twam = tot_twa / (hour_actu - hour_change);
twam = Math.round(twam);
}
tot_twa_prec = tot_twa;
twa_btw_change = 0;
if ((twa_prec * ss_tot) <= 0) {
tot_twa_prec = 0;
twa_btw_change = 1;
}
twa_prec = ss_tot;
}
function calc_btwm(value) {
ss_tot = parseFloat(value.replace("\u00B0", ""));
// N1
if (btwm >= 270 && btw_prec <= 90) {
btw_prec = btw_prec + 360;
} else {
if (btwm <= 90 && btw_prec >= 270) {
btw_prec = btw_prec - 360;
}
}
// End N1
tot_btw = tot_btw_prec + (btw_prec * nb_step);
if (hour_actu == hour_change) {
btwm = "-";
} else {
btwm = tot_btw / (hour_actu - hour_change);
// N2
if (btwm >= 360) {
btwm = btwm - 360;
} else {
if (btwm < 0) {
btwm = btwm + 360;
}
}
// End N2
btwm = Math.round(btwm);
}
tot_btw_prec = tot_btw;
if (twa_btw_change == 1) {
tot_btw_prec = 0;
nb_step = 0;
hour_prec = hour_actu;
hour_change = hour_actu;
}
btw_prec = ss_tot;
}
*/
function reinitializeDisplay() {
document.getElementById("pointsTable").innerHTML = "";
}
function UtcToLocal(date, time, timezone) {
var utcYear = date.split("-")[0];
var utcMonth = (date.split("-")[1])-1;
var utcDay = date.split("-")[2];
var utcHour = time.split(":")[0];
var utcMinutes = time.split(":")[1];
var utcTimeZone = timezone[1];
var dateUtc = Date.UTC(utcYear, utcMonth, utcDay, utcHour, utcMinutes, 0, 0);
var localDate = new Date(dateUtc);
var year = localDate.getFullYear();
var month = ("0"+(localDate.getMonth()+1)).slice(-2);
var day = ("0"+localDate.getDate()).slice(-2);
var hours = ("0" + localDate.getHours()).slice(-2);
var minutes = ("0" + localDate.getMinutes()).slice(-2);
var offset = -localDate.getTimezoneOffset();
var absOffset = Math.abs(offset);
var sign = (offset > 0) ? "+" : "-";
var hoursOffset = Math.trunc(absOffset) / 60;
var MinutesHoursOffset = (hoursOffset === 0) ? "\u00b1" + "0" : sign + hoursOffset;
var minutesOffset = absOffset % 60;
var HoursMinutesOffset = (minutesOffset === 0) ? MinutesHoursOffset : sign + hoursOffset + ":" + minutesOffset;
var formattedDate = year + "-" + month + "-" + day;
var formattedTime = hours + ":" + minutes;
var formattedTimeZone = "UTC" + HoursMinutesOffset;
return [formattedDate,formattedTime,formattedTimeZone];
}
function getTimeZone(timezone) {
if (timezone === "CET") {
return "UTC+1";
} else if (timezone === "CEST") {
return "UTC+2";
}
}
function displayTable(localTime) {
points.forEach(function (element) {
var row = document.createElement("tr");
document.getElementById("pointsTable").appendChild(row);
if (localTime && element.timezone === "CET" | "CEST") {
var ceTZ = getTimeZone(element.timezone);
createCell(element.date, row);
createCell(element.time, row);
createCell(ceTZ, row)
} else if (localTime && element.timezone === "UTC") {
var localDTZ = UtcToLocal(element.date,element.time,element.timezone);
createCell(localDTZ[0], row);
createCell(localDTZ[1], row);
createCell(localDTZ[2], row);
} else {
createCell(element.date, row);
createCell(element.time, row);
createCell(element.timezone, row)
}
createCellWithCustomStyling(element.ttw, row, ttwStyling);
//calc_nb_ite(element.ttw);
createCellWithCustomStyling(element.dtw, row, dtwStyling);
createCellWithCustomStyling(element.dtg, row, dtgStyling);
createCell(element.twd, row);
createCellWithCustomStyling2(element.tws, element.twa, row, twsStyling);
createCellWithCustomStyling(element.twa, row, twaStyling);
//calc_twam(element.twa);
createCellWithCustomStyling(element.btw, row, btwStyling);
//calc_btwm(element.btw);
createCellWithCustomStyling(element.sail, row, sailStyling);
createCell(element.stw, row);
createCellWithCustomStyling(twam, row, twamStyling);
createCellWithCustomStyling(btwm, row, btwmStyling);
var manifest = chrome.runtime.getManifest();
document.getElementById("version").innerHTML = manifest.version;
});
}
var displayLocal = function () {
reinitializeDisplay();
if (document.getElementById("localtime").checked) {
chrome.storage.local.set({"localTime" : true});
displayTable(true);
} else {
chrome.storage.local.set({"localTime" : false});
displayTable(false);
}
};
document.getElementById("localtime").addEventListener("change", displayLocal);
chrome.storage.local.get("localTime",function (result) {
if(result.localTime === true){
document.getElementById("localtime").checked = true;
displayLocal();
} else {
document.getElementById("localtime").checked = false;
}
});
reinitializeDisplay();
var points = background.points[background.currentTab];
displayTable(false);
S'il vous faut autre chose ( popup.html ou autre fichier composant l'extension je vous les fournirais avec grand plaisir )
Merci d'avoir pris le temps de me lire et au plaisir de vous lire ;)
Dans un premier temps, créé une fonction qui renvoie sous la forme d'une liste l'ensemble des valeurs qu'il te faut. Elle sera chargée de l'extraction des données.
Pour chaque element de
var points = background.points[background.currentTab];
, il faut utiliser les fonctions suivantes :
calc_nb_ite(element.ttw);
calc_twam(element.twa);
et récupérer la valeur de la variable globale twam et la stocker dans une liste.
GeGaX
Messages postés83Date d'inscriptionmardi 20 février 2018StatutMembreDernière intervention25 décembre 2018 Modifié le 21 févr. 2018 à 20:36
Merci de ta réponse
Je sais pas si je comprends mal mais bon tu vas me le dire ...
L'extraction des valeurs de chaque instructions est faite avec un autre script nommé myscript.js ( ci dessous )
myscript.js
"use strict";
const pattern = /updi\(event,'([0-9]{4}-[0-9]{2}-[0-9]{2}) ([0-9]{2}:[0-9]{2}) ([A-Z]{3,4}).*(T[+-]{1}.*?[0-9]{1,}:[0-9]{2}).*<br>Distances:.*?([0-9]{1,}\.[0-9]{1,}nm)\/([0-9]{1,}\.[0-9]{1,}nm)<br><b>Wind:<\/b> ([0-9]*?.*) (.*? kt).*\(<b>TWA(.*?)<\/b>\)<br><b>Heading:<\/b>(.*?)<b>Sail:<\/b>(.*?)<br><b>Boat Speed:<\/b>(.*?)'/g const points = []; try { Array.prototype.slice.call(document.getElementsByTagName("img")).forEach(function (element) { var event = element.getAttribute("onmouseover"); if (event !== null) { var match = pattern.exec(event);
Oui, il faut que tu parcours tous les éléments de points et pour chaque élément tu fasses les instructions que j'ai mis dans mon message (appel aux fonctions et récupération valeur)
GeGaX
Messages postés83Date d'inscriptionmardi 20 février 2018StatutMembreDernière intervention25 décembre 2018 Modifié le 21 févr. 2018 à 22:26
je vois pas ou tu veux en venir ...
j'ai rien codé juste fais un console.log(element.ttw, element.twa, nb_step) twam je le squiz puisque la fonction actuelle n'est pas un calcul trigo et j'obtiens ceci
Ce que je comprends de mon coté c'est que les valeurs dont j'ai besoin ( twa et itérations ) sont déjà listés donc je peux m'en servir pour créer ma fonction ( avec calcul trigo ) twam.
Il faut que tu prennes le code qu'on t'a donné initialement mais que tu remplaces les valeurs de "anglesMesuré" par celles que tu as dans ton console.log en les ajoutant une à une dans un tableau vide initialement.
GeGaX
Messages postés83Date d'inscriptionmardi 20 février 2018StatutMembreDernière intervention25 décembre 2018 22 févr. 2018 à 23:28
Ok j'avais donc bien compris, je m'en occupe demain et te tiens au jus
Merci Help-Jason ;)
Modifié le 21 févr. 2018 à 20:36
Je sais pas si je comprends mal mais bon tu vas me le dire ...
L'extraction des valeurs de chaque instructions est faite avec un autre script nommé myscript.js ( ci dessous )
myscript.js
Est ce suffisant ou pas du tout, pour pouvoir traiter ?
Hésite pas à détailler au max stp, mes connaissances sont limités mais j'abandonne jamais ;)
21 févr. 2018 à 21:05
Modifié le 21 févr. 2018 à 22:26
j'ai rien codé juste fais un console.log(element.ttw, element.twa, nb_step) twam je le squiz puisque la fonction actuelle n'est pas un calcul trigo et j'obtiens ceci
http://img1.imagilive.com/0218/Capture_decran_2018-02-21_a_222548.png
Ce que je comprends de mon coté c'est que les valeurs dont j'ai besoin ( twa et itérations ) sont déjà listés donc je peux m'en servir pour créer ma fonction ( avec calcul trigo ) twam.
C'est vers là que tu veux en venir ?
22 févr. 2018 à 12:50
22 févr. 2018 à 23:28
Merci Help-Jason ;)