-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
1 lines (1 loc) · 10.2 KB
/
main.js
1
var elementiDaOsservare=document.querySelectorAll(".osservato");elementiDaOsservare.forEach((e=>{e.classList.remove("mostrato")})),setTimeout((()=>{var e=new IntersectionObserver((function(e){e.forEach((e=>{var t=e.target.getBoundingClientRect();e.isIntersecting||t.bottom<0?e.target.classList.add("mostrato"):t.top>0&&e.target.classList.remove("mostrato")}))}),{threshold:.05});elementiDaOsservare.forEach((t=>{e.observe(t)}))}),300);const risultato=document.getElementById("risultato"),messaggiRisultato={risultatoDefault:"Il risultato verrà mostrato qui...",valoreNonValido:"Il valore inserito non è valido...",valoreIncompleto:"Il valore inserito è incompleto...",valoriIncompleti:"Un valore inserito è incompleto..."},controlli={2:/^[01.+-]+(\.[01]+)?$/,numeriBinariConSegno:/^[01+-]+$/,numeriBinari:/^[01]+$/,8:/^[0-7.+-]+(\.[0-7]+)?$/,10:/^[0-9.+-]+(\.[0-9]+)?$/,16:/^[0-9A-Fa-f.+-]+(\.[0-9A-Fa-f]+)?$/};let selettoreAperto=null,rotazioneIconaSwitchSelettori=0;document.querySelectorAll(".selettore").forEach((e=>{const t=e.querySelector(".spazioSelezionatoSelettore"),o=e.querySelector(".elementoSelezionato"),i=e.querySelector(".iconaMenuSelezione"),a=e.querySelector(".elementiSelettore"),r=e.querySelectorAll(".elementiSelettore li");t.addEventListener("click",(e=>{selettoreAperto!==a?(chiudiTuttiISelettori(),apriSelettore(a,i)):chiudiTuttiISelettori(),e.stopPropagation()})),r.forEach((t=>t.addEventListener("click",(t=>i=>{(e.classList.contains("selettore-conversione")?verificaSeUguali(e.id,t.innerText,"selettorePrimaBase","selettoreSecondaBase","elementoDaConvertire"):!e.classList.contains("selettore-rappresentazione")||verificaSeUguali(e.id,t.innerText,"selettorePrimaRappresentazione","selettoreSecondaRappresentazione","elementoDaRappresentare"))&&(aggiornaSelettore(t,o,r),e.classList.contains("selettore-conversione")?scegliConversione():e.classList.contains("selettore-rappresentazione")?rappresenta():(sincronizzaSelettoriOperandi(t.innerText),opera())),chiudiTuttiISelettori(),selettoreAperto=null,i.stopPropagation()})(t)))),a.addEventListener("click",(e=>{e.stopPropagation()}))}));const apriSelettore=(e,t)=>{e.classList.add("selettoreAperto"),t.classList.add("selettoreAperto"),selettoreAperto=e},aggiornaSelettore=(e,t,o)=>{t.innerText=e.innerText,selezionaOpzione(e,o)};function verificaSeUguali(e,t,o,i,a){const r=document.getElementById(o),n=document.getElementById(i),l=e===r.id&&t===n.innerText||e===n.id&&t===r.innerText;return l&&switchaSelettori(o,i,a),!l}function sincronizzaSelettoriOperandi(e){["#selettoreOperazionePiccolo","#selettoreOperazioneGrande"].forEach((t=>{document.querySelector(`${t} .elementoSelezionato`).innerHTML=e,aggiornaClassiOpzioni(t.slice(1),e)}))}const chiudiTuttiISelettori=()=>{document.querySelectorAll(".selettoreAperto").forEach((e=>{e.classList.remove("selettoreAperto")})),selettoreAperto=null},selezionaOpzione=(e,t)=>{t.forEach((e=>e.classList.remove("selezionatoDaSelettore"))),e.classList.add("selezionatoDaSelettore")};function switchaSelettori(e,t,o){const i=document.getElementById(e).querySelector(".elementoSelezionato"),a=document.getElementById(t).querySelector(".elementoSelezionato"),r=document.getElementById(o),n=document.querySelector(".iconaBottoneSwitchaSelettori"),[l,s,c,u]=[i.innerText,a.innerText,r.value,risultato.innerHTML],g=[messaggiRisultato.risultatoDefault,messaggiRisultato.valoreIncompleto,messaggiRisultato.valoreNonValido];(/^(?!.*[+-]{2})(?!.*\..*\.)[0-9A-Fa-f]*([+-]?[0-9A-Fa-f]*(\.[0-9A-Fa-f]*)?)?$/.test(u)||g.includes(u))&&([i.innerText,a.innerText]=[s,l],aggiornaClassiOpzioni(e,s),aggiornaClassiOpzioni(t,l),rotazioneIconaSwitchSelettori+=180,n.style.transform=`rotate(${rotazioneIconaSwitchSelettori}deg)`,g.includes(u)||(r.value=u,risultato.innerText=c))}const aggiornaClassiOpzioni=(e,t)=>{document.querySelectorAll(`#${e} .elementiSelettore li`).forEach((e=>{e.classList.toggle("selezionatoDaSelettore",e.textContent===t)}))};function scegliConversione(){const e=document.querySelector("#selettorePrimaBase .elementoSelezionato").innerText,t=document.querySelector("#selettoreSecondaBase .elementoSelezionato").innerText,o=document.getElementById("elementoDaConvertire").value;let i,a;const r={Binario:2,Ottale:8,Decimale:10,Hex:16};i=r[e],a=r[t],risultato.innerHTML=converti(i,a,o)}function converti(e,t,o){if(1!==o.length||"+"!=o&&"-"!=o){const i=controlli[e];if(""===o)return risultato.innerHTML=messaggiRisultato.risultatoDefault,risultato.classList.remove("risultatoCalcolato"),messaggiRisultato.risultatoDefault;if(i.test(o)){let i;return o.includes(".")?o.indexOf(".")+1==o.length?(risultato.innerHTML=messaggiRisultato.valoreIncompleto,risultato.classList.remove("risultatoCalcolato"),messaggiRisultato.valoreIncompleto):(i=convertiDecimaleConVirgola(o,e,t),risultato.innerHTML=i.toUpperCase(),risultato.classList.add("risultatoCalcolato"),i.toUpperCase()):(i=parseInt(o,e).toString(t),risultato.innerHTML=i.toUpperCase(),risultato.classList.add("risultatoCalcolato"),i.toUpperCase())}return risultato.innerHTML=messaggiRisultato.valoreNonValido,risultato.classList.remove("risultatoCalcolato"),messaggiRisultato.valoreNonValido}return risultato.innerHTML=messaggiRisultato.risultatoDefault,risultato.classList.remove("risultatoCalcolato"),messaggiRisultato.risultatoDefault}function convertiDecimaleConVirgola(e,t,o){const[i,a]=e.split(".");let r=parseInt(i,t).toString(o),n="";if(a){let e=0;for(let o=0;o<a.length;o++)e+=parseInt(a[o],t)/Math.pow(t,o+1);for(let t=0;e>0&&t<10;t++){e*=o;const t=Math.floor(e);n+=t.toString(o),e-=t}}return r+(n?"."+n:"")}function rappresenta(){const e=document.querySelector("#selettorePrimaRappresentazione .elementoSelezionato").innerText,t=document.querySelector("#selettoreSecondaRappresentazione .elementoSelezionato").innerText,o=document.getElementById("elementoDaRappresentare").value;let i;if(i="Binario"!==e||"C1"!=t&&"C2"!=t?"Binario"!==e||"FP32"!=t&&"FP64"!=t?controlli.numeriBinari:controlli[2]:controlli.numeriBinariConSegno,"Binario"!==e||1!==o.length||"+"!=o&&"-"!=o)if("Binario"===e&&o.includes(".")&&o.indexOf(".")+1==o.length&&"C1"!=t&&"C2"!=t)risultato.innerHTML=messaggiRisultato.valoreIncompleto,risultato.classList.remove("risultatoCalcolato");else if("C1"!==e&&"C2"!==e||1!==o.length)if("FP32"===e&&32!=o.length)""===o?(risultato.innerHTML=messaggiRisultato.risultatoDefault,risultato.classList.remove("risultatoCalcolato")):o.length<32&&i.test(o)?(risultato.innerHTML=messaggiRisultato.valoreIncompleto,risultato.classList.remove("risultatoCalcolato")):(risultato.innerHTML=messaggiRisultato.valoreNonValido,risultato.classList.remove("risultatoCalcolato"));else if("FP64"===e&&64!=o.length)""===o?(risultato.innerHTML=messaggiRisultato.risultatoDefault,risultato.classList.remove("risultatoCalcolato")):o.length<64&&i.test(o)?(risultato.innerHTML=messaggiRisultato.valoreIncompleto,risultato.classList.remove("risultatoCalcolato")):(risultato.innerHTML=messaggiRisultato.valoreNonValido,risultato.classList.remove("risultatoCalcolato"));else if(""===o)risultato.innerHTML=messaggiRisultato.risultatoDefault,risultato.classList.remove("risultatoCalcolato");else if(i.test(o)){let i=convertiRappresentazione(e,t,o);risultato.innerText=i,risultato.classList.add("risultatoCalcolato")}else risultato.innerHTML=messaggiRisultato.valoreNonValido,risultato.classList.remove("risultatoCalcolato");else i.test(o)?(risultato.innerHTML=messaggiRisultato.risultatoDefault,risultato.classList.remove("risultatoCalcolato")):(risultato.innerHTML=messaggiRisultato.valoreNonValido,risultato.classList.remove("risultatoCalcolato"));else risultato.innerHTML=messaggiRisultato.risultatoDefault,risultato.classList.remove("risultatoCalcolato")}function convertiRappresentazione(e,t,o){let i,a=o;switch(e){case"C1":a=C1_Binario(o);break;case"C2":a=C2_Binario(o);break;case"FP32":a=FP32_Binario(o);break;case"FP64":a=FP64_Binario(o)}switch(t){case"Binario":i=a;break;case"C1":i=Binario_C1(a);break;case"C2":i=Binario_C2(a);break;case"FP32":i=Binario_FP32(a);break;case"FP64":i=Binario_FP64(a)}return i}function C1_Binario(e){const t="1"===e.charAt(0)?"-":"";let o=e.slice(1);return"-"===t&&(o=[...o].map((e=>"0"===e?"1":"0")).join("").replace(/^([+-]?)(0+)(\d)/,"$1$3")),`${t}${o}`}function C2_Binario(e){let t=e;return"1"===e.charAt(0)&&(t=(parseInt(e,2)-1).toString(2).padStart(e.length,"0"),t.length<=e.length&&"1"!=t.charAt(0)&&(t=`1${t}`)),C1_Binario(t)}function FP32_Binario(e){const t=parseInt(e,2),o=new ArrayBuffer(4);new Uint32Array(o)[0]=t;const i=new Float32Array(o);return parseFloat(converti(10,2,i[0].toString())).toString()}function FP64_Binario(e){const t=BigInt("0b"+e),o=new ArrayBuffer(8);new BigUint64Array(o)[0]=t;const i=new Float64Array(o);return parseFloat(converti(10,2,i[0].toString())).toString()}function Binario_C1(e){const t=e.charAt(0),o="-"===t?"1":"0";return"-"!==t&&"+"!=t||(e=e.slice(1)),"1"===o&&(e=[...e].map((e=>"0"===e?"1":"0")).join("")),`${o}${e}`}function Binario_C2(e){const t=e.charAt(0),o="-"===t?"1":"0";"-"!==t&&"+"!=t||(e=e.slice(1));let i=e;if("1"===o){const t=Binario_C1((-e).toString());i=(parseInt(t,2)+1).toString(2).padStart(t.length,"0").slice(1)}return`${o}${i}`}function Binario_FP32(e){const t=converti(2,10,e.toString()),o=new Float32Array(1);o[0]=t;return new Uint32Array(o.buffer)[0].toString(2).padStart(32,"0")}function Binario_FP64(e){const t=converti(2,10,e.toString()),o=new Float64Array(1);o[0]=t;return new BigUint64Array(o.buffer)[0].toString(2).padStart(64,"0")}function opera(){const e=document.getElementById("primoOperando").value,t=document.getElementById("secondoOperando").value,o=document.querySelector(".selettore-operazione .elementoSelezionato").innerText,i=converti(2,10,e.toString()),a=converti(2,10,t.toString());let r;if(i===messaggiRisultato.risultatoDefault||a===messaggiRisultato.risultatoDefault)r=messaggiRisultato.risultatoDefault,risultato.classList.remove("risultatoCalcolato");else if(i===messaggiRisultato.valoreIncompleto||a===messaggiRisultato.valoreIncompleto)r=messaggiRisultato.valoriIncompleti,risultato.classList.remove("risultatoCalcolato");else{let e={ADD:(e,t)=>e+t,SUB:(e,t)=>e-t,MUL:(e,t)=>e*t,DIV:(e,t)=>e/t}[o](parseFloat(i),parseFloat(a));r=parseFloat(converti(10,2,e.toString()).toString())}risultato.innerHTML=r}function apriUrl(e){window.open(e,"_self")}document.addEventListener("click",chiudiTuttiISelettori);