@@ -3,15 +3,15 @@ import { postponeButtonTitle, shouldShowPostponeButton } from '../DateTime/Postp
33import { QueryLayout } from '../Layout/QueryLayout' ;
44import { TaskLayout } from '../Layout/TaskLayout' ;
55import type { GroupDisplayHeading } from '../Query/Group/GroupDisplayHeading' ;
6+ import type { TaskGroup } from '../Query/Group/TaskGroup' ;
67import type { QueryResult } from '../Query/QueryResult' ;
78import type { ListItem } from '../Task/ListItem' ;
89import type { Task } from '../Task/Task' ;
910import { PostponeMenu } from '../ui/Menus/PostponeMenu' ;
1011import { showMenu } from '../ui/Menus/TaskEditingMenu' ;
11- import type { TaskGroup } from '../Query/Group/TaskGroup' ;
1212import type { QueryRendererParameters } from './QueryResultsRenderer' ;
13- import { TaskLineRenderer , type TextRenderer , createAndAppendElement } from './TaskLineRenderer' ;
1413import { QueryResultsRendererBase , type QueryResultsRendererGetters } from './QueryResultsRendererBase' ;
14+ import { TaskLineRenderer , type TextRenderer , createAndAppendElement } from './TaskLineRenderer' ;
1515
1616export class HtmlQueryResultsRenderer extends QueryResultsRendererBase {
1717 // Renders the description in TaskLineRenderer:
@@ -28,6 +28,7 @@ export class HtmlQueryResultsRenderer extends QueryResultsRendererBase {
2828 private readonly taskLineRenderer : TaskLineRenderer ;
2929
3030 private readonly ulElementStack : HTMLUListElement [ ] = [ ] ;
31+ private readonly liElementStack : HTMLLIElement [ ] = [ ] ;
3132
3233 private readonly queryRendererParameters : QueryRendererParameters ;
3334
@@ -105,18 +106,13 @@ export class HtmlQueryResultsRenderer extends QueryResultsRendererBase {
105106 }
106107
107108 protected async addTaskGroup ( group : TaskGroup ) : Promise < void > {
108- // TODO re-extract the method to include this back
109- const taskList = createAndAppendElement ( 'ul' , this . getContent ( ) ) ;
110- this . ulElementStack . push ( taskList ) ;
111- try {
112- await this . addTaskList ( group . tasks ) ;
113- } finally {
114- this . ulElementStack . pop ( ) ;
115- }
109+ await this . addTaskList ( group . tasks ) ;
116110 }
117111
118112 protected beginTaskList ( ) : void {
119- const taskList = this . currentULElement ( ) ;
113+ const taskListContainer = this . ulElementStack . length > 0 ? this . currentLIElement ( ) : this . getContent ( ) ;
114+ const taskList = createAndAppendElement ( 'ul' , taskListContainer ) ;
115+
120116 taskList . classList . add (
121117 'contains-task-list' ,
122118 'plugin-tasks-query-result' ,
@@ -128,29 +124,30 @@ export class HtmlQueryResultsRenderer extends QueryResultsRendererBase {
128124 if ( groupingAttribute && groupingAttribute . length > 0 ) {
129125 taskList . dataset . taskGroupBy = groupingAttribute ;
130126 }
127+
128+ this . ulElementStack . push ( taskList ) ;
129+ }
130+
131+ protected endTaskList ( ) : void {
132+ this . ulElementStack . pop ( ) ;
131133 }
132134
133- protected async addListItem ( listItem : ListItem , listItemIndex : number , children : ListItem [ ] ) : Promise < void > {
135+ protected beginListItem ( ) {
134136 const taskList = this . currentULElement ( ) ;
135137 const listItemElement = createAndAppendElement ( 'li' , taskList ) ;
136- await this . taskLineRenderer . renderListItem ( listItemElement , listItem , listItemIndex ) ;
138+ this . liElementStack . push ( listItemElement ) ;
139+ }
137140
138- if ( children . length > 0 ) {
139- // TODO re-extract the method to include this back
140- const taskList1 = createAndAppendElement ( 'ul' , listItemElement ) ;
141- this . ulElementStack . push ( taskList1 ) ;
142- try {
143- await this . addTaskList ( children ) ;
144- } finally {
145- this . ulElementStack . pop ( ) ;
146- }
147- }
141+ protected async addListItem ( listItem : ListItem , listItemIndex : number ) : Promise < void > {
142+ const listItemElement = this . currentLIElement ( ) ;
143+
144+ await this . taskLineRenderer . renderListItem ( listItemElement , listItem , listItemIndex ) ;
148145 }
149146
150- protected async addTask ( task : Task , taskIndex : number , children : ListItem [ ] ) : Promise < void > {
147+ protected async addTask ( task : Task , taskIndex : number ) : Promise < void > {
151148 const isFilenameUnique = this . isFilenameUnique ( { task } , this . queryRendererParameters . allMarkdownFiles ( ) ) ;
152- const parentUlElement = this . currentULElement ( ) ;
153- const listItem = createAndAppendElement ( 'li' , parentUlElement ) ;
149+ const listItem = this . currentLIElement ( ) ;
150+
154151 await this . taskLineRenderer . renderTaskLine ( {
155152 li : listItem ,
156153 task,
@@ -185,17 +182,6 @@ export class HtmlQueryResultsRenderer extends QueryResultsRendererBase {
185182 }
186183
187184 this . currentULElement ( ) . appendChild ( listItem ) ;
188-
189- if ( children . length > 0 ) {
190- // TODO re-extract the method to include this back
191- const taskList1 = createAndAppendElement ( 'ul' , listItem ) ;
192- this . ulElementStack . push ( taskList1 ) ;
193- try {
194- await this . addTaskList ( children ) ;
195- } finally {
196- this . ulElementStack . pop ( ) ;
197- }
198- }
199185 }
200186
201187 private addEditButton ( listItem : HTMLElement , task : Task ) {
@@ -347,4 +333,8 @@ export class HtmlQueryResultsRenderer extends QueryResultsRendererBase {
347333 private currentULElement ( ) : HTMLUListElement {
348334 return this . ulElementStack [ this . ulElementStack . length - 1 ] ;
349335 }
336+
337+ private currentLIElement ( ) {
338+ return this . liElementStack [ this . liElementStack . length - 1 ] ;
339+ }
350340}
0 commit comments