@@ -53,6 +53,16 @@ export class PasteTaskDialog {
5353 <textarea id="taskList" class="b3-text-field"
5454 placeholder=""
5555 style="width: 100%; height: 250px; resize: vertical;"></textarea>
56+ <div style="display: flex; flex-direction: column; gap: 8px; margin-top: 12px;">
57+ <label style="display: flex; align-items: center; cursor: pointer;">
58+ <input id="autoDetectDate" type="checkbox" style="margin-right: 8px;">
59+ <span>${ t ( "autoDetectDateTime" ) } </span>
60+ </label>
61+ <label id="removeDateLabel" style="display: flex; align-items: center; cursor: pointer; margin-left: 20px;">
62+ <input id="removeDate" type="checkbox" style="margin-right: 8px;">
63+ <span>${ t ( "removeDateAfterDetection" ) } </span>
64+ </label>
65+ </div>
5666 </div>
5767 <div class="b3-dialog__action">
5868 <button class="b3-button b3-button--cancel" id="cancelBtn">${ t ( "cancel" ) || "取消" } </button>
@@ -65,6 +75,34 @@ export class PasteTaskDialog {
6575 const textArea = dialog . element . querySelector ( '#taskList' ) as HTMLTextAreaElement ;
6676 const cancelBtn = dialog . element . querySelector ( '#cancelBtn' ) as HTMLButtonElement ;
6777 const createBtn = dialog . element . querySelector ( '#createBtn' ) as HTMLButtonElement ;
78+ const autoDetectCheckbox = dialog . element . querySelector ( '#autoDetectDate' ) as HTMLInputElement ;
79+ const removeDateCheckbox = dialog . element . querySelector ( '#removeDate' ) as HTMLInputElement ;
80+ const removeDateLabel = dialog . element . querySelector ( '#removeDateLabel' ) as HTMLElement ;
81+
82+ // 初始化选中状态
83+ this . config . plugin . getAutoDetectDateTimeEnabled ( ) . then ( ( enabled : boolean ) => {
84+ autoDetectCheckbox . checked = enabled ;
85+ updateRemoveDateVisibility ( ) ;
86+ } ) ;
87+ this . config . plugin . getRemoveDateAfterDetectionEnabled ( ) . then ( ( enabled : boolean ) => {
88+ removeDateCheckbox . checked = enabled ;
89+ } ) ;
90+
91+ function updateRemoveDateVisibility ( ) {
92+ if ( autoDetectCheckbox . checked ) {
93+ removeDateLabel . style . opacity = "1" ;
94+ removeDateLabel . style . pointerEvents = "auto" ;
95+ removeDateCheckbox . disabled = false ;
96+ } else {
97+ removeDateLabel . style . opacity = "0.5" ;
98+ removeDateLabel . style . pointerEvents = "none" ;
99+ removeDateCheckbox . disabled = true ;
100+ }
101+ }
102+
103+ autoDetectCheckbox . addEventListener ( 'change' , ( ) => {
104+ updateRemoveDateVisibility ( ) ;
105+ } ) ;
68106
69107 cancelBtn . addEventListener ( 'click' , ( ) => dialog . destroy ( ) ) ;
70108
@@ -75,8 +113,9 @@ export class PasteTaskDialog {
75113 return ;
76114 }
77115
78- const autoDetect = await this . config . plugin . getAutoDetectDateTimeEnabled ( ) ;
79- const hierarchicalTasks = this . parseHierarchicalTaskList ( text , autoDetect ) ;
116+ const autoDetect = autoDetectCheckbox . checked ;
117+ const removeDate = removeDateCheckbox . checked ;
118+ const hierarchicalTasks = this . parseHierarchicalTaskList ( text , autoDetect , removeDate ) ;
80119
81120 if ( hierarchicalTasks . length > 0 ) {
82121 try {
@@ -100,7 +139,7 @@ export class PasteTaskDialog {
100139 } ) ;
101140 }
102141
103- private parseHierarchicalTaskList ( text : string , autoDetect : boolean = false ) : HierarchicalTask [ ] {
142+ private parseHierarchicalTaskList ( text : string , autoDetect : boolean = false , removeDate : boolean = true ) : HierarchicalTask [ ] {
104143 const lines = text . split ( '\n' ) ;
105144 const tasks : HierarchicalTask [ ] = [ ] ;
106145 const stack : Array < { task : HierarchicalTask ; level : number } > = [ ] ;
@@ -113,7 +152,7 @@ export class PasteTaskDialog {
113152
114153 if ( ! cleanLine || ( ! cleanLine . startsWith ( '-' ) && level === 0 && ! cleanLine . match ( / ^ \s * - / ) ) ) {
115154 if ( cleanLine && level === 0 ) {
116- const taskData = this . parseTaskLine ( cleanLine , autoDetect ) ;
155+ const taskData = this . parseTaskLine ( cleanLine , autoDetect , removeDate ) ;
117156 const task : HierarchicalTask = {
118157 ...taskData ,
119158 level : 0 ,
@@ -136,7 +175,7 @@ export class PasteTaskDialog {
136175 const taskContent = cleanLine . replace ( / ^ [ - * + ] + \s * / , '' ) ;
137176 if ( ! taskContent ) continue ;
138177
139- const taskData = this . parseTaskLine ( taskContent , autoDetect ) ;
178+ const taskData = this . parseTaskLine ( taskContent , autoDetect , removeDate ) ;
140179 const task : HierarchicalTask = {
141180 ...taskData ,
142181 level : combinedLevel ,
@@ -168,7 +207,7 @@ export class PasteTaskDialog {
168207 return Math . floor ( spaces / 2 ) ;
169208 }
170209
171- private parseTaskLine ( line : string , autoDetect : boolean = false ) : Omit < HierarchicalTask , 'level' | 'children' > {
210+ private parseTaskLine ( line : string , autoDetect : boolean = false , removeDate : boolean = true ) : Omit < HierarchicalTask , 'level' | 'children' > {
172211 const paramMatch = line . match ( / @ ( .* ) $ / ) ;
173212 let title = line ;
174213 let priority : string | undefined ;
@@ -204,7 +243,9 @@ export class PasteTaskDialog {
204243 if ( autoDetect ) {
205244 const detected = autoDetectDateTimeFromTitle ( title ) ;
206245 if ( detected . date || detected . endDate ) {
207- title = detected . cleanTitle || title ;
246+ if ( removeDate ) {
247+ title = detected . cleanTitle || title ;
248+ }
208249 startDate = detected . date ;
209250 time = detected . time ;
210251 endDate = detected . endDate ;
0 commit comments