Release v1.0.9: Rename plugin from Focus Task to Immerse
This commit is contained in:
192
main.js
192
main.js
@@ -24,7 +24,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
||||
// src/main.ts
|
||||
var main_exports = {};
|
||||
__export(main_exports, {
|
||||
default: () => FocusTaskPlugin
|
||||
default: () => ImmersePlugin
|
||||
});
|
||||
module.exports = __toCommonJS(main_exports);
|
||||
var import_obsidian3 = require("obsidian");
|
||||
@@ -56,7 +56,7 @@ var DEFAULT_DATA = {
|
||||
lastActiveDate: "",
|
||||
pomodorosCompleted: 0
|
||||
};
|
||||
var VIEW_TYPE_FOCUS_TASK = "focus-task-view";
|
||||
var VIEW_TYPE_IMMERSE = "immerse-view";
|
||||
var CELEBRATION_MESSAGES = [
|
||||
{ emoji: "\u{1F4A5}", message: "Crushed it!" },
|
||||
{ emoji: "\u{1F525}", message: "On fire!" },
|
||||
@@ -98,7 +98,7 @@ var QuickAddTaskModal = class extends import_obsidian.Modal {
|
||||
}
|
||||
onOpen() {
|
||||
const { contentEl } = this;
|
||||
contentEl.addClass("focus-task-modal");
|
||||
contentEl.addClass("immerse-modal");
|
||||
contentEl.createEl("h2", { text: "\u26A1 Add New Task" });
|
||||
new import_obsidian.Setting(contentEl).setName("Task").addText((text) => {
|
||||
text.setPlaceholder("What do you need to do?").onChange((value) => this.taskText = value);
|
||||
@@ -137,10 +137,10 @@ var QuickAddTaskModal = class extends import_obsidian.Modal {
|
||||
dropdown.setValue(this.selectedList);
|
||||
dropdown.onChange((value) => this.selectedList = value);
|
||||
});
|
||||
const buttonContainer = contentEl.createEl("div", { cls: "focus-task-modal-buttons" });
|
||||
const cancelBtn = buttonContainer.createEl("button", { text: "Cancel", cls: "focus-task-btn" });
|
||||
const buttonContainer = contentEl.createEl("div", { cls: "immerse-modal-buttons" });
|
||||
const cancelBtn = buttonContainer.createEl("button", { text: "Cancel", cls: "immerse-btn" });
|
||||
cancelBtn.addEventListener("click", () => this.close());
|
||||
const addBtn = buttonContainer.createEl("button", { text: "Add Task", cls: "focus-task-btn focus-task-btn-primary" });
|
||||
const addBtn = buttonContainer.createEl("button", { text: "Add Task", cls: "immerse-btn immerse-btn-primary" });
|
||||
addBtn.addEventListener("click", () => this.submitTask());
|
||||
}
|
||||
submitTask() {
|
||||
@@ -166,7 +166,7 @@ var EditTaskModal = class extends import_obsidian.Modal {
|
||||
}
|
||||
onOpen() {
|
||||
const { contentEl } = this;
|
||||
contentEl.addClass("focus-task-modal");
|
||||
contentEl.addClass("immerse-modal");
|
||||
contentEl.createEl("h2", { text: "\u270F\uFE0F Edit Task" });
|
||||
new import_obsidian.Setting(contentEl).setName("Task").addText((text) => text.setValue(this.task.text).onChange((value) => this.task.text = value));
|
||||
new import_obsidian.Setting(contentEl).setName("Estimated Time").addDropdown((dropdown) => {
|
||||
@@ -204,10 +204,10 @@ var EditTaskModal = class extends import_obsidian.Modal {
|
||||
if (this.task.actualMinutes > 0) {
|
||||
new import_obsidian.Setting(contentEl).setName("Time Tracked").setDesc(`You've worked on this task for ${this.plugin.formatTimeHuman(this.task.actualMinutes)}`);
|
||||
}
|
||||
const buttonContainer = contentEl.createEl("div", { cls: "focus-task-modal-buttons" });
|
||||
const cancelBtn = buttonContainer.createEl("button", { text: "Cancel", cls: "focus-task-btn" });
|
||||
const buttonContainer = contentEl.createEl("div", { cls: "immerse-modal-buttons" });
|
||||
const cancelBtn = buttonContainer.createEl("button", { text: "Cancel", cls: "immerse-btn" });
|
||||
cancelBtn.addEventListener("click", () => this.close());
|
||||
const saveBtn = buttonContainer.createEl("button", { text: "Save", cls: "focus-task-btn focus-task-btn-primary" });
|
||||
const saveBtn = buttonContainer.createEl("button", { text: "Save", cls: "immerse-btn immerse-btn-primary" });
|
||||
saveBtn.addEventListener("click", () => {
|
||||
this.plugin.updateTask(this.task.id, this.task);
|
||||
new import_obsidian.Notice("\u2705 Task updated!");
|
||||
@@ -221,7 +221,7 @@ var EditTaskModal = class extends import_obsidian.Modal {
|
||||
};
|
||||
|
||||
// src/view.ts
|
||||
var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
var ImmerseView = class extends import_obsidian2.ItemView {
|
||||
constructor(leaf, plugin) {
|
||||
super(leaf);
|
||||
this.currentFilter = "all";
|
||||
@@ -233,10 +233,10 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
getViewType() {
|
||||
return VIEW_TYPE_FOCUS_TASK;
|
||||
return VIEW_TYPE_IMMERSE;
|
||||
}
|
||||
getDisplayText() {
|
||||
return "Focus Task";
|
||||
return "Immerse";
|
||||
}
|
||||
getIcon() {
|
||||
return "zap";
|
||||
@@ -270,7 +270,7 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
refresh() {
|
||||
const container = this.containerEl.children[1];
|
||||
container.empty();
|
||||
container.addClass("focus-task-container");
|
||||
container.addClass("immerse-container");
|
||||
this.timerTimeEl = null;
|
||||
this.progressBarEl = null;
|
||||
this.actualTimeEl = null;
|
||||
@@ -281,14 +281,14 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
this.renderTaskList(container);
|
||||
}
|
||||
renderHeader(container) {
|
||||
const header = container.createEl("div", { cls: "focus-task-header" });
|
||||
const titleSection = header.createEl("div", { cls: "focus-task-title-section" });
|
||||
titleSection.createEl("h2", { text: "\u26A1 Focus Task", cls: "focus-task-title" });
|
||||
const header = container.createEl("div", { cls: "immerse-header" });
|
||||
const titleSection = header.createEl("div", { cls: "immerse-title-section" });
|
||||
titleSection.createEl("h2", { text: "\u26A1 Immerse", cls: "immerse-title" });
|
||||
const today = new Date();
|
||||
const dateStr = today.toLocaleDateString("en-US", { weekday: "long", month: "short", day: "numeric" });
|
||||
titleSection.createEl("div", { text: dateStr, cls: "focus-task-date" });
|
||||
const actions = header.createEl("div", { cls: "focus-task-header-actions" });
|
||||
const addBtn = actions.createEl("button", { cls: "focus-task-btn focus-task-btn-primary" });
|
||||
titleSection.createEl("div", { text: dateStr, cls: "immerse-date" });
|
||||
const actions = header.createEl("div", { cls: "immerse-header-actions" });
|
||||
const addBtn = actions.createEl("button", { cls: "immerse-btn immerse-btn-primary" });
|
||||
addBtn.innerHTML = "+ Add Task";
|
||||
addBtn.addEventListener("click", () => {
|
||||
new QuickAddTaskModal(this.app, this.plugin).open();
|
||||
@@ -296,7 +296,7 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
}
|
||||
renderStatsBar(container) {
|
||||
const stats = this.plugin.getStats();
|
||||
const statsBar = container.createEl("div", { cls: "focus-task-stats-bar" });
|
||||
const statsBar = container.createEl("div", { cls: "immerse-stats-bar" });
|
||||
const statItems = [
|
||||
{ label: "Pending", value: stats.pendingCount.toString(), icon: "\u{1F4CB}" },
|
||||
{ label: "Done Today", value: stats.completedToday.toString(), icon: "\u2705" },
|
||||
@@ -304,35 +304,35 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
{ label: "Streak", value: `${stats.streak} days`, icon: "\u{1F525}" }
|
||||
];
|
||||
statItems.forEach((stat) => {
|
||||
const item = statsBar.createEl("div", { cls: "focus-task-stat-item" });
|
||||
item.createEl("div", { cls: "focus-task-stat-icon", text: stat.icon });
|
||||
item.createEl("div", { cls: "focus-task-stat-value", text: stat.value });
|
||||
item.createEl("div", { cls: "focus-task-stat-label", text: stat.label });
|
||||
const item = statsBar.createEl("div", { cls: "immerse-stat-item" });
|
||||
item.createEl("div", { cls: "immerse-stat-icon", text: stat.icon });
|
||||
item.createEl("div", { cls: "immerse-stat-value", text: stat.value });
|
||||
item.createEl("div", { cls: "immerse-stat-label", text: stat.label });
|
||||
});
|
||||
}
|
||||
renderActiveTask(container) {
|
||||
const activeSection = container.createEl("div", { cls: "focus-task-active-section" });
|
||||
const activeSection = container.createEl("div", { cls: "immerse-active-section" });
|
||||
if (this.plugin.activeTaskId) {
|
||||
const task = this.plugin.data.tasks.find((t) => t.id === this.plugin.activeTaskId);
|
||||
if (task) {
|
||||
activeSection.addClass("focus-task-has-active");
|
||||
const activeCard = activeSection.createEl("div", { cls: "focus-task-active-card" });
|
||||
activeSection.addClass("immerse-has-active");
|
||||
const activeCard = activeSection.createEl("div", { cls: "immerse-active-card" });
|
||||
if (this.plugin.isBreakMode) {
|
||||
activeCard.addClass("focus-task-break-card");
|
||||
activeCard.addClass("immerse-break-card");
|
||||
const breakLabel = this.plugin.currentTimerSeconds > 0 ? "\u2615 BREAK TIME" : "\u2728 BREAK COMPLETE";
|
||||
activeCard.createEl("div", { cls: "focus-task-active-label", text: breakLabel });
|
||||
activeCard.createEl("div", { cls: "immerse-active-label", text: breakLabel });
|
||||
} else {
|
||||
const workLabel = this.plugin.currentTimerSeconds > 0 ? "\u{1F3AF} FOCUSING ON" : "\u{1F345} POMODORO COMPLETE";
|
||||
activeCard.createEl("div", { cls: "focus-task-active-label", text: workLabel });
|
||||
activeCard.createEl("div", { cls: "immerse-active-label", text: workLabel });
|
||||
}
|
||||
activeCard.createEl("div", { cls: "focus-task-active-task-name", text: task.text });
|
||||
const timerDisplay = activeCard.createEl("div", { cls: "focus-task-timer-display" });
|
||||
activeCard.createEl("div", { cls: "immerse-active-task-name", text: task.text });
|
||||
const timerDisplay = activeCard.createEl("div", { cls: "immerse-timer-display" });
|
||||
this.timerTimeEl = timerDisplay.createEl("span", {
|
||||
cls: "focus-task-timer-time",
|
||||
cls: "immerse-timer-time",
|
||||
text: this.plugin.formatTime(this.plugin.currentTimerSeconds)
|
||||
});
|
||||
const progressWrap = activeCard.createEl("div", { cls: "focus-task-progress-wrap" });
|
||||
this.progressBarEl = progressWrap.createEl("div", { cls: "focus-task-progress-bar" });
|
||||
const progressWrap = activeCard.createEl("div", { cls: "immerse-progress-wrap" });
|
||||
this.progressBarEl = progressWrap.createEl("div", { cls: "immerse-progress-bar" });
|
||||
let progressPercent = 0;
|
||||
if (this.plugin.isBreakMode) {
|
||||
const breakDuration = this.plugin.pomodoroCount % this.plugin.settings.longBreakInterval === 0 ? this.plugin.settings.longBreakMinutes * 60 : this.plugin.settings.pomodoroBreakMinutes * 60;
|
||||
@@ -343,38 +343,38 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
}
|
||||
this.progressBarEl.style.width = `${Math.min(Math.max(progressPercent, 0), 100)}%`;
|
||||
if (progressPercent >= 100)
|
||||
this.progressBarEl.addClass("focus-task-overtime");
|
||||
this.progressBarEl.addClass("immerse-overtime");
|
||||
if (!this.plugin.isBreakMode) {
|
||||
const timeInfo = activeCard.createEl("div", { cls: "focus-task-time-info" });
|
||||
const timeInfo = activeCard.createEl("div", { cls: "immerse-time-info" });
|
||||
timeInfo.createEl("span", { text: `Est: ${this.plugin.formatTimeHuman(task.estimatedMinutes)}` });
|
||||
this.actualTimeEl = timeInfo.createEl("span", { text: `Actual: ${this.plugin.formatTimeHuman(task.actualMinutes)}` });
|
||||
}
|
||||
const controls = activeCard.createEl("div", { cls: "focus-task-active-controls" });
|
||||
const controls = activeCard.createEl("div", { cls: "immerse-active-controls" });
|
||||
if (this.plugin.isBreakMode) {
|
||||
if (this.plugin.currentTimerSeconds > 0) {
|
||||
this.pauseBtnEl = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-secondary" });
|
||||
this.pauseBtnEl = controls.createEl("button", { cls: "immerse-btn immerse-btn-secondary" });
|
||||
this.pauseBtnEl.innerHTML = this.plugin.isTimerRunning ? "\u23F8 Pause" : "\u25B6 Resume";
|
||||
this.pauseBtnEl.addEventListener("click", () => this.plugin.toggleTimer());
|
||||
const skipBreakBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-primary" });
|
||||
const skipBreakBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-primary" });
|
||||
skipBreakBtn.innerHTML = "\u23ED Skip Break";
|
||||
skipBreakBtn.addEventListener("click", () => {
|
||||
this.plugin.isBreakMode = false;
|
||||
this.plugin.startPomodoro(task.id);
|
||||
});
|
||||
const stopBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-danger" });
|
||||
const stopBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-danger" });
|
||||
stopBtn.innerHTML = "\u2715 Stop";
|
||||
stopBtn.addEventListener("click", () => {
|
||||
this.plugin.isBreakMode = false;
|
||||
this.plugin.stopTimer();
|
||||
});
|
||||
} else {
|
||||
const resumeWorkBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-success" });
|
||||
const resumeWorkBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-success" });
|
||||
resumeWorkBtn.innerHTML = "\u25B6 Resume Work";
|
||||
resumeWorkBtn.addEventListener("click", () => {
|
||||
this.plugin.isBreakMode = false;
|
||||
this.plugin.startPomodoro(task.id);
|
||||
});
|
||||
const stopBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-danger" });
|
||||
const stopBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-danger" });
|
||||
stopBtn.innerHTML = "\u2715 Stop";
|
||||
stopBtn.addEventListener("click", () => {
|
||||
this.plugin.isBreakMode = false;
|
||||
@@ -383,41 +383,41 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
}
|
||||
} else {
|
||||
if (this.plugin.currentTimerSeconds > 0) {
|
||||
this.pauseBtnEl = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-secondary" });
|
||||
this.pauseBtnEl = controls.createEl("button", { cls: "immerse-btn immerse-btn-secondary" });
|
||||
this.pauseBtnEl.innerHTML = this.plugin.isTimerRunning ? "\u23F8 Pause" : "\u25B6 Resume";
|
||||
this.pauseBtnEl.addEventListener("click", () => this.plugin.toggleTimer());
|
||||
const completeBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-success" });
|
||||
const completeBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-success" });
|
||||
completeBtn.innerHTML = "\u2713 Complete";
|
||||
completeBtn.addEventListener("click", () => this.plugin.completeTask(task.id));
|
||||
const stopBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-danger" });
|
||||
const stopBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-danger" });
|
||||
stopBtn.innerHTML = "\u2715 Stop";
|
||||
stopBtn.addEventListener("click", () => this.plugin.stopTimer());
|
||||
} else {
|
||||
const startBreakBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-secondary" });
|
||||
const startBreakBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-secondary" });
|
||||
startBreakBtn.innerHTML = "\u2615 Start Break";
|
||||
startBreakBtn.addEventListener("click", () => this.plugin.startBreak());
|
||||
const continueBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-primary" });
|
||||
const continueBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-primary" });
|
||||
continueBtn.innerHTML = "\u25B6 Continue Working";
|
||||
continueBtn.addEventListener("click", () => this.plugin.startPomodoro(task.id));
|
||||
const completeBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-success" });
|
||||
const completeBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-success" });
|
||||
completeBtn.innerHTML = "\u2713 Complete";
|
||||
completeBtn.addEventListener("click", () => this.plugin.completeTask(task.id));
|
||||
const stopBtn = controls.createEl("button", { cls: "focus-task-btn focus-task-btn-danger" });
|
||||
const stopBtn = controls.createEl("button", { cls: "immerse-btn immerse-btn-danger" });
|
||||
stopBtn.innerHTML = "\u2715 Stop";
|
||||
stopBtn.addEventListener("click", () => this.plugin.stopTimer());
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const startPrompt = activeSection.createEl("div", { cls: "focus-task-start-prompt" });
|
||||
startPrompt.createEl("div", { cls: "focus-task-prompt-icon", text: "\u26A1" });
|
||||
startPrompt.createEl("div", { cls: "focus-task-prompt-text", text: "Ready to focus?" });
|
||||
startPrompt.createEl("div", { cls: "focus-task-prompt-hint", text: "Click \u25B6 on a task to start a Pomodoro session" });
|
||||
const startPrompt = activeSection.createEl("div", { cls: "immerse-start-prompt" });
|
||||
startPrompt.createEl("div", { cls: "immerse-prompt-icon", text: "\u26A1" });
|
||||
startPrompt.createEl("div", { cls: "immerse-prompt-text", text: "Ready to focus?" });
|
||||
startPrompt.createEl("div", { cls: "immerse-prompt-hint", text: "Click \u25B6 on a task to start a Pomodoro session" });
|
||||
}
|
||||
}
|
||||
renderTaskList(container) {
|
||||
const listSection = container.createEl("div", { cls: "focus-task-list-section" });
|
||||
const filters = listSection.createEl("div", { cls: "focus-task-filters" });
|
||||
const listSection = container.createEl("div", { cls: "immerse-list-section" });
|
||||
const filters = listSection.createEl("div", { cls: "immerse-filters" });
|
||||
const filterOptions = [
|
||||
{ id: "all", label: "All Tasks" },
|
||||
{ id: "today", label: "Today" },
|
||||
@@ -426,7 +426,7 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
];
|
||||
filterOptions.forEach((opt) => {
|
||||
const btn = filters.createEl("button", {
|
||||
cls: `focus-task-filter-btn ${this.currentFilter === opt.id ? "active" : ""}`,
|
||||
cls: `immerse-filter-btn ${this.currentFilter === opt.id ? "active" : ""}`,
|
||||
text: opt.label
|
||||
});
|
||||
btn.addEventListener("click", () => {
|
||||
@@ -434,7 +434,7 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
this.refresh();
|
||||
});
|
||||
});
|
||||
const taskList = listSection.createEl("div", { cls: "focus-task-task-list" });
|
||||
const taskList = listSection.createEl("div", { cls: "immerse-task-list" });
|
||||
let tasks = this.plugin.data.tasks;
|
||||
if (this.currentFilter === "today") {
|
||||
tasks = this.plugin.getTodaysTasks();
|
||||
@@ -449,10 +449,10 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
return b.createdAt - a.createdAt;
|
||||
});
|
||||
if (tasks.length === 0) {
|
||||
const emptyState = taskList.createEl("div", { cls: "focus-task-empty-state" });
|
||||
emptyState.createEl("div", { cls: "focus-task-empty-icon", text: "\u{1F4DD}" });
|
||||
emptyState.createEl("div", { cls: "focus-task-empty-text", text: "No tasks yet" });
|
||||
emptyState.createEl("div", { cls: "focus-task-empty-hint", text: "Add a task to get started!" });
|
||||
const emptyState = taskList.createEl("div", { cls: "immerse-empty-state" });
|
||||
emptyState.createEl("div", { cls: "immerse-empty-icon", text: "\u{1F4DD}" });
|
||||
emptyState.createEl("div", { cls: "immerse-empty-text", text: "No tasks yet" });
|
||||
emptyState.createEl("div", { cls: "immerse-empty-hint", text: "Add a task to get started!" });
|
||||
} else {
|
||||
tasks.forEach((task) => this.renderTaskItem(taskList, task));
|
||||
}
|
||||
@@ -460,9 +460,9 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
renderTaskItem(container, task) {
|
||||
const list = this.plugin.settings.lists.find((l) => l.id === task.list);
|
||||
const taskEl = container.createEl("div", {
|
||||
cls: `focus-task-task-item ${task.completed ? "completed" : ""} ${task.isActive ? "active" : ""}`
|
||||
cls: `immerse-task-item ${task.completed ? "completed" : ""} ${task.isActive ? "active" : ""}`
|
||||
});
|
||||
const checkbox = taskEl.createEl("div", { cls: "focus-task-checkbox" });
|
||||
const checkbox = taskEl.createEl("div", { cls: "immerse-checkbox" });
|
||||
checkbox.innerHTML = task.completed ? "\u2713" : "";
|
||||
checkbox.style.borderColor = (list == null ? void 0 : list.color) || "#6366f1";
|
||||
if (task.completed) {
|
||||
@@ -475,48 +475,48 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
this.plugin.completeTask(task.id);
|
||||
}
|
||||
});
|
||||
const content = taskEl.createEl("div", { cls: "focus-task-task-content" });
|
||||
const taskHeader = content.createEl("div", { cls: "focus-task-task-header" });
|
||||
taskHeader.createEl("span", { cls: "focus-task-task-text", text: task.text });
|
||||
const content = taskEl.createEl("div", { cls: "immerse-task-content" });
|
||||
const taskHeader = content.createEl("div", { cls: "immerse-task-header" });
|
||||
taskHeader.createEl("span", { cls: "immerse-task-text", text: task.text });
|
||||
if (list) {
|
||||
const listBadge = taskHeader.createEl("span", {
|
||||
cls: "focus-task-list-badge",
|
||||
cls: "immerse-list-badge",
|
||||
text: `${list.icon} ${list.name}`
|
||||
});
|
||||
listBadge.style.backgroundColor = list.color + "20";
|
||||
listBadge.style.color = list.color;
|
||||
}
|
||||
const taskMeta = content.createEl("div", { cls: "focus-task-task-meta" });
|
||||
const taskMeta = content.createEl("div", { cls: "immerse-task-meta" });
|
||||
taskMeta.createEl("span", { text: `Est: ${this.plugin.formatTimeHuman(task.estimatedMinutes)}` });
|
||||
if (task.actualMinutes > 0) {
|
||||
const actualSpan = taskMeta.createEl("span");
|
||||
actualSpan.setText(`Actual: ${this.plugin.formatTimeHuman(task.actualMinutes)}`);
|
||||
if (task.actualMinutes > task.estimatedMinutes) {
|
||||
actualSpan.addClass("focus-task-overtime-text");
|
||||
actualSpan.addClass("immerse-overtime-text");
|
||||
}
|
||||
}
|
||||
const actions = taskEl.createEl("div", { cls: "focus-task-task-actions" });
|
||||
const actions = taskEl.createEl("div", { cls: "immerse-task-actions" });
|
||||
if (!task.completed) {
|
||||
const startBtn = actions.createEl("button", { cls: "focus-task-task-btn", attr: { "aria-label": "Start Pomodoro" } });
|
||||
const startBtn = actions.createEl("button", { cls: "immerse-task-btn", attr: { "aria-label": "Start Pomodoro" } });
|
||||
startBtn.innerHTML = "\u25B6";
|
||||
startBtn.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
this.plugin.startPomodoro(task.id);
|
||||
});
|
||||
const stopwatchBtn = actions.createEl("button", { cls: "focus-task-task-btn", attr: { "aria-label": "Start Stopwatch" } });
|
||||
const stopwatchBtn = actions.createEl("button", { cls: "immerse-task-btn", attr: { "aria-label": "Start Stopwatch" } });
|
||||
stopwatchBtn.innerHTML = "\u23F1";
|
||||
stopwatchBtn.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
this.plugin.startTimer(task.id);
|
||||
});
|
||||
}
|
||||
const editBtn = actions.createEl("button", { cls: "focus-task-task-btn", attr: { "aria-label": "Edit" } });
|
||||
const editBtn = actions.createEl("button", { cls: "immerse-task-btn", attr: { "aria-label": "Edit" } });
|
||||
editBtn.innerHTML = "\u270F\uFE0F";
|
||||
editBtn.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
new EditTaskModal(this.app, this.plugin, task).open();
|
||||
});
|
||||
const deleteBtn = actions.createEl("button", { cls: "focus-task-task-btn focus-task-delete-btn", attr: { "aria-label": "Delete" } });
|
||||
const deleteBtn = actions.createEl("button", { cls: "immerse-task-btn immerse-delete-btn", attr: { "aria-label": "Delete" } });
|
||||
deleteBtn.innerHTML = "\u{1F5D1}";
|
||||
deleteBtn.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
@@ -526,7 +526,7 @@ var FocusTaskView = class extends import_obsidian2.ItemView {
|
||||
};
|
||||
|
||||
// src/main.ts
|
||||
var FocusTaskPlugin = class extends import_obsidian3.Plugin {
|
||||
var ImmersePlugin = class extends import_obsidian3.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
// Timer state
|
||||
@@ -554,15 +554,15 @@ var FocusTaskPlugin = class extends import_obsidian3.Plugin {
|
||||
}
|
||||
});
|
||||
this.registerView(
|
||||
VIEW_TYPE_FOCUS_TASK,
|
||||
(leaf) => new FocusTaskView(leaf, this)
|
||||
VIEW_TYPE_IMMERSE,
|
||||
(leaf) => new ImmerseView(leaf, this)
|
||||
);
|
||||
this.addRibbonIcon("zap", "Open Focus Task", () => {
|
||||
this.addRibbonIcon("zap", "Open Immerse", () => {
|
||||
this.activateView();
|
||||
});
|
||||
this.addCommand({
|
||||
id: "open-focus-task",
|
||||
name: "Open Focus Task Panel",
|
||||
id: "open-immerse",
|
||||
name: "Open Immerse Panel",
|
||||
callback: () => this.activateView()
|
||||
});
|
||||
this.addCommand({
|
||||
@@ -585,7 +585,7 @@ var FocusTaskPlugin = class extends import_obsidian3.Plugin {
|
||||
name: "Complete Current Task",
|
||||
callback: () => this.completeActiveTask()
|
||||
});
|
||||
this.addSettingTab(new FocusTaskSettingTab(this.app, this));
|
||||
this.addSettingTab(new ImmerseSettingTab(this.app, this));
|
||||
this.createStatusBar();
|
||||
}
|
||||
onunload() {
|
||||
@@ -627,13 +627,13 @@ var FocusTaskPlugin = class extends import_obsidian3.Plugin {
|
||||
async activateView() {
|
||||
const { workspace } = this.app;
|
||||
let leaf = null;
|
||||
const leaves = workspace.getLeavesOfType(VIEW_TYPE_FOCUS_TASK);
|
||||
const leaves = workspace.getLeavesOfType(VIEW_TYPE_IMMERSE);
|
||||
if (leaves.length > 0) {
|
||||
leaf = leaves[0];
|
||||
} else {
|
||||
leaf = workspace.getRightLeaf(false);
|
||||
if (leaf) {
|
||||
await leaf.setViewState({ type: VIEW_TYPE_FOCUS_TASK, active: true });
|
||||
await leaf.setViewState({ type: VIEW_TYPE_IMMERSE, active: true });
|
||||
}
|
||||
}
|
||||
if (leaf) {
|
||||
@@ -931,7 +931,7 @@ var FocusTaskPlugin = class extends import_obsidian3.Plugin {
|
||||
this.statusBarEl.setText(`\u26A1 ${icon} ${timeStr} - ${taskName}${task && task.text.length > 20 ? "..." : ""}`);
|
||||
this.statusBarEl.addClass("focus-task-status-active");
|
||||
} else {
|
||||
this.statusBarEl.setText("\u26A1 Focus Task");
|
||||
this.statusBarEl.setText("\u26A1 Immerse");
|
||||
this.statusBarEl.removeClass("focus-task-status-active");
|
||||
}
|
||||
}
|
||||
@@ -1109,18 +1109,18 @@ var FocusTaskPlugin = class extends import_obsidian3.Plugin {
|
||||
return mins > 0 ? `${hours}hr ${mins}min` : `${hours}hr`;
|
||||
}
|
||||
refreshView() {
|
||||
const leaves = this.app.workspace.getLeavesOfType(VIEW_TYPE_FOCUS_TASK);
|
||||
const leaves = this.app.workspace.getLeavesOfType(VIEW_TYPE_IMMERSE);
|
||||
leaves.forEach((leaf) => {
|
||||
if (leaf.view instanceof FocusTaskView) {
|
||||
if (leaf.view instanceof ImmerseView) {
|
||||
leaf.view.refresh();
|
||||
}
|
||||
});
|
||||
}
|
||||
// Light refresh - only updates timer display without rebuilding DOM
|
||||
updateTimerDisplay() {
|
||||
const leaves = this.app.workspace.getLeavesOfType(VIEW_TYPE_FOCUS_TASK);
|
||||
const leaves = this.app.workspace.getLeavesOfType(VIEW_TYPE_IMMERSE);
|
||||
leaves.forEach((leaf) => {
|
||||
if (leaf.view instanceof FocusTaskView) {
|
||||
if (leaf.view instanceof ImmerseView) {
|
||||
leaf.view.updateTimerDisplay();
|
||||
}
|
||||
});
|
||||
@@ -1157,7 +1157,7 @@ var FocusTaskPlugin = class extends import_obsidian3.Plugin {
|
||||
};
|
||||
}
|
||||
};
|
||||
var FocusTaskSettingTab = class extends import_obsidian3.PluginSettingTab {
|
||||
var ImmerseSettingTab = class extends import_obsidian3.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
@@ -1165,7 +1165,7 @@ var FocusTaskSettingTab = class extends import_obsidian3.PluginSettingTab {
|
||||
display() {
|
||||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
containerEl.createEl("h1", { text: "\u26A1 Focus Task Settings" });
|
||||
containerEl.createEl("h1", { text: "\u26A1 Immerse Settings" });
|
||||
containerEl.createEl("h2", { text: "\u{1F345} Pomodoro Timer" });
|
||||
new import_obsidian3.Setting(containerEl).setName("Work Duration").setDesc("Length of each work session in minutes").addSlider((slider) => slider.setLimits(5, 60, 5).setValue(this.plugin.settings.pomodoroWorkMinutes).setDynamicTooltip().onChange(async (value) => {
|
||||
this.plugin.settings.pomodoroWorkMinutes = value;
|
||||
@@ -1243,14 +1243,14 @@ var FocusTaskSettingTab = class extends import_obsidian3.PluginSettingTab {
|
||||
this.display();
|
||||
}));
|
||||
containerEl.createEl("h2", { text: "\u{1F4D6} About" });
|
||||
const aboutDiv = containerEl.createDiv({ cls: "focus-task-about" });
|
||||
const aboutDiv = containerEl.createDiv({ cls: "immerse-about" });
|
||||
aboutDiv.innerHTML = `
|
||||
<p><strong>Focus Task</strong> is heavily inspired by <a href="https://www.blitzit.app/">Blitzit</a>,
|
||||
<p><strong>Immerse</strong> is heavily inspired by <a href="https://www.blitzit.app/">Blitzit</a>,
|
||||
a fantastic productivity app that combines task management with focused time tracking.</p>
|
||||
<p>This plugin brings similar functionality directly into Obsidian, allowing you to manage tasks,
|
||||
<p>This plugin brings similar functionality directly into Obsidian, allowing you to manage tasks,
|
||||
use the Pomodoro technique, and track your productivity without leaving your notes.</p>
|
||||
<p>
|
||||
<a href="https://git.cribdev.com/crib/focus-task">Source Code</a>
|
||||
<a href="https://git.cribdev.com/crib/immerse">Source Code</a>
|
||||
</p>
|
||||
`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user