ObsidianSimpleTimeTracker/test-vault/.obsidian/plugins/obsidian-simple-time-tracker/main.js
2022-09-27 17:03:44 +02:00

164 lines
15 KiB
JavaScript

/*
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
});
var import_obsidian2 = __toModule(require("obsidian"));
// 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" });
}
};
// src/tracker.ts
function startEntry(tracker, name) {
let entry = { name, startTime: Date.now(), endTime: null };
tracker.entries.push(entry);
}
function endEntry(tracker) {
let last = tracker.entries.last();
last.endTime = Date.now();
}
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}`);
}
}
return { entries: [] };
}
function displayTracker(tracker, element) {
let list = element.createEl("ul");
for (let entry of tracker.entries)
list.createEl("li", { text: displayEntry(entry) });
}
function displayEntry(entry) {
let ret = "";
if (entry.name)
ret += `${entry.name}: `;
let start = new Date(entry.startTime);
ret += `${start.toLocaleString()} - `;
if (entry.endTime) {
let end = new Date(entry.endTime);
ret += `${end.toLocaleString()}`;
}
return ret;
}
// src/main.ts
var SimpleTimeTrackerPlugin = class extends import_obsidian2.Plugin {
onload() {
return __async(this, null, function* () {
yield this.loadSettings();
this.addSettingTab(new SimpleTimeTrackerSettingsTab(this.app, this));
this.registerMarkdownCodeBlockProcessor("simple-time-tracker", (s, e, i) => {
e.empty();
e.addClass("simple-time-tracker");
let tracker = loadTracker(s);
let name = new import_obsidian2.TextComponent(e).setPlaceholder("Name this segment");
new import_obsidian2.ButtonComponent(e).setButtonText("Start").onClick(() => __async(this, null, function* () {
if (isRunning(tracker)) {
endEntry(tracker);
} else {
startEntry(tracker, name.getValue());
}
name.setValue("");
yield saveTracker(tracker, this.app, i.getSectionInfo(e));
}));
displayTracker(tracker, e);
});
});
}
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);
});
}
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9zZXR0aW5ncy10YWIudHMiLCAic3JjL3RyYWNrZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCwgUGx1Z2luLCBUZXh0Q29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgU2ltcGxlVGltZVRyYWNrZXJTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3NUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgZGlzcGxheVRyYWNrZXIsIGVuZEVudHJ5LCBpc1J1bm5pbmcsIGxvYWRUcmFja2VyLCBzYXZlVHJhY2tlciwgc3RhcnRFbnRyeSwgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3M7XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0dGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKFwic2ltcGxlLXRpbWUtdHJhY2tlclwiLCAocywgZSwgaSkgPT4ge1xyXG5cdFx0XHRlLmVtcHR5KCk7XHJcblx0XHRcdGUuYWRkQ2xhc3MoXCJzaW1wbGUtdGltZS10cmFja2VyXCIpO1xyXG5cclxuXHRcdFx0bGV0IHRyYWNrZXIgPSBsb2FkVHJhY2tlcihzKTtcclxuXHJcblx0XHRcdGxldCBuYW1lID0gbmV3IFRleHRDb21wb25lbnQoZSlcclxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoXCJOYW1lIHRoaXMgc2VnbWVudFwiKTtcclxuXHRcdFx0bmV3IEJ1dHRvbkNvbXBvbmVudChlKVxyXG5cdFx0XHRcdC5zZXRCdXR0b25UZXh0KFwiU3RhcnRcIilcclxuXHRcdFx0XHQub25DbGljayhhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaXNSdW5uaW5nKHRyYWNrZXIpKSB7XHJcblx0XHRcdFx0XHRcdGVuZEVudHJ5KHRyYWNrZXIpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0c3RhcnRFbnRyeSh0cmFja2VyLCBuYW1lLmdldFZhbHVlKCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bmFtZS5zZXRWYWx1ZShcIlwiKTtcclxuXHRcdFx0XHRcdGF3YWl0IHNhdmVUcmFja2VyKHRyYWNrZXIsIHRoaXMuYXBwLCBpLmdldFNlY3Rpb25JbmZvKGUpKTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdGRpc3BsYXlUcmFja2VyKHRyYWNrZXIsIGUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcbn1cclxuIiwgImV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3MgPSB7XHJcblxyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzIHtcclxuXHJcbn1cclxuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgU2ltcGxlVGltZVRyYWNrZXJQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3NUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcbiAgICBwbHVnaW46IFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luKSB7XHJcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiU2ltcGxlIFRpbWUgVHJhY2tlciBTZXR0aW5nc1wiIH0pO1xyXG5cclxuICAgICAgICAvLyBUT0RPIHNldHRpbmdzIGdvIGhlcmVcclxuXHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImhyXCIpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJJZiB5b3UgbGlrZSB0aGlzIHBsdWdpbiBhbmQgd2FudCB0byBzdXBwb3J0IGl0cyBkZXZlbG9wbWVudCwgeW91IGNhbiBkbyBzbyB0aHJvdWdoIG15IHdlYnNpdGUgYnkgY2xpY2tpbmcgdGhpcyBmYW5jeSBpbWFnZSFcIiB9KTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiYVwiLCB7IGhyZWY6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3N1cHBvcnRcIiB9KVxyXG4gICAgICAgICAgICAuY3JlYXRlRWwoXCJpbWdcIiwgeyBhdHRyOiB7IHNyYzogXCJodHRwczovL2VsbHBlY2suZGUvcmVzL2dlbmVyYWxzdXBwb3J0LnBuZ1wiIH0sIGNsczogXCJzaW1wbGUtdGltZS10cmFja2VyLXN1cHBvcnRcIiB9KTtcclxuICAgIH1cclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG5leHBvcnQgY2xhc3MgVHJhY2tlciB7XG4gICAgZW50cmllczogRW50cnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRyeSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN0YXJ0VGltZTogbnVtYmVyO1xuICAgIGVuZFRpbWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RW50cnkodHJhY2tlcjogVHJhY2tlciwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gZGF0ZSBjb25zdHJ1Y3RvciByZXR1cm5zIHRoZSBjdXJyZW50IGRhdGVcbiAgICBsZXQgZW50cnk6IEVudHJ5ID0geyBuYW1lOiBuYW1lLCBzdGFydFRpbWU6IERhdGUubm93KCksIGVuZFRpbWU6IG51bGwgfTtcbiAgICB0cmFja2VyLmVudHJpZXMucHVzaChlbnRyeSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZW5kRW50cnkodHJhY2tlcjogVHJhY2tlcik6IHZvaWQge1xuICAgIGxldCBsYXN0ID0gdHJhY2tlci5lbnRyaWVzLmxhc3QoKTtcbiAgICBsYXN0LmVuZFRpbWUgPSBEYXRlLm5vdygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSdW5uaW5nKHRyYWNrZXI6IFRyYWNrZXIpOiBib29sZWFuIHtcbiAgICBsZXQgbGFzdCA9IHRyYWNrZXIuZW50cmllcy5sYXN0KCk7XG4gICAgcmV0dXJuIGxhc3QgIT0gbnVsbCAmJiAhbGFzdC5lbmRUaW1lO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVRyYWNrZXIodHJhY2tlcjogVHJhY2tlciwgYXBwOiBBcHAsIHNlY3Rpb246IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGZpbGUgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcbiAgICBsZXQgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuXG4gICAgLy8gZmlndXJlIG91dCB3aGF0IHBhcnQgb2YgdGhlIGNvbnRlbnQgd2UgaGF2ZSB0byBlZGl0XG4gICAgbGV0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcbiAgICBsZXQgcHJldiA9IGxpbmVzLmZpbHRlcigoXywgaSkgPT4gaSA8PSBzZWN0aW9uLmxpbmVTdGFydCkuam9pbihcIlxcblwiKTtcbiAgICBsZXQgbmV4dCA9IGxpbmVzLmZpbHRlcigoXywgaSkgPT4gaSA+PSBzZWN0aW9uLmxpbmVFbmQpLmpvaW4oXCJcXG5cIik7XG4gICAgLy8gZWRpdCBvbmx5IHRoZSBjb2RlIGJsb2NrIGNvbnRlbnQsIGxlYXZlIHRoZSByZXN0IHVudG91Y2hlZFxuICAgIGNvbnRlbnQgPSBgJHtwcmV2fVxcbiR7SlNPTi5zdHJpbmdpZnkodHJhY2tlcil9XFxuJHtuZXh0fWA7XG5cbiAgICBhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIGNvbnRlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFRyYWNrZXIoanNvbjogc3RyaW5nKTogVHJhY2tlciB7XG4gICAgaWYgKGpzb24pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIHBhcnNlIFRyYWNrZXIgZnJvbSAke2pzb259YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgZW50cmllczogW10gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlUcmFja2VyKHRyYWNrZXI6IFRyYWNrZXIsIGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgbGV0IGxpc3QgPSBlbGVtZW50LmNyZWF0ZUVsKFwidWxcIik7XG4gICAgZm9yIChsZXQgZW50cnkgb2YgdHJhY2tlci5lbnRyaWVzKVxuICAgICAgICBsaXN0LmNyZWF0ZUVsKFwibGlcIiwgeyB0ZXh0OiBkaXNwbGF5RW50cnkoZW50cnkpIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlFbnRyeShlbnRyeTogRW50cnkpOiBzdHJpbmcge1xuICAgIC8vIFRPRE8gYWRkIGFuIG9wdGlvbiB0byBkaXNwbGF5IHRoaXMgYXMgYW4gaW50ZXJ2YWwgcmF0aGVyIHRoYW4gYSBmcm9tIC0gdG8gc3RyaW5nXG4gICAgbGV0IHJldCA9IFwiXCI7XG4gICAgaWYgKGVudHJ5Lm5hbWUpXG4gICAgICAgIHJldCArPSBgJHtlbnRyeS5uYW1lfTogYDtcblxuICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKGVudHJ5LnN0YXJ0VGltZSk7XG4gICAgcmV0ICs9IGAke3N0YXJ0LnRvTG9jYWxlU3RyaW5nKCl9IC0gYDtcblxuICAgIGlmIChlbnRyeS5lbmRUaW1lKSB7XG4gICAgICAgIGxldCBlbmQgPSBuZXcgRGF0ZShlbnRyeS5lbmRUaW1lKTtcbiAgICAgICAgcmV0ICs9IGAke2VuZC50b0xvY2FsZVN0cmluZygpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQSx1QkFBdUQ7OztBQ0FoRCxJQUFNLGtCQUE2Qzs7O0FDQTFELHNCQUFzQztBQUcvQixpREFBMkMsaUNBQWlCO0FBQUEsRUFJL0QsWUFBWSxLQUFVLFFBQWlDO0FBQ25ELFVBQU0sS0FBSztBQUNYLFNBQUss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