ObsidianSimpleTimeTracker/test-vault/.obsidian/plugins/obsidian-simple-time-tracker/main.js

207 lines
23 KiB
JavaScript
Raw Normal View History

2022-09-27 15:36:25 +02:00
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
__markAsModule(target);
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && key !== "default")
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
}
return target;
};
var __toModule = (module2) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// src/main.ts
__export(exports, {
default: () => SimpleTimeTrackerPlugin
});
2022-09-27 21:23:36 +02:00
var import_obsidian3 = __toModule(require("obsidian"));
2022-09-27 15:36:25 +02:00
// src/settings.ts
var defaultSettings = {};
// src/settings-tab.ts
var import_obsidian = __toModule(require("obsidian"));
var SimpleTimeTrackerSettingsTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
this.containerEl.empty();
this.containerEl.createEl("h2", { text: "Simple Time Tracker Settings" });
this.containerEl.createEl("hr");
this.containerEl.createEl("p", { text: "If you like this plugin and want to support its development, you can do so through my website by clicking this fancy image!" });
this.containerEl.createEl("a", { href: "https://ellpeck.de/support" }).createEl("img", { attr: { src: "https://ellpeck.de/res/generalsupport.png" }, cls: "simple-time-tracker-support" });
}
};
2022-09-27 16:06:40 +02:00
// src/tracker.ts
2022-09-27 21:23:36 +02:00
var import_obsidian2 = __toModule(require("obsidian"));
2022-09-27 17:03:44 +02:00
function startEntry(tracker, name) {
2022-09-27 21:23:36 +02:00
if (!name)
name = `Segment ${tracker.entries.length + 1}`;
let entry = { name, startTime: (0, import_obsidian2.moment)().unix(), endTime: null };
2022-09-27 17:03:44 +02:00
tracker.entries.push(entry);
}
function endEntry(tracker) {
let last = tracker.entries.last();
2022-09-27 21:23:36 +02:00
last.endTime = (0, import_obsidian2.moment)().unix();
2022-09-27 17:03:44 +02:00
}
function isRunning(tracker) {
let last = tracker.entries.last();
return last != null && !last.endTime;
}
function saveTracker(tracker, app, section) {
return __async(this, null, function* () {
let file = app.workspace.getActiveFile();
let content = yield app.vault.cachedRead(file);
let lines = content.split("\n");
let prev = lines.filter((_, i) => i <= section.lineStart).join("\n");
let next = lines.filter((_, i) => i >= section.lineEnd).join("\n");
content = `${prev}
${JSON.stringify(tracker)}
${next}`;
yield app.vault.modify(file, content);
});
}
function loadTracker(json) {
if (json) {
try {
return JSON.parse(json);
} catch (e) {
console.log(`Failed to parse Tracker from ${json}`);
2022-09-27 16:06:40 +02:00
}
}
2022-09-27 17:03:44 +02:00
return { entries: [] };
}
function displayTracker(tracker, element) {
2022-09-27 19:33:34 +02:00
let timer = element.createDiv({ cls: "simple-time-tracker-timers" });
2022-09-27 21:23:36 +02:00
let currentDiv = timer.createEl("div", { cls: "simple-time-tracker-timer" });
2022-09-27 21:35:26 +02:00
let current = currentDiv.createEl("span", { cls: "simple-time-tracker-timer-time" });
2022-09-27 21:40:32 +02:00
currentDiv.createEl("span", { text: "Current" });
2022-09-27 21:23:36 +02:00
let totalDiv = timer.createEl("div", { cls: "simple-time-tracker-timer" });
2022-09-27 21:35:26 +02:00
let total = totalDiv.createEl("span", { cls: "simple-time-tracker-timer-time" });
2022-09-27 21:40:32 +02:00
totalDiv.createEl("span", { text: "Total" });
2022-09-27 21:23:36 +02:00
let table = element.createEl("table", { cls: "simple-time-tracker-table" });
2022-09-27 21:40:32 +02:00
table.createEl("tr").append(createEl("th", { text: "Segment" }), createEl("th", { text: "Start time" }), createEl("th", { text: "End time" }), createEl("th", { text: "Total" }));
2022-09-27 21:23:36 +02:00
for (let entry of tracker.entries) {
let row = table.createEl("tr");
row.createEl("td", { text: entry.name });
row.createEl("td", { text: import_obsidian2.moment.unix(entry.startTime).format("YY-MM-DD hh:mm:ss") });
if (entry.endTime) {
row.createEl("td", { text: import_obsidian2.moment.unix(entry.endTime).format("YY-MM-DD hh:mm:ss") });
let duration = import_obsidian2.moment.unix(entry.endTime).diff(import_obsidian2.moment.unix(entry.startTime));
row.createEl("td", { text: getCountdownDisplay(import_obsidian2.moment.duration(duration)) });
}
}
setCountdownValues(tracker, current, total, currentDiv);
let intervalId = window.setInterval(() => {
if (!element.isConnected) {
window.clearInterval(intervalId);
return;
}
setCountdownValues(tracker, current, total, currentDiv);
}, 1e3);
2022-09-27 17:03:44 +02:00
}
2022-09-27 21:23:36 +02:00
function getCountdownDisplay(duration) {
2022-09-27 17:03:44 +02:00
let ret = "";
2022-09-27 21:23:36 +02:00
if (duration.hours() > 0)
2022-09-27 21:35:26 +02:00
ret += duration.hours() + "h ";
if (duration.minutes() > 0)
ret += duration.minutes() + "m ";
ret += duration.seconds() + "s";
2022-09-27 17:03:44 +02:00
return ret;
}
2022-09-27 21:23:36 +02:00
function setCountdownValues(tracker, current, total, currentDiv) {
let currEntry = tracker.entries.last();
if (currEntry) {
let currDuration = (0, import_obsidian2.moment)().diff(import_obsidian2.moment.unix(currEntry.startTime));
if (!currEntry.endTime)
current.setText(getCountdownDisplay(import_obsidian2.moment.duration(currDuration)));
let totalDuration = 0;
for (let entry of tracker.entries) {
if (entry == currEntry && !currEntry.endTime) {
totalDuration += currDuration;
} else {
totalDuration += import_obsidian2.moment.unix(entry.endTime).diff(import_obsidian2.moment.unix(entry.startTime));
}
}
total.setText(getCountdownDisplay(import_obsidian2.moment.duration(totalDuration)));
}
2022-09-27 21:35:26 +02:00
currentDiv.hidden = !currEntry || !!currEntry.endTime;
2022-09-27 21:23:36 +02:00
}
2022-09-27 16:06:40 +02:00
2022-09-27 15:36:25 +02:00
// src/main.ts
2022-09-27 21:23:36 +02:00
var SimpleTimeTrackerPlugin = class extends import_obsidian3.Plugin {
2022-09-27 15:36:25 +02:00
onload() {
return __async(this, null, function* () {
yield this.loadSettings();
this.addSettingTab(new SimpleTimeTrackerSettingsTab(this.app, this));
2022-09-27 16:06:40 +02:00
this.registerMarkdownCodeBlockProcessor("simple-time-tracker", (s, e, i) => {
2022-09-27 15:36:25 +02:00
e.empty();
2022-09-27 17:03:44 +02:00
let tracker = loadTracker(s);
2022-09-27 19:33:34 +02:00
let running = isRunning(tracker);
2022-09-27 21:23:36 +02:00
let btn = new import_obsidian3.ButtonComponent(e).setButtonText(running ? "End" : "Start").onClick(() => __async(this, null, function* () {
2022-09-27 19:33:34 +02:00
if (running) {
2022-09-27 17:03:44 +02:00
endEntry(tracker);
} else {
startEntry(tracker, name.getValue());
}
yield saveTracker(tracker, this.app, i.getSectionInfo(e));
}));
2022-09-27 19:33:34 +02:00
btn.buttonEl.addClass("simple-time-tracker-btn");
2022-09-27 21:40:32 +02:00
let name = new import_obsidian3.TextComponent(e).setPlaceholder("Segment name").setDisabled(running);
2022-09-27 19:33:34 +02:00
name.inputEl.addClass("simple-time-tracker-txt");
2022-09-27 17:03:44 +02:00
displayTracker(tracker, e);
2022-09-27 15:36:25 +02:00
});
});
}
loadSettings() {
return __async(this, null, function* () {
this.settings = Object.assign({}, defaultSettings, yield this.loadData());
});
}
saveSettings() {
return __async(this, null, function* () {
yield this.saveData(this.settings);
});
}
};
2022-09-27 21:40:32 +02:00
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9zZXR0aW5ncy10YWIudHMiLCAic3JjL3RyYWNrZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCwgUGx1Z2luLCBUZXh0Q29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgU2ltcGxlVGltZVRyYWNrZXJTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3NUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgZGlzcGxheVRyYWNrZXIsIGVuZEVudHJ5LCBpc1J1bm5pbmcsIGxvYWRUcmFja2VyLCBzYXZlVHJhY2tlciwgc3RhcnRFbnRyeSwgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3M7XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0dGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKFwic2ltcGxlLXRpbWUtdHJhY2tlclwiLCAocywgZSwgaSkgPT4ge1xyXG5cdFx0XHRlLmVtcHR5KCk7XHJcblxyXG5cdFx0XHRsZXQgdHJhY2tlciA9IGxvYWRUcmFja2VyKHMpO1xyXG5cdFx0XHRsZXQgcnVubmluZyA9IGlzUnVubmluZyh0cmFja2VyKTtcclxuXHJcblx0XHRcdGxldCBidG4gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGUpXHJcblx0XHRcdFx0LnNldEJ1dHRvblRleHQocnVubmluZyA/IFwiRW5kXCIgOiBcIlN0YXJ0XCIpXHJcblx0XHRcdFx0Lm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJ1bm5pbmcpIHtcclxuXHRcdFx0XHRcdFx0ZW5kRW50cnkodHJhY2tlcik7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRzdGFydEVudHJ5KHRyYWNrZXIsIG5hbWUuZ2V0VmFsdWUoKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRhd2FpdCBzYXZlVHJhY2tlcih0cmFja2VyLCB0aGlzLmFwcCwgaS5nZXRTZWN0aW9uSW5mbyhlKSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdGJ0bi5idXR0b25FbC5hZGRDbGFzcyhcInNpbXBsZS10aW1lLXRyYWNrZXItYnRuXCIpO1xyXG5cclxuXHRcdFx0bGV0IG5hbWUgPSBuZXcgVGV4dENvbXBvbmVudChlKVxyXG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIlNlZ21lbnQgbmFtZVwiKVxyXG5cdFx0XHRcdC5zZXREaXNhYmxlZChydW5uaW5nKTtcclxuXHRcdFx0bmFtZS5pbnB1dEVsLmFkZENsYXNzKFwic2ltcGxlLXRpbWUtdHJhY2tlci10eHRcIik7XHJcblxyXG5cdFx0XHRkaXNwbGF5VHJhY2tlcih0cmFja2VyLCBlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG59XHJcbiIsICJleHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzID0ge1xyXG5cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlVGltZVRyYWNrZXJTZXR0aW5ncyB7XHJcblxyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luIGZyb20gXCIuL21haW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblxyXG4gICAgcGx1Z2luOiBTaW1wbGVUaW1lVHJhY2tlclBsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBTaW1wbGVUaW1lVHJhY2tlclBsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIlNpbXBsZSBUaW1lIFRyYWNrZXIgU2V0dGluZ3NcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBzZXR0aW5ncyBnbyBoZXJlXHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiSWYgeW91IGxpa2UgdGhpcyBwbHVnaW4gYW5kIHdhbnQgdG8gc3VwcG9ydCBpdHMgZGV2ZWxvcG1lbnQsIHlvdSBjYW4gZG8gc28gdGhyb3VnaCBteSB3ZWJzaXRlIGJ5IGNsaWNraW5nIHRoaXMgZmFuY3kgaW1hZ2UhXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vZWxscGVjay5kZS9zdXBwb3J0XCIgfSlcclxuICAgICAgICAgICAgLmNyZWF0ZUVsKFwiaW1nXCIsIHsgYXR0cjogeyBzcmM6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3Jlcy9nZW5lcmFsc3VwcG9ydC5wbmdcIiB9LCBjbHM6IFwic2ltcGxlLXRpbWUtdHJhY2tlci1zdXBwb3J0XCIgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IG1vbWVudCwgQXBwLCBNYXJrZG93b