From a049eeec3e795e4d3b33bd17b6b8b28ec3c33b93 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 15 Apr 2024 13:27:19 +0800 Subject: [PATCH 1/5] :art: Improve database field sorting Fix https://github.com/siyuan-note/siyuan/issues/11038 --- kernel/av/sort.go | 16 +++++++++++----- kernel/av/table.go | 16 ++++++++++------ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/kernel/av/sort.go b/kernel/av/sort.go index bef537865..97ccb1156 100644 --- a/kernel/av/sort.go +++ b/kernel/av/sort.go @@ -119,13 +119,19 @@ func (value *Value) Compare(other *Value, attrView *AttributeView) int { return 0 } case KeyTypeSelect, KeyTypeMSelect: - if 0 < len(value.MSelect) && 0 < len(other.MSelect) { - v1 := value.MSelect[0].Content - v2 := other.MSelect[0].Content - if v1 == v2 { - return 0 + if nil != value.MSelect && nil != other.MSelect { + var v1 string + for _, v := range value.MSelect { + v1 += v.Content + break + } + var v2 string + for _, v := range other.MSelect { + v2 += v.Content + break } + // 按设置的选项顺序排序 key, _ := attrView.GetKey(value.KeyID) if nil != key { optionSort := map[string]int{} diff --git a/kernel/av/table.go b/kernel/av/table.go index fb7afc849..a5d8dc3d0 100644 --- a/kernel/av/table.go +++ b/kernel/av/table.go @@ -213,13 +213,17 @@ func (table *Table) SortRows(attrView *AttributeView) { sorted := true for _, colIndexSort := range colIndexSorts { val1 := editedRows[i].Cells[colIndexSort.Index].Value - if nil == val1 { - return colIndexSort.Order == SortOrderAsc - } - val2 := editedRows[j].Cells[colIndexSort.Index].Value - if nil == val2 { - return colIndexSort.Order != SortOrderAsc + if nil == val1 || val1.IsEmpty() { + if nil != val2 && !val2.IsEmpty() { + return false + } + sorted = false + continue + } else { + if nil == val2 || val2.IsEmpty() { + return true + } } result := val1.Compare(val2, attrView) From cab6e015d3b893f01de21e4075ca09e042c35422 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 15 Apr 2024 14:57:33 +0800 Subject: [PATCH 2/5] :art: Improve database reference anchor text https://github.com/siyuan-note/siyuan/issues/11035 --- kernel/model/blockinfo.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel/model/blockinfo.go b/kernel/model/blockinfo.go index 4f773cc89..a2a0a7976 100644 --- a/kernel/model/blockinfo.go +++ b/kernel/model/blockinfo.go @@ -197,6 +197,12 @@ func getNodeRefText0(node *ast.Node) string { return "Video..." case ast.NodeAudio: return "Audio..." + case ast.NodeAttributeView: + ret, _ := av.GetAttributeViewName(node.AttributeViewID) + if "" == ret { + ret = "Database " + Conf.language(105) + } + return ret } if ast.NodeDocument != node.Type && node.IsContainerBlock() { From 8127b98acea1173d4ca2f9ad66cb8ff1950cfa21 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 15 Apr 2024 14:57:52 +0800 Subject: [PATCH 3/5] :art: Improve gen ktree --- kernel/model/box.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/model/box.go b/kernel/model/box.go index 8b2ad4d45..e4d8ffd5a 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -458,7 +458,7 @@ func genTreeID(tree *parse.Tree) { if "" == n.IALAttr("id") && (ast.NodeParagraph == n.Type || ast.NodeList == n.Type || ast.NodeListItem == n.Type || ast.NodeBlockquote == n.Type || ast.NodeMathBlock == n.Type || ast.NodeCodeBlock == n.Type || ast.NodeHeading == n.Type || ast.NodeTable == n.Type || ast.NodeThematicBreak == n.Type || - ast.NodeYamlFrontMatter == n.Type || ast.NodeBlockQueryEmbed == n.Type || ast.NodeSuperBlock == n.Type || + ast.NodeYamlFrontMatter == n.Type || ast.NodeBlockQueryEmbed == n.Type || ast.NodeSuperBlock == n.Type || ast.NodeAttributeView == n.Type || ast.NodeHTMLBlock == n.Type || ast.NodeIFrame == n.Type || ast.NodeWidget == n.Type || ast.NodeAudio == n.Type || ast.NodeVideo == n.Type) { n.ID = ast.NewNodeID() n.KramdownIAL = [][]string{{"id", n.ID}} From c2eefd81a5485df958fdd3f2c50883db27fbd108 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 15 Apr 2024 15:19:00 +0800 Subject: [PATCH 4/5] :art: Improve database checkbox field sorting https://github.com/siyuan-note/siyuan/issues/11016 --- kernel/av/value.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kernel/av/value.go b/kernel/av/value.go index 5b188eedd..1974f09fa 100644 --- a/kernel/av/value.go +++ b/kernel/av/value.go @@ -208,6 +208,11 @@ func (value *Value) IsEdited() bool { return true } + if KeyTypeCheckbox == value.Type { + // 勾选框不会为空,即使勾选框未勾选,也不算是空,所以不能用下面的 IsEmpty 判断,这里使用更新时间判断是否编辑过 https://github.com/siyuan-note/siyuan/issues/11016 + return value.CreatedAt != value.UpdatedAt + } + if !value.IsEmpty() { return true } @@ -279,7 +284,7 @@ func (value *Value) IsEmpty() bool { if nil == value.Checkbox { return true } - return !value.Checkbox.Checked + return false // 勾选框不会为空 case KeyTypeRelation: return 1 > len(value.Relation.Contents) case KeyTypeRollup: From cd8f2049ff3eaf0f06650c0b33cf877324461323 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 15 Apr 2024 15:36:38 +0800 Subject: [PATCH 5/5] :art: Improve database checkbox field sorting https://github.com/siyuan-note/siyuan/issues/11016 --- kernel/av/table.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/av/table.go b/kernel/av/table.go index a5d8dc3d0..850f86850 100644 --- a/kernel/av/table.go +++ b/kernel/av/table.go @@ -179,6 +179,14 @@ func (table *Table) SortRows(attrView *AttributeView) { for i, row := range table.Rows { for _, colIndexSort := range colIndexSorts { val := table.Rows[i].Cells[colIndexSort.Index].Value + if KeyTypeCheckbox == val.Type { + if block := row.GetBlockValue(); nil != block && block.IsEdited() { + // 如果主键编辑过,则勾选框也算作编辑过,参与排序 https://github.com/siyuan-note/siyuan/issues/11016 + editedValRows[row.ID] = true + break + } + } + if val.IsEdited() { // 如果该行某列的值已经编辑过,则该行可参与排序 editedValRows[row.ID] = true