generated from DNDs/dnd-template
222 lines
43 KiB
JavaScript
222 lines
43 KiB
JavaScript
|
/*
|
||
|
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
|
||
|
if you want to view the source visit the plugins github repository
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
var obsidian = require('obsidian');
|
||
|
|
||
|
/*! *****************************************************************************
|
||
|
Copyright (c) Microsoft Corporation.
|
||
|
|
||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||
|
purpose with or without fee is hereby granted.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||
|
PERFORMANCE OF THIS SOFTWARE.
|
||
|
***************************************************************************** */
|
||
|
|
||
|
function __awaiter(thisArg, _arguments, P, generator) {
|
||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/* Changelog:
|
||
|
*
|
||
|
* V1.0.0 - Initial version
|
||
|
* V1.1.0 - Migrated from dateformat to moment.js
|
||
|
* V1.2.0 - Introduced option for linebreak after insert
|
||
|
*
|
||
|
*/
|
||
|
const DEFAULT_SETTINGS = {
|
||
|
timeStampFormat: 'hh:mm:ss',
|
||
|
dateStampFormat: 'YYYY-MM-DD',
|
||
|
lastFormat: '',
|
||
|
newLine: false
|
||
|
};
|
||
|
// logThreshold: 0 ... only error messages
|
||
|
// 9 ... verbose output
|
||
|
const logThreshold = 9;
|
||
|
const logger = (logString, logLevel = 0) => { if (logLevel <= logThreshold)
|
||
|
console.log('TimeStamper: ' + logString); };
|
||
|
const version = '1.2.0-0001';
|
||
|
class TimeStamperPlugin extends obsidian.Plugin {
|
||
|
onload() {
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
logger('Loading Plugin v' + version, 9);
|
||
|
yield this.loadSettings();
|
||
|
this.addSettingTab(new TimeStamperSettingTab(this.app, this));
|
||
|
this.addCommand({
|
||
|
id: 'obsidian-custom-timestamp',
|
||
|
name: 'Insert custom time/date stamp',
|
||
|
editorCallback: (editor) => {
|
||
|
new TimeStamperModal(this.app, editor, this.settings, this).open();
|
||
|
},
|
||
|
});
|
||
|
this.addCommand({
|
||
|
id: 'obsidian-fast-timestamp',
|
||
|
name: 'Insert preconfigured time stamp',
|
||
|
editorCallback: (editor) => {
|
||
|
const now = new Date();
|
||
|
const stamp = obsidian.moment(now).format(this.settings.timeStampFormat);
|
||
|
if (this.settings.newLine) {
|
||
|
editor.replaceSelection(stamp + '\n');
|
||
|
logger('new line', 9);
|
||
|
}
|
||
|
else {
|
||
|
editor.replaceSelection(stamp);
|
||
|
logger('no new line');
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
this.addCommand({
|
||
|
id: 'obsidian-fast-datestamp',
|
||
|
name: 'Insert preconfigured date stamp',
|
||
|
editorCallback: (editor) => {
|
||
|
const now = new Date();
|
||
|
const stamp = obsidian.moment(now).format(this.settings.dateStampFormat);
|
||
|
if (this.settings.newLine) {
|
||
|
editor.replaceSelection(stamp + '\n');
|
||
|
logger('new line', 9);
|
||
|
}
|
||
|
else {
|
||
|
editor.replaceSelection(stamp);
|
||
|
logger('no new line');
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
onunload() {
|
||
|
logger('Bye!', 9);
|
||
|
}
|
||
|
loadSettings() {
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
logger('Loading Settings...', 6);
|
||
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
||
|
logger('timeStampFormat: ' + this.settings.timeStampFormat, 9);
|
||
|
logger('dateStampFormat: ' + this.settings.dateStampFormat, 9);
|
||
|
logger('lastFormat: ' + this.settings.lastFormat, 9);
|
||
|
});
|
||
|
}
|
||
|
saveSettings() {
|
||
|
return __awaiter(this, void 0, void 0, function* () {
|
||
|
logger('Saving Settings...', 9);
|
||
|
yield this.saveData(this.settings);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
class TimeStamperModal extends obsidian.Modal {
|
||
|
constructor(app, editor, settings, plugin) {
|
||
|
super(app);
|
||
|
this.editor = editor;
|
||
|
this.settings = settings;
|
||
|
this.plugin = plugin;
|
||
|
}
|
||
|
onOpen() {
|
||
|
const { contentEl, editor, modalEl } = this;
|
||
|
const rowClass = 'row';
|
||
|
const divClass = 'div';
|
||
|
modalEl.addClass('timestamper-modal');
|
||
|
// Create label and text field
|
||
|
const containerEl = document.createElement(divClass);
|
||
|
containerEl.addClass(rowClass);
|
||
|
const targetEl = document.createElement(divClass);
|
||
|
targetEl.addClass('input-wrapper');
|
||
|
const labelEl = document.createElement(divClass);
|
||
|
labelEl.addClass('input-label');
|
||
|
labelEl.setText('Format string:');
|
||
|
const formatComponent = new obsidian.TextComponent(targetEl);
|
||
|
formatComponent.setPlaceholder('e.g. YYYY-MM-DD');
|
||
|
formatComponent.setValue(this.settings.lastFormat);
|
||
|
// Create Button
|
||
|
const buttonContainerEl = document.createElement(divClass);
|
||
|
buttonContainerEl.addClass(rowClass);
|
||
|
const submitButtonTarget = document.createElement(divClass);
|
||
|
submitButtonTarget.addClass('button-wrapper');
|
||
|
const submitButtonComponent = new obsidian.ButtonComponent(submitButtonTarget);
|
||
|
submitButtonComponent.setButtonText('Insert Date/Time Stamp');
|
||
|
submitButtonComponent.setCta();
|
||
|
submitButtonComponent.onClick(() => {
|
||
|
const now = new Date();
|
||
|
const stampFormat = formatComponent.getValue();
|
||
|
const stamp = obsidian.moment(now).format(stampFormat);
|
||
|
if (this.settings.newLine) {
|
||
|
editor.replaceSelection(stamp + '\n');
|
||
|
logger('new line', 9);
|
||
|
}
|
||
|
else {
|
||
|
editor.replaceSelection(stamp);
|
||
|
logger('no new line');
|
||
|
}
|
||
|
this.settings.lastFormat = stampFormat;
|
||
|
this.plugin.saveData(this.settings);
|
||
|
this.close();
|
||
|
});
|
||
|
// Add components to layout
|
||
|
containerEl.appendChild(labelEl);
|
||
|
containerEl.appendChild(targetEl);
|
||
|
buttonContainerEl.appendChild(submitButtonTarget);
|
||
|
contentEl.append(containerEl);
|
||
|
contentEl.append(buttonContainerEl);
|
||
|
submitButtonComponent.buttonEl.focus();
|
||
|
}
|
||
|
onClose() {
|
||
|
const { contentEl } = this;
|
||
|
contentEl.empty();
|
||
|
}
|
||
|
}
|
||
|
class TimeStamperSettingTab extends obsidian.PluginSettingTab {
|
||
|
constructor(app, plugin) {
|
||
|
super(app, plugin);
|
||
|
this.plugin = plugin;
|
||
|
}
|
||
|
display() {
|
||
|
const { containerEl } = this;
|
||
|
containerEl.empty();
|
||
|
new obsidian.Setting(containerEl)
|
||
|
.setName('Date Stamp Template')
|
||
|
.setDesc('Template String for inserting a date stamp')
|
||
|
.addText(text => text
|
||
|
.setValue(this.plugin.settings.dateStampFormat)
|
||
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||
|
logger('Settings update: ' + value, 9);
|
||
|
this.plugin.settings.dateStampFormat = value;
|
||
|
yield this.plugin.saveSettings();
|
||
|
})));
|
||
|
new obsidian.Setting(containerEl)
|
||
|
.setName('Time Stamp Template')
|
||
|
.setDesc('Template String for inserting a time stamp')
|
||
|
.addText(text => text
|
||
|
.setValue(this.plugin.settings.timeStampFormat)
|
||
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||
|
logger('Settings update: ' + value, 9);
|
||
|
this.plugin.settings.timeStampFormat = value;
|
||
|
yield this.plugin.saveSettings();
|
||
|
})));
|
||
|
new obsidian.Setting(containerEl)
|
||
|
.setName('Insert line break')
|
||
|
.setDesc('Add a line break after the time/date stamp')
|
||
|
.addToggle(toggle => toggle
|
||
|
.setValue(this.plugin.settings.newLine)
|
||
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||
|
this.plugin.settings.newLine = value;
|
||
|
yield this.plugin.saveSettings();
|
||
|
})));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = TimeStamperPlugin;
|
||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8
|