mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-09-22 00:20:47 +02:00
Compare commits
8 commits
9d569ad37b
...
7faf981b69
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7faf981b69 | ||
![]() |
370601d277 | ||
![]() |
a99a55b512 | ||
![]() |
ba0c6883e6 | ||
![]() |
41f72e65d3 | ||
![]() |
b70328c7e7 | ||
![]() |
2ff8c148bd | ||
![]() |
5797872b97 |
15 changed files with 79 additions and 20 deletions
|
@ -608,6 +608,10 @@
|
|||
pointer-events: none;
|
||||
display: block;
|
||||
|
||||
&:not(:empty)::before {
|
||||
content: "";
|
||||
}
|
||||
|
||||
&::before {
|
||||
counter-increment: linenumber;
|
||||
content: counter(linenumber);
|
||||
|
|
|
@ -13,7 +13,6 @@ import {showMessage} from "../../dialog/message";
|
|||
import {fetchPost, fetchSyncPost} from "../../util/fetch";
|
||||
import {openEmojiPanel, unicode2Emoji} from "../../emoji";
|
||||
import {mountHelp, newNotebook} from "../../util/mount";
|
||||
import {confirmDialog} from "../../dialog/confirmDialog";
|
||||
import {isNotCtrl, isOnlyMeta, setStorageVal, updateHotkeyAfterTip} from "../../protyle/util/compatibility";
|
||||
import {openFileById} from "../../editor/util";
|
||||
import {
|
||||
|
@ -988,9 +987,12 @@ data-type="navigation-root" data-path="/">
|
|||
}
|
||||
if (sourceElement.parentElement.childElementCount === 1) {
|
||||
if (sourceElement.parentElement.previousElementSibling) {
|
||||
sourceElement.parentElement.previousElementSibling.querySelector(".b3-list-item__toggle").classList.add("fn__hidden");
|
||||
sourceElement.parentElement.previousElementSibling.querySelector(".b3-list-item__arrow").classList.remove("b3-list-item__arrow--open");
|
||||
const emojiElement = sourceElement.parentElement.previousElementSibling.querySelector(".b3-list-item__icon");
|
||||
const parentLiElement = sourceElement.parentElement.previousElementSibling;
|
||||
if (parentLiElement.getAttribute("data-type") !== "navigation-root") {
|
||||
parentLiElement.querySelector(".b3-list-item__toggle").classList.add("fn__hidden");
|
||||
}
|
||||
parentLiElement.querySelector(".b3-list-item__arrow").classList.remove("b3-list-item__arrow--open");
|
||||
const emojiElement = parentLiElement.querySelector(".b3-list-item__icon");
|
||||
if (emojiElement.innerHTML === unicode2Emoji(window.siyuan.storage[Constants.LOCAL_IMAGES].folder)) {
|
||||
emojiElement.innerHTML = unicode2Emoji(window.siyuan.storage[Constants.LOCAL_IMAGES].file);
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@ import {genUUID} from "../../util/genID";
|
|||
import {openMobileFileById} from "../editor";
|
||||
import {unicode2Emoji} from "../../emoji";
|
||||
import {mountHelp, newNotebook} from "../../util/mount";
|
||||
import {confirmDialog} from "../../dialog/confirmDialog";
|
||||
import {newFile} from "../../util/newFile";
|
||||
import {MenuItem} from "../../menus/Menu";
|
||||
import {App} from "../../index";
|
||||
|
|
|
@ -80,6 +80,9 @@ export const exportImage = (id: string) => {
|
|||
objectElement.remove();
|
||||
}
|
||||
}
|
||||
previewElement.querySelectorAll(".protyle-linenumber__rows span").forEach((item, index) => {
|
||||
item.textContent = (index + 1).toString();
|
||||
});
|
||||
setTimeout(() => {
|
||||
addScript("/stage/protyle/js/html-to-image.min.js?v=1.11.13", "protyleHtml2image").then(async () => {
|
||||
let blob = await window.htmlToImage.toBlob(exportDialog.element.querySelector(".b3-dialog__content"));
|
||||
|
|
|
@ -932,7 +932,7 @@ export const showColMenu = (protyle: IProtyle, blockElement: Element, cellElemen
|
|||
});
|
||||
menu.addItem({
|
||||
icon: "iconSoftWrap",
|
||||
label: `<label class="fn__flex" style="margin-bottom: 4px"><span>${window.siyuan.languages.wrap}</span><span class="fn__space fn__flex-1"></span>
|
||||
label: `<label class="fn__flex fn__pointer"><span>${window.siyuan.languages.wrap}</span><span class="fn__space fn__flex-1"></span>
|
||||
<input type="checkbox" class="b3-switch b3-switch--menu"${cellElement.dataset.wrap === "true" ? " checked" : ""}></label>`,
|
||||
bind(element) {
|
||||
const wrapElement = element.querySelector(".b3-switch") as HTMLInputElement;
|
||||
|
|
|
@ -154,6 +154,10 @@ const afterRenderGallery = (options: ITableOptions) => {
|
|||
if (typeof options.resetData.oldOffset === "number") {
|
||||
options.protyle.contentElement.scrollTop = options.resetData.oldOffset;
|
||||
}
|
||||
if (options.blockElement.getAttribute("data-need-focus") === "true") {
|
||||
focusBlock(options.blockElement);
|
||||
options.blockElement.removeAttribute("data-need-focus");
|
||||
}
|
||||
options.blockElement.setAttribute("data-render", "true");
|
||||
if (options.resetData.alignSelf) {
|
||||
options.blockElement.style.alignSelf = options.resetData.alignSelf;
|
||||
|
|
|
@ -282,6 +282,10 @@ const renderGroupTable = (options: ITableOptions) => {
|
|||
};
|
||||
|
||||
const afterRenderTable = (options: ITableOptions) => {
|
||||
if (options.blockElement.getAttribute("data-need-focus") === "true") {
|
||||
focusBlock(options.blockElement);
|
||||
options.blockElement.removeAttribute("data-need-focus");
|
||||
}
|
||||
options.blockElement.setAttribute("data-render", "true");
|
||||
options.blockElement.querySelector(".av__scroll").scrollLeft = options.resetData.left;
|
||||
options.blockElement.style.alignSelf = options.resetData.alignSelf;
|
||||
|
|
|
@ -610,6 +610,7 @@ export const focusBlock = (element: Element, parentElement?: HTMLElement, toStar
|
|||
range.setStart(cursorElement.firstChild, 0);
|
||||
setRange = true;
|
||||
} else {
|
||||
element.setAttribute("data-need-focus", "true");
|
||||
return false;
|
||||
}
|
||||
/// #else
|
||||
|
|
|
@ -675,7 +675,41 @@ func renderHistoryAttributeView(c *gin.Context) {
|
|||
|
||||
id := arg["id"].(string)
|
||||
created := arg["created"].(string)
|
||||
view, attrView, err := model.RenderHistoryAttributeView(id, created)
|
||||
blockIDArg := arg["blockID"]
|
||||
var blockID string
|
||||
if nil != blockIDArg {
|
||||
blockID = blockIDArg.(string)
|
||||
}
|
||||
viewIDArg := arg["viewID"]
|
||||
var viewID string
|
||||
if nil != viewIDArg {
|
||||
viewID = viewIDArg.(string)
|
||||
}
|
||||
page := 1
|
||||
pageArg := arg["page"]
|
||||
if nil != pageArg {
|
||||
page = int(pageArg.(float64))
|
||||
}
|
||||
|
||||
pageSize := -1
|
||||
pageSizeArg := arg["pageSize"]
|
||||
if nil != pageSizeArg {
|
||||
pageSize = int(pageSizeArg.(float64))
|
||||
}
|
||||
|
||||
query := ""
|
||||
queryArg := arg["query"]
|
||||
if nil != queryArg {
|
||||
query = queryArg.(string)
|
||||
}
|
||||
|
||||
groupPaging := map[string]interface{}{}
|
||||
groupPagingArg := arg["groupPaging"]
|
||||
if nil != groupPagingArg {
|
||||
groupPaging = groupPagingArg.(map[string]interface{})
|
||||
}
|
||||
|
||||
view, attrView, err := model.RenderHistoryAttributeView(blockID, id, viewID, query, page, pageSize, groupPaging, created)
|
||||
if err != nil {
|
||||
ret.Code = -1
|
||||
ret.Msg = err.Error()
|
||||
|
|
|
@ -1201,7 +1201,7 @@ func (r *ValueRollup) calcContents(calc *RollupCalc, destKey *Key) {
|
|||
}
|
||||
}
|
||||
|
||||
func GetAttributeViewDefaultValue(valueID, keyID, blockID string, typ KeyType) (ret *Value) {
|
||||
func GetAttributeViewDefaultValue(valueID, keyID, blockID string, typ KeyType, keyDateAutoFill bool) (ret *Value) {
|
||||
if "" == valueID {
|
||||
valueID = ast.NewNodeID()
|
||||
}
|
||||
|
@ -1227,7 +1227,7 @@ func GetAttributeViewDefaultValue(valueID, keyID, blockID string, typ KeyType) (
|
|||
case KeyTypeNumber:
|
||||
ret.Number = &ValueNumber{}
|
||||
case KeyTypeDate:
|
||||
ret.Date = &ValueDate{IsNotTime: true}
|
||||
ret.Date = &ValueDate{IsNotTime: !keyDateAutoFill}
|
||||
case KeyTypeSelect:
|
||||
ret.MSelect = []*ValueSelect{}
|
||||
case KeyTypeMSelect:
|
||||
|
|
|
@ -233,7 +233,7 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group
|
|||
}
|
||||
}
|
||||
} else {
|
||||
newValue = av.GetAttributeViewDefaultValue(ast.NewNodeID(), groupKey.ID, addingItemID, groupKey.Type)
|
||||
newValue = av.GetAttributeViewDefaultValue(ast.NewNodeID(), groupKey.ID, addingItemID, groupKey.Type, false)
|
||||
newValue.MSelect = append(newValue.MSelect, &av.ValueSelect{Content: opt.Name, Color: opt.Color})
|
||||
}
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group
|
|||
|
||||
if nil == nearItem && !filterKeyIDs[groupKey.ID] {
|
||||
// 没有临近项并且分组字段和过滤字段不同时,使用分组值
|
||||
newValue = av.GetAttributeViewDefaultValue(ast.NewNodeID(), groupKey.ID, addingItemID, groupKey.Type)
|
||||
newValue = av.GetAttributeViewDefaultValue(ast.NewNodeID(), groupKey.ID, addingItemID, groupKey.Type, false)
|
||||
if av.KeyTypeText == groupView.GroupVal.Type {
|
||||
content := groupView.GroupVal.Text.Content
|
||||
switch newValue.Type {
|
||||
|
@ -1535,7 +1535,7 @@ func GetBlockAttributeViewKeys(nodeID string) (ret []*BlockAttributeViewKeys) {
|
|||
keyValues = append(keyValues, kValues)
|
||||
} else {
|
||||
// 如果没有值,那么就补一个默认值
|
||||
kValues.Values = append(kValues.Values, av.GetAttributeViewDefaultValue(itemID[:14]+ast.NewNodeID()[14:], kv.Key.ID, itemID, kv.Key.Type))
|
||||
kValues.Values = append(kValues.Values, av.GetAttributeViewDefaultValue(itemID[:14]+ast.NewNodeID()[14:], kv.Key.ID, itemID, kv.Key.Type, false))
|
||||
keyValues = append(keyValues, kValues)
|
||||
}
|
||||
}
|
||||
|
@ -1651,7 +1651,7 @@ func GetBlockAttributeViewKeys(nodeID string) (ret []*BlockAttributeViewKeys) {
|
|||
ial = map[string]string{}
|
||||
}
|
||||
if nil == kv.Values[0].Template {
|
||||
kv.Values[0] = av.GetAttributeViewDefaultValue(kv.Values[0].ID, kv.Key.ID, nodeID, kv.Key.Type)
|
||||
kv.Values[0] = av.GetAttributeViewDefaultValue(kv.Values[0].ID, kv.Key.ID, nodeID, kv.Key.Type, false)
|
||||
}
|
||||
|
||||
var renderErr error
|
||||
|
@ -3156,7 +3156,7 @@ func addAttributeViewBlock(now int64, avID, dbBlockID, viewID, groupID, previous
|
|||
} else {
|
||||
if val.IsRenderAutoFill {
|
||||
val.CreatedAt, val.UpdatedAt = now, now+1000
|
||||
val.Date.Content, val.Date.IsNotEmpty = now, true
|
||||
val.Date.Content, val.Date.IsNotEmpty, val.Date.IsNotTime = now, true, false
|
||||
val.IsRenderAutoFill = false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -486,7 +486,7 @@ func RenderRepoSnapshotAttributeView(indexID, avID string) (viewable av.Viewable
|
|||
return
|
||||
}
|
||||
|
||||
func RenderHistoryAttributeView(avID, created string) (viewable av.Viewable, attrView *av.AttributeView, err error) {
|
||||
func RenderHistoryAttributeView(blockID, avID, viewID, query string, page, pageSize int, groupPaging map[string]interface{}, created string) (viewable av.Viewable, attrView *av.AttributeView, err error) {
|
||||
createdUnix, parseErr := strconv.ParseInt(created, 10, 64)
|
||||
if nil != parseErr {
|
||||
logging.LogErrorf("parse created [%s] failed: %s", created, parseErr)
|
||||
|
@ -525,6 +525,6 @@ func RenderHistoryAttributeView(avID, created string) (viewable av.Viewable, att
|
|||
}
|
||||
}
|
||||
|
||||
viewable, err = renderAttributeView(attrView, "", "", "", 1, -1, nil)
|
||||
viewable, err = renderAttributeView(attrView, blockID, viewID, query, page, pageSize, groupPaging)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -314,7 +314,7 @@ func filterNotFoundAttrViewItems(keyValuesMap map[string][]*av.KeyValues) {
|
|||
}
|
||||
}
|
||||
|
||||
func fillAttributeViewBaseValue(baseValue *av.BaseValue, fieldID, itemID string, fieldNumberFormat av.NumberFormat, fieldTemplate string) {
|
||||
func fillAttributeViewBaseValue(baseValue *av.BaseValue, fieldID, itemID string, fieldNumberFormat av.NumberFormat, fieldTemplate string, fieldDateAutoFill bool) {
|
||||
switch baseValue.ValueType {
|
||||
case av.KeyTypeNumber: // 格式化数字
|
||||
if nil != baseValue.Value && nil != baseValue.Value.Number && baseValue.Value.Number.IsNotEmpty {
|
||||
|
@ -330,7 +330,7 @@ func fillAttributeViewBaseValue(baseValue *av.BaseValue, fieldID, itemID string,
|
|||
}
|
||||
|
||||
if nil == baseValue.Value {
|
||||
baseValue.Value = av.GetAttributeViewDefaultValue(baseValue.ID, fieldID, itemID, baseValue.ValueType)
|
||||
baseValue.Value = av.GetAttributeViewDefaultValue(baseValue.ID, fieldID, itemID, baseValue.ValueType, fieldDateAutoFill)
|
||||
} else {
|
||||
FillAttributeViewNilValue(baseValue.Value, baseValue.ValueType)
|
||||
}
|
||||
|
|
|
@ -108,7 +108,11 @@ func RenderAttributeViewGallery(attrView *av.AttributeView, view *av.View, query
|
|||
}
|
||||
galleryCard.ID = cardID
|
||||
|
||||
fillAttributeViewBaseValue(fieldValue.BaseValue, field.ID, cardID, field.NumberFormat, field.Template)
|
||||
filedDateAutoFill := false
|
||||
if nil != field.Date {
|
||||
filedDateAutoFill = field.Date.AutoFillNow
|
||||
}
|
||||
fillAttributeViewBaseValue(fieldValue.BaseValue, field.ID, cardID, field.NumberFormat, field.Template, filedDateAutoFill)
|
||||
galleryCard.Values = append(galleryCard.Values, fieldValue)
|
||||
}
|
||||
|
||||
|
|
|
@ -96,7 +96,11 @@ func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s
|
|||
}
|
||||
tableRow.ID = rowID
|
||||
|
||||
fillAttributeViewBaseValue(tableCell.BaseValue, col.ID, rowID, col.NumberFormat, col.Template)
|
||||
filedDateAutoFill := false
|
||||
if nil != col.Date {
|
||||
filedDateAutoFill = col.Date.AutoFillNow
|
||||
}
|
||||
fillAttributeViewBaseValue(tableCell.BaseValue, col.ID, rowID, col.NumberFormat, col.Template, filedDateAutoFill)
|
||||
tableRow.Cells = append(tableRow.Cells, tableCell)
|
||||
}
|
||||
ret.Rows = append(ret.Rows, &tableRow)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue