@@ -1496,6 +1496,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
14961496 event . preventDefault ( ) ;
14971497 return ;
14981498 }
1499+ const gutterTypes = gutterType ? gutterType . replace ( Constants . SIYUAN_DROP_GUTTER , "" ) . split ( Constants . ZWSP ) : [ ] ;
14991500 const fileTreeIds = ( event . dataTransfer . types . includes ( Constants . SIYUAN_DROP_FILE ) && window . siyuan . dragElement ) ? window . siyuan . dragElement . innerText : "" ;
15001501 if ( event . shiftKey || ( event . altKey && fileTreeIds . indexOf ( "-" ) === - 1 ) ) {
15011502 const targetAssetElement = hasClosestBlock ( event . target ) ;
@@ -1567,7 +1568,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
15671568 targetElement = hasTopClosestByAttribute ( targetElement , "data-node-id" , null ) ;
15681569 }
15691570 } else if ( targetElement && targetElement . classList . contains ( "list" ) ) {
1570- if ( gutterType && gutterType . replace ( Constants . SIYUAN_DROP_GUTTER , "" ) . split ( Constants . ZWSP ) [ 0 ] !== "nodelistitem" ) {
1571+ if ( gutterTypes [ 0 ] !== "nodelistitem" ) {
15711572 targetElement = hasClosestBlock ( document . elementFromPoint ( event . clientX , event . clientY - 6 ) ) ;
15721573 } else {
15731574 targetElement = hasClosestByClassName ( document . elementFromPoint ( event . clientX , event . clientY - 6 ) , "li" ) ;
@@ -1586,10 +1587,25 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
15861587 }
15871588 }
15881589 } else if ( targetElement && gutterType && gutterType . startsWith ( `${ Constants . SIYUAN_DROP_GUTTER } NodeAttributeViewRowMenu${ Constants . ZWSP } ` . toLowerCase ( ) ) ) {
1589- // 行只能拖拽当前 av 中
15901590 if ( ( ! targetElement . classList . contains ( "av__row" ) && ! targetElement . classList . contains ( "av__row--util" ) ) ||
15911591 ( window . siyuan . dragElement && ! window . siyuan . dragElement . contains ( targetElement ) ) ) {
1592+ // 行只能拖拽当前 av 中
15921593 targetElement = false ;
1594+ } else {
1595+ // 模板、创建时间、更新时间 字段作为分组方式时不允许跨分组拖拽 https://github.com/siyuan-note/siyuan/issues/15553
1596+ const bodyElement = hasClosestByClassName ( targetElement , "av__body" ) ;
1597+ if ( bodyElement && [ "template" , "created" , "updated" ] . includes ( bodyElement . getAttribute ( "data-dtype" ) ) ) {
1598+ const groupID = bodyElement . getAttribute ( "data-group-id" ) ;
1599+ gutterTypes [ 2 ] . split ( "," ) . find ( item => {
1600+ if ( item && item . split ( "@" ) [ 1 ] !== groupID ) {
1601+ targetElement = false ;
1602+ editorElement . querySelectorAll ( ".dragover__bottom, .dragover__top, .dragover" ) . forEach ( ( item : HTMLElement ) => {
1603+ item . classList . remove ( "dragover__top" , "dragover__bottom" , "dragover" ) ;
1604+ } ) ;
1605+ return true ;
1606+ }
1607+ } ) ;
1608+ }
15931609 }
15941610 } else if ( targetElement && gutterType && gutterType . startsWith ( `${ Constants . SIYUAN_DROP_GUTTER } NodeAttributeView${ Constants . ZWSP } GalleryItem${ Constants . ZWSP } ` . toLowerCase ( ) ) ) {
15951611 // gallery item 只能拖拽当前 av 中
@@ -1718,13 +1734,12 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
17181734 disabledPosition = "" ;
17191735 // gutter 文档内拖拽限制
17201736 // 排除自己及子孙
1721- const gutterTypes = gutterType . replace ( Constants . SIYUAN_DROP_GUTTER , "" ) . split ( Constants . ZWSP ) ;
17221737 if ( gutterTypes [ 0 ] === "nodeattributeview" && gutterTypes [ 1 ] === "col" && targetElement . getAttribute ( "data-id" ) === gutterTypes [ 2 ] ) {
17231738 // 表头不能拖到自己上
17241739 clearDragoverElement ( dragoverElement ) ;
17251740 return ;
17261741 }
1727- if ( gutterTypes [ 0 ] === "nodeattributeviewrowmenu" && gutterTypes [ 2 ] === targetElement . getAttribute ( "data-id" ) ) {
1742+ if ( gutterTypes [ 0 ] === "nodeattributeviewrowmenu" && gutterTypes [ 2 ] . split ( "@" ) [ 0 ] === targetElement . getAttribute ( "data-id" ) ) {
17281743 // 行不能拖到自己上
17291744 clearDragoverElement ( dragoverElement ) ;
17301745 return ;
0 commit comments