diff --git a/scraping.go b/scraping.go index e33aff9..2542a4f 100644 --- a/scraping.go +++ b/scraping.go @@ -75,6 +75,10 @@ func getFilterResult(filter *Filter) { case filter.Type == "math": { switch { + case filter.Var1 == "sum": + { + getFilterResultSum(filter) + } case filter.Var1 == "min": { getFilterResultMin(filter) @@ -91,6 +95,10 @@ func getFilterResult(filter *Filter) { { getFilterResultCount(filter) } + case filter.Var1 == "round": + { + getFilterResultRound(filter) + } } } @@ -277,6 +285,18 @@ func getFilterResultSubstring(filter *Filter) { } } +func getFilterResultSum(filter *Filter) { + var sum float64 = 0.0 + for _, parent := range filter.Parents { + for _, result := range parent.Results { + if number, err := strconv.ParseFloat(result, 64); err == nil { + sum += number + } + } + } + filter.Results = append(filter.Results, fmt.Sprintf("%f", sum)) +} + func getFilterResultMin(filter *Filter) { var min = math.MaxFloat64 var setMin = false @@ -334,6 +354,35 @@ func getFilterResultCount(filter *Filter) { for _, parent := range filter.Parents { count += len(parent.Children) } - log.Println(fmt.Sprintf("%d", count)) filter.Results = append(filter.Results, fmt.Sprintf("%d", count)) } + +// https://gosamples.dev/round-float/ +func roundFloat(val float64, precision uint) float64 { + if precision == 0 { + math.Round(val) + } + ratio := math.Pow(10, float64(precision)) + return math.Round(val*ratio) / ratio +} + +func getFilterResultRound(filter *Filter) { + var decimals int64 = 0 + if filter.Var2 != nil { + d, err := strconv.ParseInt(*filter.Var2, 10, 32) + if err != nil { + decimals = 0 + } else { + decimals = d + } + } + + for _, parent := range filter.Parents { + for _, result := range parent.Results { + if number, err := strconv.ParseFloat(result, 64); err == nil { + rounded := roundFloat(number, uint(decimals)) + filter.Results = append(filter.Results, fmt.Sprintf("%.f", rounded)) + } + } + } +} diff --git a/static/edit.js b/static/edit.js index a1831cd..0d322e9 100644 --- a/static/edit.js +++ b/static/edit.js @@ -282,6 +282,10 @@ function onTypeChange(node) { mathSelect.name = "var1"; mathSelect.id = "var1Input"; mathSelect.classList.add("form-control"); + var mathOptionSum = document.createElement("option"); + mathOptionSum.value = "sum"; + mathOptionSum.innerHTML = "Sum"; + mathSelect.appendChild(mathOptionSum); var mathOptionMin = document.createElement("option"); mathOptionMin.value = "min"; mathOptionMin.innerHTML = "Min"; @@ -298,17 +302,33 @@ function onTypeChange(node) { mathOptionCount.value = "count"; mathOptionCount.innerHTML = "Count"; mathSelect.appendChild(mathOptionCount); + var mathOptionRound = document.createElement("option"); + mathOptionRound.value = "round"; + mathOptionRound.innerHTML = "Round"; + mathSelect.appendChild(mathOptionRound); var1Label.innerHTML = "Function"; var1Div.appendChild(mathSelect); - mathSelect.value = var1Value; + if (var1Value == "") { + mathSelect.value = "min"; + } + else { + mathSelect.value = var1Value; + } + mathSelect.onchange = function () { onMathChange(node); }; var var2Input = document.createElement("input"); var2Input.name = "var2"; var2Input.id = "var2Input"; var2Input.value = var2Value; var2Input.classList.add("form-control"); - var2Input.disabled = true; - var2Input.placeholder = ""; - var2Label.innerHTML = "-"; + if (mathSelect.value == "round") { + var2Input.disabled = false; + var2Label.innerHTML = "Decimals"; + } + else { + var2Input.placeholder = ""; + var2Input.disabled = true; + var2Label.innerHTML = "-"; + } var2Div.appendChild(var2Input); var var3Input = document.createElement("input"); var3Input.name = "var3"; @@ -323,7 +343,37 @@ function onTypeChange(node) { } } } +function onMathChange(node) { + if (node === void 0) { node = null; } + var var1Input = document.getElementById("var1Input"); + var var1Label = document.getElementById("var1Label"); + var var2Input = document.getElementById("var2Input"); + var var2Label = document.getElementById("var2Label"); + var var3Input = document.getElementById("var3Input"); + var var3Label = document.getElementById("var3Label"); + var var2Value = ""; + var var3Value = ""; + if (node != null) { + // @ts-ignore + var2Value = node.meta.var2; + // @ts-ignore + var3Value = node.meta.var3; + } + if (var1Input.value == "round") { + var2Input.disabled = false; + var2Input.type = "number"; + var2Input.value = var2Value; + var2Label.innerHTML = "Decimals"; + } + else { + var2Input.disabled = true; + var2Input.type = "text"; + var2Input.value = ""; + var2Label.innerHTML = "-"; + } +} function onSubmitNewFilter() { + console.log("TEST"); var nameInput = document.getElementById("nameInput"); var name = nameInput.value; var selectType = document.getElementById("typeInput"); diff --git a/static/edit.ts b/static/edit.ts index 2bd12db..dc188fc 100644 --- a/static/edit.ts +++ b/static/edit.ts @@ -271,6 +271,10 @@ function onTypeChange(node: DiagramNode | null = null){ mathSelect.name = "var1"; mathSelect.id = "var1Input"; mathSelect.classList.add("form-control"); + let mathOptionSum = document.createElement("option"); + mathOptionSum.value = "sum" + mathOptionSum.innerHTML = "Sum"; + mathSelect.appendChild(mathOptionSum); let mathOptionMin = document.createElement("option"); mathOptionMin.value = "min" mathOptionMin.innerHTML = "Min"; @@ -287,18 +291,32 @@ function onTypeChange(node: DiagramNode | null = null){ mathOptionCount.value = "count"; mathOptionCount.innerHTML = "Count"; mathSelect.appendChild(mathOptionCount); + let mathOptionRound = document.createElement("option") + mathOptionRound.value = "round"; + mathOptionRound.innerHTML = "Round"; + mathSelect.appendChild(mathOptionRound); var1Label.innerHTML = "Function"; var1Div.appendChild(mathSelect); - mathSelect.value = var1Value; + if (var1Value == ""){ + mathSelect.value = "min"; + } else { + mathSelect.value = var1Value; + } + mathSelect.onchange = function() {onMathChange(node)} let var2Input = document.createElement("input"); var2Input.name = "var2"; var2Input.id = "var2Input"; var2Input.value = var2Value; var2Input.classList.add("form-control") - var2Input.disabled = true; - var2Input.placeholder = "" - var2Label.innerHTML = "-"; + if (mathSelect.value == "round"){ + var2Input.disabled = false; + var2Label.innerHTML = "Decimals"; + } else { + var2Input.placeholder = "" + var2Input.disabled = true; + var2Label.innerHTML = "-"; + } var2Div.appendChild(var2Input); let var3Input = document.createElement("input"); @@ -315,7 +333,39 @@ function onTypeChange(node: DiagramNode | null = null){ } } +function onMathChange(node: DiagramNode | null = null){ + let var1Input = document.getElementById("var1Input") as HTMLSelectElement; + let var1Label = document.getElementById("var1Label") as HTMLLabelElement; + let var2Input = document.getElementById("var2Input") as HTMLInputElement; + let var2Label = document.getElementById("var2Label") as HTMLLabelElement; + let var3Input = document.getElementById("var3Input") as HTMLInputElement; + let var3Label = document.getElementById("var3Label") as HTMLLabelElement; + + let var2Value = ""; + let var3Value = ""; + if (node != null){ + // @ts-ignore + var2Value = node.meta.var2; + // @ts-ignore + var3Value = node.meta.var3; + } + + if (var1Input.value == "round"){ + var2Input.disabled = false; + var2Input.type = "number"; + var2Input.value = var2Value; + var2Label.innerHTML = "Decimals"; + } else { + var2Input.disabled = true; + var2Input.type = "text"; + var2Input.value = ""; + var2Label.innerHTML = "-"; + + } +} + function onSubmitNewFilter(){ + console.log("TEST") let nameInput = document.getElementById("nameInput") as HTMLInputElement; let name = nameInput.value; let selectType = document.getElementById("typeInput") as HTMLSelectElement;