@@ -28,6 +28,14 @@ export interface QueryRendererParameters {
2828 editTaskPencilClickHandler : EditButtonClickHandler ;
2929}
3030
31+ /**
32+ * We want this function to be a method of ListItem but that causes a circular dependency
33+ * which makes the plugin fail to load in Obsidian.
34+ *
35+ * Note: the tests are in ListItem.test.ts
36+ *
37+ * @param listItem
38+ */
3139function findClosestParentTask ( listItem : ListItem ) {
3240 // Try to find the closest parent that is a task
3341 let closestParentTask = listItem . parent ;
@@ -198,16 +206,16 @@ export class QueryResultsRenderer {
198206 // will be empty, and no headings will be added.
199207 await this . addGroupHeadings ( content , group . groupHeadings ) ;
200208
201- const renderedTasks : Set < ListItem > = new Set ( ) ;
202- await this . createTaskList ( group . tasks , content , queryRendererParameters , renderedTasks ) ;
209+ const renderedListItems : Set < ListItem > = new Set ( ) ;
210+ await this . createTaskList ( group . tasks , content , queryRendererParameters , renderedListItems ) ;
203211 }
204212 }
205213
206214 private async createTaskList (
207- tasks : ListItem [ ] ,
215+ listItems : ListItem [ ] ,
208216 content : HTMLElement ,
209217 queryRendererParameters : QueryRendererParameters ,
210- renderedTasks : Set < ListItem > ,
218+ renderedListItems : Set < ListItem > ,
211219 ) : Promise < void > {
212220 const taskList = createAndAppendElement ( 'ul' , content ) ;
213221
@@ -228,16 +236,16 @@ export class QueryResultsRenderer {
228236 queryLayoutOptions : this . query . queryLayoutOptions ,
229237 } ) ;
230238
231- for ( const [ taskIndex , task ] of tasks . entries ( ) ) {
239+ for ( const [ listItemIndex , listItem ] of listItems . entries ( ) ) {
232240 if ( this . query . queryLayoutOptions . hideTree ) {
233241 /* Old-style rendering of tasks:
234242 * - What is rendered:
235243 * - Only task lines that match the query are rendered, as a flat list
236244 * - The order that lines are rendered:
237245 * - Tasks are rendered in the order specified in 'sort by' instructions and default sort order.
238246 */
239- if ( task instanceof Task ) {
240- await this . addTask ( taskList , taskLineRenderer , task , taskIndex , queryRendererParameters ) ;
247+ if ( listItem instanceof Task ) {
248+ await this . addTask ( taskList , taskLineRenderer , listItem , listItemIndex , queryRendererParameters ) ;
241249 }
242250 } else {
243251 /* New-style rendering of tasks:
@@ -253,85 +261,85 @@ export class QueryResultsRenderer {
253261 await this . addTaskOrListItemAndChildren (
254262 taskList ,
255263 taskLineRenderer ,
256- task ,
257- taskIndex ,
264+ listItem ,
265+ listItemIndex ,
258266 queryRendererParameters ,
259- tasks ,
260- renderedTasks ,
267+ listItems ,
268+ renderedListItems ,
261269 ) ;
262270 }
263271 }
264272
265273 content . appendChild ( taskList ) ;
266274 }
267275
268- private willBeRenderedLater ( task : ListItem , renderedTasks : Set < ListItem > , tasks : ListItem [ ] ) {
269- const closestParentTask = findClosestParentTask ( task ) ;
276+ private willBeRenderedLater ( listItem : ListItem , renderedListItems : Set < ListItem > , listItems : ListItem [ ] ) {
277+ const closestParentTask = findClosestParentTask ( listItem ) ;
270278 if ( ! closestParentTask ) {
271279 return false ;
272280 }
273281
274- if ( ! renderedTasks . has ( closestParentTask ) ) {
282+ if ( ! renderedListItems . has ( closestParentTask ) ) {
275283 // This task is a direct or indirect child of another task that we are waiting to draw,
276284 // so don't draw it yet, it will be done recursively later.
277- if ( tasks . includes ( closestParentTask ) ) {
285+ if ( listItems . includes ( closestParentTask ) ) {
278286 return true ;
279287 }
280288 }
281289
282290 return false ;
283291 }
284292
285- private alreadyRendered ( task : ListItem , renderedTasks : Set < ListItem > ) {
286- return renderedTasks . has ( task ) ;
293+ private alreadyRendered ( listItem : ListItem , renderedListItems : Set < ListItem > ) {
294+ return renderedListItems . has ( listItem ) ;
287295 }
288296
289297 private async addTaskOrListItemAndChildren (
290298 taskList : HTMLUListElement ,
291299 taskLineRenderer : TaskLineRenderer ,
292- task : ListItem ,
300+ listItem : ListItem ,
293301 taskIndex : number ,
294302 queryRendererParameters : QueryRendererParameters ,
295- tasks : ListItem [ ] ,
296- renderedTasks : Set < ListItem > ,
303+ listItems : ListItem [ ] ,
304+ renderedListItems : Set < ListItem > ,
297305 ) {
298- if ( this . alreadyRendered ( task , renderedTasks ) ) {
306+ if ( this . alreadyRendered ( listItem , renderedListItems ) ) {
299307 return ;
300308 }
301309
302- if ( this . willBeRenderedLater ( task , renderedTasks , tasks ) ) {
310+ if ( this . willBeRenderedLater ( listItem , renderedListItems , listItems ) ) {
303311 return ;
304312 }
305313
306- const listItem = await this . addTaskOrListItem (
314+ const listItemElement = await this . addTaskOrListItem (
307315 taskList ,
308316 taskLineRenderer ,
309- task ,
317+ listItem ,
310318 taskIndex ,
311319 queryRendererParameters ,
312320 ) ;
313- renderedTasks . add ( task ) ;
321+ renderedListItems . add ( listItem ) ;
314322
315- if ( task . children . length > 0 ) {
316- await this . createTaskList ( task . children , listItem , queryRendererParameters , renderedTasks ) ;
317- task . children . forEach ( ( childTask ) => {
318- renderedTasks . add ( childTask ) ;
323+ if ( listItem . children . length > 0 ) {
324+ await this . createTaskList ( listItem . children , listItemElement , queryRendererParameters , renderedListItems ) ;
325+ listItem . children . forEach ( ( childTask ) => {
326+ renderedListItems . add ( childTask ) ;
319327 } ) ;
320328 }
321329 }
322330
323331 private async addTaskOrListItem (
324332 taskList : HTMLUListElement ,
325333 taskLineRenderer : TaskLineRenderer ,
326- task : ListItem ,
334+ listItem : ListItem ,
327335 taskIndex : number ,
328336 queryRendererParameters : QueryRendererParameters ,
329337 ) {
330- if ( task instanceof Task ) {
331- return await this . addTask ( taskList , taskLineRenderer , task , taskIndex , queryRendererParameters ) ;
338+ if ( listItem instanceof Task ) {
339+ return await this . addTask ( taskList , taskLineRenderer , listItem , taskIndex , queryRendererParameters ) ;
332340 }
333341
334- return await this . addListItem ( taskList , task ) ;
342+ return await this . addListItem ( taskList , listItem ) ;
335343 }
336344
337345 private async addListItem ( taskList : HTMLUListElement , listItem : ListItem ) {
0 commit comments