Skip to content

Commit 4b53218

Browse files
authored
Merge pull request #363 from Quorafind/feat/move-metadata-to-same-line
feat(task-view): implement dynamic metadata positioning
2 parents 11dff15 + c034862 commit 4b53218

File tree

4 files changed

+33
-0
lines changed

4 files changed

+33
-0
lines changed

src/common/setting-definition.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,7 @@ export interface TaskProgressBarSettings {
658658
// View Settings (Updated Structure)
659659
enableView: boolean;
660660
enableInlineEditor: boolean; // Enable inline editing in task views
661+
enableDynamicMetadataPositioning: boolean; // Enable intelligent metadata positioning based on content length
661662
defaultViewMode: "list" | "tree"; // Global default view mode for all views
662663
viewConfiguration: ViewConfig[]; // Manages order, visibility, basic info, AND filter rules
663664

@@ -982,6 +983,7 @@ export const DEFAULT_SETTINGS: TaskProgressBarSettings = {
982983
// View Defaults (Updated Structure)
983984
enableView: true,
984985
enableInlineEditor: true, // Enable inline editing by default
986+
enableDynamicMetadataPositioning: true, // Enable intelligent metadata positioning by default
985987
defaultViewMode: "list", // Global default view mode for all views
986988

987989
// Global Filter Defaults

src/components/settings/ViewSettingsTab.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,21 @@ export function renderViewSettingsTab(
543543
});
544544
});
545545

546+
new Setting(containerEl)
547+
.setName(t("Enable dynamic metadata positioning"))
548+
.setDesc(
549+
t(
550+
"Intelligently position task metadata. When enabled, metadata appears on the same line as short tasks and below long tasks. When disabled, metadata always appears below the task content."
551+
)
552+
)
553+
.addToggle((toggle) => {
554+
toggle.setValue(settingTab.plugin.settings.enableDynamicMetadataPositioning);
555+
toggle.onChange((value) => {
556+
settingTab.plugin.settings.enableDynamicMetadataPositioning = value;
557+
settingTab.applySettingsUpdate();
558+
});
559+
});
560+
546561
new Setting(containerEl)
547562
.setName(t("Ignore all tasks behind heading"))
548563
.setDesc(

src/components/task-view/listItem.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,14 @@ export class TaskListItemComponent extends Component {
770770
return;
771771
}
772772

773+
// Check if dynamic metadata positioning is enabled
774+
if (!this.plugin.settings.enableDynamicMetadataPositioning) {
775+
// If disabled, always use multi-line (traditional) layout
776+
this.contentMetadataContainer.toggleClass("multi-line-content", true);
777+
this.contentMetadataContainer.toggleClass("single-line-content", false);
778+
return;
779+
}
780+
773781
// Get the line height of the content element
774782
const computedStyle = window.getComputedStyle(this.contentEl);
775783
const lineHeight = parseFloat(computedStyle.lineHeight) || parseFloat(computedStyle.fontSize) * 1.4;

src/components/task-view/treeItem.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,14 @@ export class TaskTreeItemComponent extends Component {
846846
return;
847847
}
848848

849+
// Check if dynamic metadata positioning is enabled
850+
if (!this.plugin.settings.enableDynamicMetadataPositioning) {
851+
// If disabled, always use multi-line (traditional) layout
852+
this.contentMetadataContainer.toggleClass("multi-line-content", true);
853+
this.contentMetadataContainer.toggleClass("single-line-content", false);
854+
return;
855+
}
856+
849857
// Get the line height of the content element
850858
const computedStyle = window.getComputedStyle(this.contentEl);
851859
const lineHeight = parseFloat(computedStyle.lineHeight) || parseFloat(computedStyle.fontSize) * 1.4;

0 commit comments

Comments
 (0)