From cf220667b33cf7e17c84c5fce8ab6c00cc75836a Mon Sep 17 00:00:00 2001 From: Liador Date: Wed, 3 Oct 2018 11:04:29 +0200 Subject: [PATCH 1/2] add formater.js --- static/js/core/formater.js | 128 +++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 static/js/core/formater.js diff --git a/static/js/core/formater.js b/static/js/core/formater.js new file mode 100644 index 00000000..1859dcf2 --- /dev/null +++ b/static/js/core/formater.js @@ -0,0 +1,128 @@ +const shortVersionTime = 2; +const longVersionTime = 3; +const detailedVersionTime = 10; +const shortNumber = 3; +const detailedNumber = 9; +const decimalSize = 3; +const numberShortNames = [," K"," M"," G"," P"]; +const shortDate = 2; +const longDate = 5; +const dateDivisions = { name:[], value: []}; + +const fillDateDivisions = () => { + const names = ["week","day","hour","minute","second","millisecond"]; + const values = [7*24*3600*1000,24*3600*1000,3600*1000,60000,1000,1]; + for (const cpt in names) { + dateDivisions.name.push(names[cpt]); + dateDivisions.value.push(values[cpt]); + } +} +const formatNumber = () => { + const numberInput= document.getElementById("number"); + const number = numberInput.value; + const values = { short: [], long: [], detailed: []}; + let newNumber; + let decimalNumber; + let numberLength; + if (isNumber(number)){ + decimalNumber=0; + if (number.toString().includes(".")){ + newNumber=number*10; + decimalNumber++; + while (newNumber.toString().includes(".")){ + newNumber = newNumber *10; + decimalNumber ++; + } + if(decimalNumber <= decimalSize) { + numberLength = newNumber.toString().length-decimalNumber; + } + else { + newNumber=Math.round(newNumber/Math.pow(10,decimalNumber-decimalSize));//-1 pour avoir un nombre avec 1 chiffre apres la virgule et arrondir correctement + decimalNumber=decimalSize; + numberLength= newNumber.toString().length-decimalNumber; + } + } + else { + newNumber = number; + decimalNumber = 0; + numberLength = newNumber.toString().length; + } + + (numberLength>shortNumber)? ( + ((numberLength%shortNumber) === 0)? + values.short.push(Math.floor(newNumber/Math.pow(10,numberLength-shortNumber+decimalNumber)) + numberShortNames[(numberLength/3)-1]): + values.short.push(Math.round(newNumber/Math.pow(10,(numberLength+decimalNumber-shortNumber)))/Math.pow(10,shortNumber-numberLength%shortNumber)+numberShortNames[Math.floor((numberLength)/3)]) + ) : values.short.push(Math.round(newNumber/Math.pow(10,-shortNumber+numberLength+decimalNumber))/Math.pow(10,shortNumber-numberLength)); + + (numberLength>shortNumber)? ( + ((numberLength%shortNumber) === 0)? + values.short.push("test1"): + values.short.push('test2') + ) : values.short.push("test3"); + + let detailedFormat=""; + let cpt = 0; + let numberTemp = newNumber/Math.pow(10,decimalNumber); + let stringTemp = numberTemp.toString(); + if (decimalNumber!=0) + while (cpt<= decimalNumber){ + cpt++; + detailedFormat=stringTemp[stringTemp.length-cpt]+detailedFormat; + } + numberTemp=Math.floor(numberTemp); + + cpt = 0; + while (cpt { + return /^-?[\d.]+(?:e-?\d+)?$/.test(n); + }; + +const formatDate = (datetime) => { + const dateInput= document.getElementById("date"); + const date = dateInput.value; + fillDateDivisions(); + let now= new Date(); + if (Math.abs(now - datetime)>1000) { + if (datetime>now) { + return "in " +formatTime(datetime-now, shortDate); + } + else { + return formatTime(now-datetime,1)+" ago"; + } + } + else { + return "Now"; + } + } + + const formatTime = (duration, size) => { + let stringDuration = ""; + let cpt = 0; + let stringSize =0; + let currentNumberOfTimeUnit; + while( size>stringSize) { + currentNumberOfTimeUnit =Math.floor(duration/dateDivisions.value[cpt]); + stringDuration = stringDuration+ + ((currentNumberOfTimeUnit>0)? + (currentNumberOfTimeUnit)+" "+dateDivisions.name[cpt]+ + ((currentNumberOfTimeUnit>1)?"s " + :" ") + :"") + ; + (Math.floor(currentNumberOfTimeUnit)>0||stringSize>0)?stringSize++:cpt=cpt; + duration=duration-(currentNumberOfTimeUnit)*dateDivisions.value[cpt]; + cpt++; + } + return stringDuration; + } From 331745e4aafa4c6cbb0cb63490dd5f50f613f438 Mon Sep 17 00:00:00 2001 From: Liador Date: Wed, 3 Oct 2018 12:25:25 +0200 Subject: [PATCH 2/2] implemented Formater in production --- static/js/core/formater.js | 15 +++------------ static/js/production.js | 7 ++++--- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/static/js/core/formater.js b/static/js/core/formater.js index 1859dcf2..3409d32d 100644 --- a/static/js/core/formater.js +++ b/static/js/core/formater.js @@ -17,9 +17,7 @@ const fillDateDivisions = () => { dateDivisions.value.push(values[cpt]); } } -const formatNumber = () => { - const numberInput= document.getElementById("number"); - const number = numberInput.value; +export const formatNumber = (number) => { const values = { short: [], long: [], detailed: []}; let newNumber; let decimalNumber; @@ -54,12 +52,6 @@ const formatNumber = () => { values.short.push(Math.round(newNumber/Math.pow(10,(numberLength+decimalNumber-shortNumber)))/Math.pow(10,shortNumber-numberLength%shortNumber)+numberShortNames[Math.floor((numberLength)/3)]) ) : values.short.push(Math.round(newNumber/Math.pow(10,-shortNumber+numberLength+decimalNumber))/Math.pow(10,shortNumber-numberLength)); - (numberLength>shortNumber)? ( - ((numberLength%shortNumber) === 0)? - values.short.push("test1"): - values.short.push('test2') - ) : values.short.push("test3"); - let detailedFormat=""; let cpt = 0; let numberTemp = newNumber/Math.pow(10,decimalNumber); @@ -79,16 +71,15 @@ const formatNumber = () => { cpt=cpt+3; } values.detailed.push(detailedFormat); - console.log("newNumber: "+newNumber + " values.short: "+values.short+" detailed format: "+values.detailed); - } + return values; }; const isNumber = (n) => { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); }; -const formatDate = (datetime) => { +export const formatDate = (datetime) => { const dateInput= document.getElementById("date"); const date = dateInput.value; fillDateDivisions(); diff --git a/static/js/production.js b/static/js/production.js index 32df3aa8..cc8b9a89 100644 --- a/static/js/production.js +++ b/static/js/production.js @@ -1,6 +1,7 @@ import Dictionnary from './core/dictionnary.js'; import App from './core/app.js'; import resourcesData from './resources/resources.js'; +import {formatNumber, formatDate} from './core/formater.js'; /** PRODUCTION **/ export const getDensityVisualization = (density, picto) => Array((Math.ceil(density / 20) + 1)).join(picto); @@ -30,9 +31,9 @@ const displayStorage = (planet, resource, displayLocation) => { ${(typeof planet.storage !== 'undefined' && planet.storage !== null) ? `
-
${planet.storage.resources[resourceKey]} +
${formatNumber(planet.storage.resources[resourceKey]).short}
- / ${planet.storage.capacity} + / ${formatNumber(planet.storage.capacity).short[0]}
@@ -41,7 +42,7 @@ const displayStorage = (planet, resource, displayLocation) => {
${(planet.storage.capacity - planet.storage.resources[resourceKey])===0? - "Full" : "-" + Math.floor((planet.storage.capacity - planet.storage.resources[resourceKey]) /(resource.density*10)) +"h"+ (60- now.getMinutes())+"min"} + "Full" : "-" + formatTime(new Date(now.getYear(), now.getMonth(),now.getDate(), now.getHours()+1+Math.floor((planet.storage.capacity - planet.storage.resources[resourceKey]) /(resource.density*10))))}
+${resource.density*10}/h