obsidian#ExtraButtonComponent TypeScript Examples
The following examples show how to use
obsidian#ExtraButtonComponent.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: sectionContentModal.ts From obsidian_supercharged_links with MIT License | 6 votes |
onOpen(){
this.titleEl.setText('Select the line before the field to add')
const contentDiv = this.contentEl.createDiv()
const inputDiv = contentDiv.createDiv()
const inputEl = new TextAreaComponent(inputDiv)
inputEl.inputEl.setAttr("cols", "50")
inputEl.inputEl.setAttr("rows", "5")
const footerDiv = contentDiv.createDiv({
cls: "frontmatter-textarea-buttons"
})
const positionSelectorContainer = footerDiv.createDiv({
cls: "position-selector-container"
})
const positionDropdown = new DropdownComponent(positionSelectorContainer)
positionDropdown.addOption("1", "begining")
positionDropdown.addOption("2", "end")
positionDropdown.setValue("2")
const saveButton = new ButtonComponent(footerDiv)
saveButton
.setIcon("checkmark")
.onClick(() => {
this.app.vault.read(this.file).then(result => {
let newContent: string[] = []
result.split("\n").forEach((line, lineNumber) =>{
newContent.push(line)
if(lineNumber == this.startLine && positionDropdown.getValue() == "1"){
newContent.push(inputEl.getValue())
}
if(lineNumber == this.startLine && positionDropdown.getValue() == "1"){
newContent.push(inputEl.getValue())
}
})
})
})
const cancelButton = new ExtraButtonComponent(footerDiv)
cancelButton
.setIcon("cross")
.onClick(() => this.close())
}
Example #2
Source File: FieldSettingsModal.ts From obsidian_supercharged_links with MIT License | 6 votes |
createCancelButton(b: ExtraButtonComponent): ExtraButtonComponent {
b.setIcon("cross")
.setTooltip("Cancel")
.onClick(() => {
this.saved = false;
/* reset values from settings */
if (this.initialProperty.name != "") {
Object.assign(this.property, this.initialProperty)
}
this.close();
});
return b;
}
Example #3
Source File: view.ts From obsidian-initiative-tracker with GNU General Public License v3.0 | 6 votes |
onload() {
new ExtraButtonComponent(this.buttonEl)
.setIcon("cross")
.setTooltip("Close Statblock")
.onClick(() => {
this.render();
this.app.workspace.trigger("initiative-tracker:stop-viewing");
});
}
Example #4
Source File: preset.ts From obsidian-fantasy-calendar with MIT License | 5 votes |
async display() {
this.containerEl.addClass("fantasy-calendar-choose-preset");
this.contentEl.empty();
this.contentEl.createEl("h3", {
text: "Choose a Preset Calendar"
});
const presetEl = this.contentEl.createDiv(
"fantasy-calendar-preset-container"
);
for (const preset of PRESET_CALENDARS) {
const button = new ButtonComponent(presetEl).onClick(() => {
this.preset = preset;
this.display();
});
if (this.preset == preset) button.setCta();
button.buttonEl.createDiv({
cls: "setting-item-name",
text: preset.name
});
button.buttonEl.createDiv({
cls: "setting-item-description",
text: preset.description
});
}
const buttonEl = this.contentEl.createDiv(
"fantasy-calendar-confirm-buttons"
);
new ButtonComponent(buttonEl)
.setButtonText("Apply")
.onClick(() => {
this.saved = true;
this.preset = copy(this.preset);
this.preset.id = nanoid(6);
this.close();
})
.setCta();
new ExtraButtonComponent(buttonEl).setIcon("cross").onClick(() => {
this.close();
});
}
Example #5
Source File: addNewFieldModal.ts From obsidian_supercharged_links with MIT License | 5 votes |
onOpen(){
this.titleEl.setText("Insert new field")
const addNewFieldContainer = this.contentEl.createDiv()
const nameInputContainer = addNewFieldContainer.createDiv()
nameInputContainer.setText("Field Name: ")
const nameInputEl = new TextComponent(nameInputContainer)
nameInputEl.setPlaceholder("Field name")
const valueInputContainer = addNewFieldContainer.createDiv()
valueInputContainer.setText("Field value: ")
const valueInputEl = new TextComponent(valueInputContainer)
valueInputEl.setPlaceholder("Field value")
const footerButtons = this.contentEl.createDiv({
cls: 'frontmatter-textarea-buttons'
})
const saveButton = new ButtonComponent(footerButtons)
saveButton.setIcon("checkmark")
saveButton.onClick(() => {
this.app.vault.read(this.file).then(result => {
let newContent: string[] = []
if(this.top){
newContent.push(`${nameInputEl.getValue()}${this.inFrontmatter ? ":" : "::"} ${valueInputEl.getValue()}`)
result.split("\n").forEach((line, _lineNumber) => newContent.push(line))
} else {
result.split("\n").forEach((line, _lineNumber) => {
newContent.push(line)
if(_lineNumber == this.lineNumber){
newContent.push(`${nameInputEl.getValue()}${this.inFrontmatter ? ":" : "::"} ${valueInputEl.getValue()}`)
}
})
}
this.app.vault.modify(this.file, newContent.join('\n'))
this.close()
})
})
const cancelButton = new ExtraButtonComponent(footerButtons)
cancelButton.setIcon("cross")
cancelButton.onClick(() => {
this.close()
})
}
Example #6
Source File: valueMultiSelectModal.ts From obsidian_supercharged_links with MIT License | 5 votes |
populateValuesGrid(valueGrid: HTMLDivElement, listNoteValues: string[]){
Object.keys(this.settings.values).forEach(key => {
const presetValue = this.settings.values[key]
this.buildValueToggler(valueGrid, presetValue)
})
listNoteValues.forEach(value => {
this.buildValueToggler(valueGrid, value)
})
const footer = this.contentEl.createDiv({
cls: "frontmatter-value-grid-footer"
})
const saveButton = new ButtonComponent(footer)
saveButton.setIcon("checkmark")
saveButton.onClick(() => {
if(this.lineNumber == -1){
replaceValues(this.app, this.file, this.name, this.values.join(","))
}else{
this.app.vault.read(this.file).then(result => {
let newContent: string[] = []
if(this.top){
newContent.push(`${this.name}${this.inFrontmatter ? ":" : "::"} ${this.values.join(",")}`)
result.split("\n").forEach((line, _lineNumber) => newContent.push(line))
} else {
result.split("\n").forEach((line, _lineNumber) => {
newContent.push(line)
if(_lineNumber == this.lineNumber){
newContent.push(`${this.name}${this.inFrontmatter ? ":" : "::"} ${this.values.join(",")}`)
}
})
}
this.app.vault.modify(this.file, newContent.join('\n'))
this.close()
})
}
this.close()
})
const cancelButton = new ExtraButtonComponent(footer)
cancelButton.setIcon("cross")
cancelButton.onClick(() => this.close())
}
Example #7
Source File: FileClassAttributeModal.ts From obsidian_supercharged_links with MIT License | 4 votes |
onOpen(){
//title
this.titleEl.setText(this.attr ? `Manage ${this.attr.name}` : `Create a new attribute for ${this.fileClass.name}`)
//name input
const nameInputContainer = this.contentEl.createDiv()
nameInputContainer.setText("name")
const nameInput = new TextComponent(nameInputContainer)
this.attr ? nameInput.setValue(this.attr.name) : nameInput.setPlaceholder("Type a name for this attribute")
//header for select
const typeSelectHeader = this.contentEl.createDiv()
const attrLine = typeSelectHeader.createEl("div")
const attrName = attrLine.createEl("strong")
attrName.setText(`<${this.name}>`)
attrLine.append(" fields in files with:")
String(`---\nfileClass: ${this.fileClass.name}\n...\n---`).split('\n').forEach(line => {
typeSelectHeader.createEl("div", "yaml-frontmatter-red").setText(line)
})
// type select
const typeSelectContainer = this.contentEl.createDiv({cls: 'frontmatter-value-selector-container'})
const typeSelectLabel = typeSelectContainer.createDiv({cls: 'frontmatter-value-selector-inline-label'})
typeSelectLabel.setText("will: ")
const typeSelectDropDown = typeSelectContainer.createDiv({cls: 'frontmatter-value-selector-toggler'})
const typeSelect = new DropdownComponent(typeSelectDropDown)
Object.keys(types).forEach(key => {
typeSelect.addOption(key, types[key])
})
if(this.attr){
typeSelect.setValue(this.type)
}
// options input
const optionsInputContainer = this.contentEl.createDiv({cls: 'frontmatter-value-selector-container'})
const optionsInputLabel = optionsInputContainer.createDiv({cls: 'frontmatter-value-selector-inline-label-top'})
optionsInputLabel.setText("Values")
const optionsInput = new TextAreaComponent(optionsInputContainer)
optionsInput.inputEl.rows = 3
optionsInput.inputEl.cols = 26
this.attr ? optionsInput.setValue(this.type == "input" ? "" : this.options.join(", ")) : optionsInput.setPlaceholder("insert values, comma separated")
!this.attr || this.type == "input" ? optionsInputContainer.hide() : optionsInputContainer.show()
// event handlers
typeSelect.onChange(type => {
type == "input" ? optionsInputContainer.hide() : optionsInputContainer.show()
this.type = type
})
optionsInput.onChange(value => this.options = value.split(",").map(item => item.trim()))
nameInput.onChange(value => {this.name = value; attrName.setText(`<${value}>`)})
// footer buttons
const footer = this.contentEl.createDiv({cls: "frontmatter-value-grid-footer"})
const saveButton = new ButtonComponent(footer)
saveButton.setIcon("checkmark")
saveButton.onClick(() => {
this.fileClass.updateAttribute(this.type, this.options, this.name, this.attr)
this.close()
})
if(this.attr){
const removeButton = new ButtonComponent(footer)
removeButton.setIcon("trash")
removeButton.onClick(() => {
const confirmModal = new Modal(this.app)
confirmModal.titleEl.setText("Please confirm")
confirmModal.contentEl.createDiv().setText(`Do you really want to remove ${this.attr.name} attribute from ${this.fileClass.name}?`)
const confirmFooter = confirmModal.contentEl.createDiv({cls: "frontmatter-value-grid-footer"})
const confirmButton = new ButtonComponent(confirmFooter)
confirmButton.setIcon("checkmark")
confirmButton.onClick(() => {
this.fileClass.removeAttribute(this.attr)
confirmModal.close()
this.close()
})
const dismissButton = new ExtraButtonComponent(confirmFooter)
dismissButton.setIcon("cross")
dismissButton.onClick(() => this.close())
confirmModal.open()
})
}
const cancelButton = new ExtraButtonComponent(footer)
cancelButton.setIcon("cross")
cancelButton.onClick(() => this.close())
}
Example #8
Source File: settings.ts From obsidian-initiative-tracker with GNU General Public License v3.0 | 4 votes |
private _displayPlayers(additionalContainer: HTMLDetailsElement) {
additionalContainer.empty();
additionalContainer.ontoggle = () => {
this.plugin.data.openState.player = additionalContainer.open;
};
const summary = additionalContainer.createEl("summary");
new Setting(summary).setHeading().setName("Players");
summary.createDiv("collapser").createDiv("handle");
new Setting(additionalContainer)
.setName("Add New Player")
.setDesc(
"Players added here will be available to add to a party. If you do not have a party created, all players will be added to a new encounter."
)
.addButton((button: ButtonComponent): ButtonComponent => {
let b = button
.setTooltip("Add Player")
.setButtonText("+")
.onClick(async () => {
const modal = new NewPlayerModal(this.plugin);
modal.open();
modal.onClose = async () => {
if (!modal.saved) return;
await this.plugin.savePlayer({
...modal.player,
player: true
});
this._displayPlayers(additionalContainer);
};
});
return b;
});
const additional = additionalContainer.createDiv("additional");
const playerView = additional.createDiv("initiative-tracker-players");
if (!this.plugin.data.players.length) {
additional
.createDiv({
attr: {
style: "display: flex; justify-content: center; padding-bottom: 18px;"
}
})
.createSpan({
text: "No saved players! Create one to see it here."
});
} else {
const headers = playerView.createDiv(
"initiative-tracker-player headers"
);
headers.createDiv({ text: "Name" });
new ExtraButtonComponent(headers.createDiv())
.setIcon(HP)
.setTooltip("Max HP");
new ExtraButtonComponent(headers.createDiv())
.setIcon(AC)
.setTooltip("Armor Class");
new ExtraButtonComponent(headers.createDiv())
.setIcon(INITIATIVE)
.setTooltip("Initiative Modifier");
headers.createDiv();
for (let player of this.plugin.data.players) {
const playerDiv = playerView.createDiv(
"initiative-tracker-player"
);
playerDiv.createDiv({ text: player.name });
playerDiv.createDiv({
text: `${player.hp ?? DEFAULT_UNDEFINED}`
});
playerDiv.createDiv({
text: `${player.ac ?? DEFAULT_UNDEFINED}`
});
playerDiv.createDiv({
text: `${player.modifier ?? DEFAULT_UNDEFINED}`
});
const icons = playerDiv.createDiv(
"initiative-tracker-player-icon"
);
new ExtraButtonComponent(icons.createDiv())
.setIcon("pencil")
.setTooltip("Edit")
.onClick(() => {
const modal = new NewPlayerModal(this.plugin, player);
modal.open();
modal.onClose = async () => {
if (!modal.saved) return;
await this.plugin.updatePlayer(
player,
modal.player
);
this.plugin.app.workspace.trigger(
"initiative-tracker:creature-updated-in-settings",
player
);
this._displayPlayers(additionalContainer);
};
});
new ExtraButtonComponent(icons.createDiv())
.setIcon("trash")
.setTooltip("Delete")
.onClick(async () => {
this.plugin.data.players =
this.plugin.data.players.filter((p) => p != player);
await this.plugin.saveSettings();
this._displayPlayers(additionalContainer);
});
}
}
}