mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-09-22 00:20:47 +02:00
🎨 Add Rollup column to database table view https://github.com/siyuan-note/siyuan/issues/9958
This commit is contained in:
parent
d9a0d89668
commit
5c8bab48ed
1 changed files with 33 additions and 31 deletions
|
@ -531,9 +531,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
|
|||
case CalcOperatorSum:
|
||||
sum := 0.0
|
||||
for _, v := range r.Contents {
|
||||
if "" != v.String() {
|
||||
n, _ := strconv.ParseFloat(v.String(), 64)
|
||||
sum += n
|
||||
if nil != v.Number {
|
||||
sum += v.Number.Content
|
||||
}
|
||||
}
|
||||
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(sum)}}
|
||||
|
@ -541,9 +540,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
|
|||
sum := 0.0
|
||||
count := 0
|
||||
for _, v := range r.Contents {
|
||||
if "" != v.String() {
|
||||
n, _ := strconv.ParseFloat(v.String(), 64)
|
||||
sum += n
|
||||
if nil != v.Number {
|
||||
sum += v.Number.Content
|
||||
count++
|
||||
}
|
||||
}
|
||||
|
@ -553,9 +551,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
|
|||
case CalcOperatorMedian:
|
||||
var numbers []float64
|
||||
for _, v := range r.Contents {
|
||||
if "" != v.String() {
|
||||
n, _ := strconv.ParseFloat(v.String(), 64)
|
||||
numbers = append(numbers, n)
|
||||
if nil != v.Number {
|
||||
numbers = append(numbers, v.Number.Content)
|
||||
}
|
||||
}
|
||||
sort.Float64s(numbers)
|
||||
|
@ -565,10 +562,9 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
|
|||
case CalcOperatorMin:
|
||||
min := math.MaxFloat64
|
||||
for _, v := range r.Contents {
|
||||
if "" != v.String() {
|
||||
n, _ := strconv.ParseFloat(v.String(), 64)
|
||||
if n < min {
|
||||
min = n
|
||||
if nil != v.Number {
|
||||
if v.Number.Content < min {
|
||||
min = v.Number.Content
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -576,10 +572,9 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
|
|||
case CalcOperatorMax:
|
||||
max := -math.MaxFloat64
|
||||
for _, v := range r.Contents {
|
||||
if "" != v.String() {
|
||||
n, _ := strconv.ParseFloat(v.String(), 64)
|
||||
if n > max {
|
||||
max = n
|
||||
if nil != v.Number {
|
||||
if v.Number.Content > max {
|
||||
max = v.Number.Content
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -588,13 +583,12 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
|
|||
min := math.MaxFloat64
|
||||
max := -math.MaxFloat64
|
||||
for _, v := range r.Contents {
|
||||
if "" != v.String() {
|
||||
n, _ := strconv.ParseFloat(v.String(), 64)
|
||||
if n < min {
|
||||
min = n
|
||||
if nil != v.Number {
|
||||
if v.Number.Content < min {
|
||||
min = v.Number.Content
|
||||
}
|
||||
if n > max {
|
||||
max = n
|
||||
if v.Number.Content > max {
|
||||
max = v.Number.Content
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -602,32 +596,40 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
|
|||
case CalcOperatorChecked:
|
||||
countChecked := 0
|
||||
for _, v := range r.Contents {
|
||||
if "√" == v.String() {
|
||||
countChecked++
|
||||
if nil != v.Checkbox {
|
||||
if v.Checkbox.Checked {
|
||||
countChecked++
|
||||
}
|
||||
}
|
||||
}
|
||||
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countChecked))}}
|
||||
case CalcOperatorUnchecked:
|
||||
countUnchecked := 0
|
||||
for _, v := range r.Contents {
|
||||
if "√" != v.String() {
|
||||
countUnchecked++
|
||||
if nil != v.Checkbox {
|
||||
if !v.Checkbox.Checked {
|
||||
countUnchecked++
|
||||
}
|
||||
}
|
||||
}
|
||||
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countUnchecked))}}
|
||||
case CalcOperatorPercentChecked:
|
||||
countChecked := 0
|
||||
for _, v := range r.Contents {
|
||||
if "√" == v.String() {
|
||||
countChecked++
|
||||
if nil != v.Checkbox {
|
||||
if v.Checkbox.Checked {
|
||||
countChecked++
|
||||
}
|
||||
}
|
||||
}
|
||||
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countChecked * 100 / len(r.Contents)))}}
|
||||
case CalcOperatorPercentUnchecked:
|
||||
countUnchecked := 0
|
||||
for _, v := range r.Contents {
|
||||
if "√" != v.String() {
|
||||
countUnchecked++
|
||||
if nil != v.Checkbox {
|
||||
if !v.Checkbox.Checked {
|
||||
countUnchecked++
|
||||
}
|
||||
}
|
||||
}
|
||||
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countUnchecked * 100 / len(r.Contents)))}}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue