From d257caff8d5d12a1751c3d18d3ca972cd5ef453d Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 12 Oct 2023 19:38:37 +0800 Subject: [PATCH 1/3] :art: Database block loading animation https://github.com/siyuan-note/siyuan/issues/9416 --- kernel/model/attribute_view.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 34718e82b..67e2bbe6a 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -209,6 +209,7 @@ func GetBlockAttributeViewKeys(blockID string) (ret []*BlockAttributeViewKeys) { } func RenderAttributeView(avID string) (viewable av.Viewable, attrView *av.AttributeView, err error) { + start := time.Now() waitForSyncingStorages() if avJSONPath := av.GetAttributeViewDataPath(avID); !gulu.File.IsExist(avJSONPath) { @@ -243,7 +244,7 @@ func RenderAttributeView(avID string) (viewable av.Viewable, attrView *av.Attrib } // 做一些数据兼容处理,保存的时候也会做 av.SaveAttributeView() - now := util.CurrentTimeMillis() + currentTimeMillis := util.CurrentTimeMillis() for _, kv := range attrView.KeyValues { switch kv.Key.Type { case av.KeyTypeBlock: // 补全 block 的创建时间和更新时间 @@ -254,11 +255,11 @@ func RenderAttributeView(avID string) (viewable av.Viewable, attrView *av.Attrib if nil == parseErr { v.Block.Created = created.UnixMilli() } else { - v.Block.Created = now + v.Block.Created = currentTimeMillis } } if 0 == v.Block.Updated { - v.Block.Updated = now + v.Block.Updated = currentTimeMillis } } } @@ -289,6 +290,12 @@ func RenderAttributeView(avID string) (viewable av.Viewable, attrView *av.Attrib viewable.FilterRows() viewable.SortRows() viewable.CalcCols() + + used := time.Since(start) + if minSleep := used.Milliseconds() - 256; 0 > minSleep { + // 补全加载时间到 256ms,避免前端动画闪烁干扰视觉 + time.Sleep(time.Duration(-minSleep) * time.Millisecond) + } return } From 1590913db73d8def51a05544b8a2b5e654285aa3 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 12 Oct 2023 19:55:57 +0800 Subject: [PATCH 2/3] :art: Update attr panel for av --- app/src/protyle/render/av/blockAttr.ts | 3 +++ kernel/model/attribute_view.go | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/protyle/render/av/blockAttr.ts b/app/src/protyle/render/av/blockAttr.ts index a469f2d5b..0ddb0ed89 100644 --- a/app/src/protyle/render/av/blockAttr.ts +++ b/app/src/protyle/render/av/blockAttr.ts @@ -8,6 +8,9 @@ import {popTextCell} from "./cell"; export const genAVValueHTML = (value: IAVCellValue) => { let html = ""; switch (value.type) { + case "block": + html = `