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 ( ) ;
2022-09-27 22:15:16 +02:00
this . containerEl . createEl ( "h2" , { text : "Super Simple Time Tracker Settings" } ) ;
this . containerEl . createEl ( "p" , { text : "Settings coming soon!" } ) ;
2022-09-27 15:36:25 +02:00
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 : [ ] } ;
}
2022-09-27 21:44:28 +02:00
function displayTracker ( tracker , element , getSectionInfo ) {
let running = isRunning ( tracker ) ;
let btn = new import _obsidian2 . ButtonComponent ( element ) . setButtonText ( running ? "End" : "Start" ) . onClick ( ( ) => _ _async ( this , null , function * ( ) {
if ( running ) {
endEntry ( tracker ) ;
} else {
startEntry ( tracker , name . getValue ( ) ) ;
}
yield saveTracker ( tracker , this . app , getSectionInfo ( ) ) ;
} ) ) ;
btn . buttonEl . addClass ( "simple-time-tracker-btn" ) ;
let name = new import _obsidian2 . TextComponent ( element ) . setPlaceholder ( "Segment name" ) . setDisabled ( running ) ;
name . inputEl . addClass ( "simple-time-tracker-txt" ) ;
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:52:02 +02:00
let total = totalDiv . createEl ( "span" , { cls : "simple-time-tracker-timer-time" , text : "0s" } ) ;
2022-09-27 21:40:32 +02:00
totalDiv . createEl ( "span" , { text : "Total" } ) ;
2022-09-27 21:52:02 +02:00
if ( tracker . entries . length > 0 ) {
let table = element . createEl ( "table" , { cls : "simple-time-tracker-table" } ) ;
table . createEl ( "tr" ) . append ( createEl ( "th" , { text : "Segment" } ) , createEl ( "th" , { text : "Start time" } ) , createEl ( "th" , { text : "End time" } ) , createEl ( "th" , { text : "Total" } ) ) ;
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 ) ) } ) ;
}
2022-09-27 21:23:36 +02:00
}
}
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 17:03:44 +02:00
let tracker = loadTracker ( s ) ;
2022-09-27 21:44:28 +02:00
e . empty ( ) ;
displayTracker ( tracker , e , ( ) => i . getSectionInfo ( e ) ) ;
2022-09-27 15:36:25 +02:00
} ) ;
2022-09-27 21:52:02 +02:00
this . addCommand ( {
id : ` insert-simple-time-tracker ` ,
2022-09-27 22:15:16 +02:00
name : ` Insert Time Tracker ` ,
2022-09-27 21:52:02 +02:00
editorCallback : ( e , _ ) => {
e . replaceSelection ( "```simple-time-tracker\n```\n" ) ;
}
} ) ;
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 22:15:16 +02:00
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9zZXR0aW5ncy10YWIudHMiLCAic3JjL3RyYWNrZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFBsdWdpbiB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MsIFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3MtdGFiXCI7XHJcbmltcG9ydCB7IGRpc3BsYXlUcmFja2VyLCBsb2FkVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3M7XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0dGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKFwic2ltcGxlLXRpbWUtdHJhY2tlclwiLCAocywgZSwgaSkgPT4ge1xyXG5cdFx0XHRsZXQgdHJhY2tlciA9IGxvYWRUcmFja2VyKHMpO1xyXG5cdFx0XHRlLmVtcHR5KCk7XHJcblx0XHRcdGRpc3BsYXlUcmFja2VyKHRyYWNrZXIsIGUsICgpID0+IGkuZ2V0U2VjdGlvbkluZm8oZSkpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6IGBpbnNlcnQtc2ltcGxlLXRpbWUtdHJhY2tlcmAsXHJcblx0XHRcdG5hbWU6IGBJbnNlcnQgVGltZSBUcmFja2VyYCxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlLCBfKSA9PiB7XHJcblx0XHRcdFx0ZS5yZXBsYWNlU2VsZWN0aW9uKFwiYGBgc2ltcGxlLXRpbWUtdHJhY2tlclxcbmBgYFxcblwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcbn1cclxuIiwgImV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3MgPSB7XHJcblxyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzIHtcclxuXHJcbn1cclxuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgU2ltcGxlVGltZVRyYWNrZXJQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3NUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcbiAgICBwbHVnaW46IFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luKSB7XHJcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiU3VwZXIgU2ltcGxlIFRpbWUgVHJhY2tlciBTZXR0aW5nc1wiIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiU2V0dGluZ3MgY29taW5nIHNvb24hXCIgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiSWYgeW91IGxpa2UgdGhpcyBwbHVnaW4gYW5kIHdhbnQgdG8gc3VwcG9ydCBpdHMgZGV2ZWxvcG1lbnQsIHlvdSBjYW4gZG8gc28gdGhyb3VnaCBteSB3ZWJzaXRlIGJ5IGNsaWNraW5nIHRoaXMgZmFuY3kgaW1hZ2UhXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vZWxscGVjay5kZS9zdXBwb3J0XCIgfSlcclxuICAgICAgICAgICAgLmNyZWF0ZUVsKFwiaW1nXCIsIHsgYXR0cjogeyBzcmM6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3Jlcy9nZW5lcmFsc3VwcG9ydC5wbmdcIiB9LCBjbHM6IFwic2ltcGxlLXRpbWUtdHJhY2tlci1zdXBwb3J0XCIgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IG1vbWVudCwgQXBwLCBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiwgQnV0dG9uQ29tcG9uZW50LCBUZXh0Q29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHJhY2tlciB7XHJcbiAgICBlbnRyaWVzOiBFbnRyeVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVudHJ5IHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHN0YXJ0VGltZTogbnVtYmVyO1xyXG4gICAgZW5kVGltZTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbnRyeSh0cmFja2VyOiBUcmFja2VyLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghbmFtZSlcclxuICAgICAgICBuYW1lID0gYFNlZ21lbnQgJHt0cmFja2VyLmVudHJpZXMubGVuZ3RoICsgMX1gO1xyXG4gICAgbGV0IGVudHJ5OiBFbnRyeSA9IHsgbmFtZTogbmFtZSwgc3RhcnRUaW1lOiBtb