let operators=['+','-','/','*','.'];let operation="";let operations=[];function calculate(){try{let result=eval(operation);operations.unshift({calcul:operation,result,date:new Date().getTime()});operation=result.toString();localStorage.setItem("operations",JSON.stringify(operations));display();insertHistory()}catch(e){$(".display-container").addClass("error")}} function setFontSize($display){let length=operation.length;let clearsButtons=$(".clears-buttons-container");if(length>0){clearsButtons.addClass("show")}else{clearsButtons.removeClass("show")} if(length<=10){$display.removeClass("big");$display.removeClass("medium");$display.removeClass("small")}else if(length<=12){$display.addClass("big");$display.removeClass("medium");$display.removeClass("small")}else if(length<=14){$display.addClass("medium");$display.removeClass("big");$display.removeClass("small")}else if(length<=16){$display.addClass("small");$display.removeClass("big");$display.removeClass("medium")}} function roundDate(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0);return date} function diff2Dates(date1,date2){let one_day=1000*60*60*24;let date1_ms=date1.getTime();let date2_ms=date2.getTime();let difference_ms=date2_ms-date1_ms;return Math.round(difference_ms/one_day)} function insertHistory(){let $html=$("
");let now=roundDate(new Date());let historyContainer=$(".history-container");if(operations.length>0){for(let operation of operations){let date=roundDate(new Date(operation.date));if($html.find(`.day-container[data-day="${ date.toDateString() }"]`).length>0){$html.find(`.day-container[data-day="${ date.toDateString() }"] .title`).after(`
${ operation.calcul }
${ operation.result }
`)}else{let daysAgo="";let diff=diff2Dates(date,now);if(diff===0){daysAgo="Today"}else if(diff===1){daysAgo="Yesterday"}else{daysAgo=diff+" days ago"} $html.prepend(`
${ daysAgo }
${ operation.calcul }
${ operation.result }
`)}} historyContainer.html($html.html());historyContainer.animate({scrollTop:historyContainer[0].scrollHeight},300)}else{historyContainer.empty()}} function supp(){if(operation.length>0){let $display=$(".display");operation=operation.slice(0,-1);$display.text(operation);$display.scrollLeft(1000);setFontSize($display);$(".display-container").removeClass("error")}} function ac(){if(operation.length>0){let $display=$(".display");operation="";$display.text(operation);$display.scrollLeft(1000);setFontSize($display)} $(".display-container").removeClass("error")} function display(){let $display=$(".display");$display.text(operation);$display.scrollLeft(1000);setFontSize($display);$(".display-container").removeClass("error")} function swipedetect(el,callback){let touchsurface=el,swipedir,startX,startY,distX,distY,threshold=150,restraint=100,allowedTime=300,elapsedTime,startTime,handleswipe=callback||function(swipedir){};touchsurface.addEventListener('touchstart',function(e){var touchobj=e.changedTouches[0];swipedir='none';dist=0;startX=touchobj.pageX;startY=touchobj.pageY;startTime=new Date().getTime()},!1);touchsurface.addEventListener('touchmove',function(e){},!1);touchsurface.addEventListener('touchend',function(e){var touchobj=e.changedTouches[0];distX=touchobj.pageX-startX;distY=touchobj.pageY-startY;elapsedTime=new Date().getTime()-startTime;if(elapsedTime<=allowedTime){if(Math.abs(distX)>=threshold&&Math.abs(distY)<=restraint){swipedir=(distX<0)?'left':'right'} else if(Math.abs(distY)>=threshold&&Math.abs(distX)<=restraint){swipedir=(distY<0)?'up':'down'}} handleswipe(swipedir)},!1)} $(window).on("load",function(){if(localStorage.getItem("operations")){operations=JSON.parse(localStorage.getItem("operations"));insertHistory()} $(document).on("click","#ac",ac);$(document).on("click","#sup",supp);$(document).on("click",".button-input",function(){let $elem=$(this);let input=$elem.find("span").html();if(input==="="){calculate()}else{operation+=$elem.find("span").html();display()}});$(document).on("click",".expand-buttons",()=>$(".container").toggleClass("history"));$(document).on("click","#delete-history",function(){operations=[];localStorage.setItem("operations",JSON.stringify(operations));insertHistory()});$(window).on("keypress",function(e){e.preventDefault();let char=e.charCode;console.log(char,String.fromCharCode(char));if(char===13){calculate()}else if(operators.indexOf(String.fromCharCode(char))>=0){operation+=String.fromCharCode(char)}else if(char>=48&&char<=57){operation+=String.fromCharCode(char)}else if(char===115||char===83){supp()}else if(char===97||char===65){ac()} display()});swipedetect(document.getElementsByClassName("display-container")[0],function(dir){if(dir==="down"){$(".container").addClass("history")}});let historyContainer=document.getElementsByClassName("history-container");swipedetect(historyContainer[0],function(dir){if(dir==="up"&&((historyContainer[0].scrollTop+historyContainer[0].offsetHeight)===historyContainer[0].scrollHeight)){$(".container").removeClass("history")}})})