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" } ) ;
let current = currentDiv . createEl ( "span" , { cls : "simple-time-tracker-timer-time" , text : "00:00" } ) ;
currentDiv . createEl ( "span" , { text : "CURRENT" } ) ;
let totalDiv = timer . createEl ( "div" , { cls : "simple-time-tracker-timer" } ) ;
let total = totalDiv . createEl ( "span" , { cls : "simple-time-tracker-timer-time" , text : "00:00" } ) ;
totalDiv . createEl ( "span" , { text : "TOTAL" } ) ;
let table = element . createEl ( "table" , { cls : "simple-time-tracker-table" } ) ;
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 )
ret += duration . hours ( ) . toString ( ) . padStart ( 2 , "0" ) + ":" ;
ret += duration . minutes ( ) . toString ( ) . padStart ( 2 , "0" ) + ":" + duration . seconds ( ) . toString ( ) . padStart ( 2 , "0" ) ;
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 ) ) ) ;
}
currentDiv . toggleClass ( "simple-time-tracker-grayed" , ! currEntry || ! ! currEntry . endTime ) ;
}
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:23:36 +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:23:36 +02:00
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9zZXR0aW5ncy10YWIudHMiLCAic3JjL3RyYWNrZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCwgUGx1Z2luLCBUZXh0Q29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgU2ltcGxlVGltZVRyYWNrZXJTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3NUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgZGlzcGxheVRyYWNrZXIsIGVuZEVudHJ5LCBpc1J1bm5pbmcsIGxvYWRUcmFja2VyLCBzYXZlVHJhY2tlciwgc3RhcnRFbnRyeSwgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3M7XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0dGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKFwic2ltcGxlLXRpbWUtdHJhY2tlclwiLCAocywgZSwgaSkgPT4ge1xyXG5cdFx0XHRlLmVtcHR5KCk7XHJcblxyXG5cdFx0XHRsZXQgdHJhY2tlciA9IGxvYWRUcmFja2VyKHMpO1xyXG5cdFx0XHRsZXQgcnVubmluZyA9IGlzUnVubmluZyh0cmFja2VyKTtcclxuXHJcblx0XHRcdGxldCBidG4gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGUpXHJcblx0XHRcdFx0LnNldEJ1dHRvblRleHQocnVubmluZyA/IFwiRW5kXCIgOiBcIlN0YXJ0XCIpXHJcblx0XHRcdFx0Lm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJ1bm5pbmcpIHtcclxuXHRcdFx0XHRcdFx0ZW5kRW50cnkodHJhY2tlcik7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRzdGFydEVudHJ5KHRyYWNrZXIsIG5hbWUuZ2V0VmFsdWUoKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRhd2FpdCBzYXZlVHJhY2tlcih0cmFja2VyLCB0aGlzLmFwcCwgaS5nZXRTZWN0aW9uSW5mbyhlKSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdGJ0bi5idXR0b25FbC5hZGRDbGFzcyhcInNpbXBsZS10aW1lLXRyYWNrZXItYnRuXCIpO1xyXG5cclxuXHRcdFx0bGV0IG5hbWUgPSBuZXcgVGV4dENvbXBvbmVudChlKVxyXG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIlNlZ21lbnQgTmFtZVwiKVxyXG5cdFx0XHRcdC5zZXREaXNhYmxlZChydW5uaW5nKTtcclxuXHRcdFx0bmFtZS5pbnB1dEVsLmFkZENsYXNzKFwic2ltcGxlLXRpbWUtdHJhY2tlci10eHRcIik7XHJcblxyXG5cdFx0XHRkaXNwbGF5VHJhY2tlcih0cmFja2VyLCBlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG59XHJcbiIsICJleHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzID0ge1xyXG5cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlVGltZVRyYWNrZXJTZXR0aW5ncyB7XHJcblxyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luIGZyb20gXCIuL21haW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblxyXG4gICAgcGx1Z2luOiBTaW1wbGVUaW1lVHJhY2tlclBsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBTaW1wbGVUaW1lVHJhY2tlclBsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIlNpbXBsZSBUaW1lIFRyYWNrZXIgU2V0dGluZ3NcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBzZXR0aW5ncyBnbyBoZXJlXHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiSWYgeW91IGxpa2UgdGhpcyBwbHVnaW4gYW5kIHdhbnQgdG8gc3VwcG9ydCBpdHMgZGV2ZWxvcG1lbnQsIHlvdSBjYW4gZG8gc28gdGhyb3VnaCBteSB3ZWJzaXRlIGJ5IGNsaWNraW5nIHRoaXMgZmFuY3kgaW1hZ2UhXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vZWxscGVjay5kZS9zdXBwb3J0XCIgfSlcclxuICAgICAgICAgICAgLmNyZWF0ZUVsKFwiaW1nXCIsIHsgYXR0cjogeyBzcmM6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3Jlcy9nZW5lcmFsc3VwcG9ydC5wbmdcIiB9LCBjbHM6IFwic2ltcGxlLXRpbWUtdHJhY2tlci1zdXBwb3J0XCIgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IG1vbWVudCwgQXBwLCBNYXJrZG93b