ee67bedc31
Implementato il calcolo del valore reale dei prodotti in asta, includendo il prezzo "Compra Subito", spese di spedizione e risparmio stimato. Aggiunta una nuova sezione "Info Prodotto" nella UI per visualizzare i dettagli estratti e i calcoli. - **AuctionMonitorControl.xaml**: Aggiunta sezione fissa per mostrare informazioni prodotto e calcolo valore. - **AuctionMonitorControl.xaml.cs**: Gestiti eventi per il caricamento e aggiornamento delle informazioni prodotto. - **MainWindow**: Integrati handler per il calcolo e refresh delle informazioni prodotto. - **AuctionInfo.cs**: Aggiunte proprietà per gestire prezzo "Compra Subito", spese di spedizione e limiti di vincita. - **ProductValueCalculator.cs**: Nuova utility per calcolare il valore del prodotto e parsare informazioni dall'HTML. - **AuctionViewModel.cs**: Binding per visualizzare risparmio, costo totale e convenienza nella UI. - **Documentazione**: Aggiornata con dettagli sull'algoritmo di calcolo e layout UI. Fix: - Risolto problema di encoding UTF-8 per emoji nella UI. - Migliorato parsing HTML per prezzi e limiti di vincita. TODO: - Testare parsing su più aste e gestire edge cases. - Implementare caricamento automatico delle informazioni.
91 lines
3.0 KiB
Plaintext
91 lines
3.0 KiB
Plaintext
/*
|
|
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
|
* Click nbfs://nbhost/SystemFileSystem/Templates/Other/javascript.js to edit this template
|
|
*/
|
|
/*
|
|
* element: identificativo che intendiamo trattare. es. saldo puntate
|
|
* Target: div dove sarà visualizzato l'element
|
|
* Value: valore dell'element ottenuto dal server al caricamento della pagina
|
|
* archive: archiviazione che si intende dare agli elementi. es. sessionStorage
|
|
*/
|
|
window.manageBackBrowser = (function () {
|
|
|
|
let _element = null;
|
|
let _target = null;
|
|
let _currentUrl = window.location.href;
|
|
let _value = null;
|
|
|
|
function init (element, target, value, isLogged){
|
|
_element = element;
|
|
_target = target;
|
|
_value = parseInt(value);
|
|
|
|
//controllo errori per essere sicuro che tutto proceda bene
|
|
if(!isError(_element, _target, _value, isLogged)){
|
|
manage();
|
|
}
|
|
|
|
}
|
|
function isError(element, target, value, isLogged){
|
|
let error = false;
|
|
|
|
if(isLogged === true && document.getElementById('NickLoggato') === null){
|
|
console.error('utente non loggato');
|
|
error = true;
|
|
}
|
|
if(!Number.isInteger(value)){
|
|
console.error('value non è un intero');
|
|
error = true;
|
|
}
|
|
|
|
if(element.indexOf(' ') >= 0){
|
|
console.error('element non può contenere spazi');
|
|
error = true;
|
|
}
|
|
|
|
if(document.querySelectorAll(target) === null){
|
|
console.error('target passato non corrisponde ad alcun un elemento nel dom');
|
|
error = true;
|
|
}
|
|
return error;
|
|
}
|
|
function manage(){
|
|
if(sessionStorage.getItem('prelastUrl'+_element) == _currentUrl ){
|
|
// uso il valore dal sessionStorage
|
|
let elementStorage = parseInt(sessionStorage.getItem(_element));
|
|
|
|
if(Number.isInteger(elementStorage)){
|
|
//TODO controllare che sia un solo elemento, altrimenti metterlo in un ciclo
|
|
|
|
let elements = document.querySelectorAll(_target);
|
|
for (let i=0; i < elements.length; i++){
|
|
elements[i].innerText = elementStorage;
|
|
}
|
|
clearData();
|
|
}
|
|
}else{
|
|
// setto il saldo delle puntate a livello di sessionStorage
|
|
sessionStorage.setItem(_element, parseInt(_value));
|
|
}
|
|
|
|
updateQueue();
|
|
}
|
|
function updateQueue(){
|
|
let lastUrl = sessionStorage.getItem('lastUrl'+_element);
|
|
sessionStorage.setItem('prelastUrl'+_element, lastUrl);
|
|
sessionStorage.setItem('lastUrl'+_element, _currentUrl);
|
|
}
|
|
function clearData(){
|
|
sessionStorage.setItem('prelastUrl'+_element, null);
|
|
sessionStorage.setItem('lastUrl'+_element, null);
|
|
sessionStorage.setItem(_element, null);
|
|
}
|
|
|
|
return {
|
|
init: init
|
|
};
|
|
|
|
})();
|
|
|
|
|