🎨 Attribute View number column format https://github.com/siyuan-note/siyuan/issues/8764
This commit is contained in:
parent
760598d943
commit
9a5e9f1a14
2 changed files with 55 additions and 4 deletions
|
@ -32,6 +32,8 @@ import (
|
|||
"github.com/siyuan-note/filelock"
|
||||
"github.com/siyuan-note/logging"
|
||||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
"golang.org/x/text/language"
|
||||
"golang.org/x/text/message"
|
||||
)
|
||||
|
||||
// AttributeView 描述了属性视图的结构。
|
||||
|
@ -176,12 +178,51 @@ func NewFormattedValueNumber(content float64, format NumberFormat) (ret *ValueNu
|
|||
}
|
||||
|
||||
func (number *ValueNumber) FormatNumber() {
|
||||
switch number.Format {
|
||||
number.FormattedContent = formatNumber(number.Content, number.Format)
|
||||
}
|
||||
|
||||
func formatNumber(content float64, format NumberFormat) string {
|
||||
switch format {
|
||||
case NumberFormatNone:
|
||||
number.FormattedContent = strconv.FormatFloat(number.Content, 'f', -1, 64)
|
||||
return strconv.FormatFloat(content, 'f', -1, 64)
|
||||
case NumberFormatCommas:
|
||||
p := message.NewPrinter(language.English)
|
||||
return p.Sprintf("%d", content)
|
||||
case NumberFormatPercent:
|
||||
s := fmt.Sprintf("%.2f", number.Content*100)
|
||||
number.FormattedContent = strings.TrimRight(strings.TrimRight(s, "0"), ".") + "%"
|
||||
s := fmt.Sprintf("%.2f", content*100)
|
||||
return strings.TrimRight(strings.TrimRight(s, "0"), ".") + "%"
|
||||
case NumberFormatUSDollar:
|
||||
p := message.NewPrinter(language.English)
|
||||
return p.Sprintf("$%d", content)
|
||||
case NumberFormatYuan:
|
||||
p := message.NewPrinter(language.Chinese)
|
||||
return p.Sprintf("CN¥%d", content)
|
||||
case NumberFormatEuro:
|
||||
p := message.NewPrinter(language.German)
|
||||
return p.Sprintf("€%d", content)
|
||||
case NumberFormatPound:
|
||||
p := message.NewPrinter(language.English)
|
||||
return p.Sprintf("£%d", content)
|
||||
case NumberFormatYen:
|
||||
p := message.NewPrinter(language.Japanese)
|
||||
return p.Sprintf("¥%d", content)
|
||||
case NumberFormatRuble:
|
||||
p := message.NewPrinter(language.Russian)
|
||||
return p.Sprintf("₽%d", content)
|
||||
case NumberFormatRupee:
|
||||
p := message.NewPrinter(language.Hindi)
|
||||
return p.Sprintf("₹%d", content)
|
||||
case NumberFormatWon:
|
||||
p := message.NewPrinter(language.Korean)
|
||||
return p.Sprintf("₩%d", content)
|
||||
case NumberFormatCanadianDollar:
|
||||
p := message.NewPrinter(language.English)
|
||||
return p.Sprintf("CA$%d", content)
|
||||
case NumberFormatFranc:
|
||||
p := message.NewPrinter(language.French)
|
||||
return p.Sprintf("CHF%d", content)
|
||||
default:
|
||||
return strconv.FormatFloat(content, 'f', -1, 64)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -149,6 +149,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
|
|||
Sorts: view.Table.Sorts,
|
||||
}
|
||||
|
||||
// 组装列
|
||||
for _, col := range view.Table.Columns {
|
||||
key, getErr := attrView.GetKey(col.ID)
|
||||
if nil != getErr {
|
||||
|
@ -169,6 +170,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
|
|||
})
|
||||
}
|
||||
|
||||
// 生成行
|
||||
rows := map[string][]*av.Value{}
|
||||
for _, keyValues := range attrView.KeyValues {
|
||||
for _, val := range keyValues.Values {
|
||||
|
@ -176,6 +178,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
|
|||
}
|
||||
}
|
||||
|
||||
// 过滤掉不存在的行
|
||||
notFound := []string{}
|
||||
for blockID, _ := range rows {
|
||||
if treenode.GetBlockTree(blockID) == nil {
|
||||
|
@ -186,6 +189,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
|
|||
delete(rows, blockID)
|
||||
}
|
||||
|
||||
// 生成行单元格
|
||||
for rowID, row := range rows {
|
||||
var tableRow av.TableRow
|
||||
for _, col := range ret.Columns {
|
||||
|
@ -207,11 +211,17 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
|
|||
}
|
||||
}
|
||||
tableRow.ID = rowID
|
||||
|
||||
if av.KeyTypeNumber == tableCell.ValueType {
|
||||
tableCell.Value.Number.FormatNumber()
|
||||
}
|
||||
|
||||
tableRow.Cells = append(tableRow.Cells, tableCell)
|
||||
}
|
||||
ret.Rows = append(ret.Rows, &tableRow)
|
||||
}
|
||||
|
||||
// 自定义排序
|
||||
sortRowIDs := map[string]int{}
|
||||
if 0 < len(view.Table.RowIDs) {
|
||||
for i, rowID := range view.Table.RowIDs {
|
||||
|
|
Loading…
Add table
Reference in a new issue