Spaces:
Running
Running
import { animation_duration } from '../../../../../script.js'; | |
import { dragElement } from '../../../../RossAscends-mods.js'; | |
import { loadMovingUIState } from '../../../../power-user.js'; | |
// eslint-disable-next-line no-unused-vars | |
import { QuickReplySettings } from '../QuickReplySettings.js'; | |
export class ButtonUi { | |
/**@type {QuickReplySettings}*/ settings; | |
/**@type {HTMLElement}*/ dom; | |
/**@type {HTMLElement}*/ popoutDom; | |
constructor(/**@type {QuickReplySettings}*/settings) { | |
this.settings = settings; | |
} | |
render() { | |
if (this.settings.isPopout) { | |
return this.renderPopout(); | |
} | |
return this.renderBar(); | |
} | |
unrender() { | |
this.dom?.remove(); | |
this.dom = null; | |
this.popoutDom?.remove(); | |
this.popoutDom = null; | |
} | |
show() { | |
if (!this.settings.isEnabled) return; | |
if (this.settings.isPopout) { | |
document.body.append(this.render()); | |
loadMovingUIState(); | |
$(this.render()).fadeIn(animation_duration); | |
dragElement($(this.render())); | |
} else { | |
const sendForm = document.querySelector('#send_form'); | |
if (sendForm.children.length > 0) { | |
sendForm.children[0].insertAdjacentElement('beforebegin', this.render()); | |
} else { | |
sendForm.append(this.render()); | |
} | |
} | |
} | |
hide() { | |
this.unrender(); | |
} | |
refresh() { | |
this.hide(); | |
this.show(); | |
} | |
renderBar() { | |
if (!this.dom) { | |
let buttonHolder; | |
const root = document.createElement('div'); { | |
this.dom = root; | |
buttonHolder = root; | |
root.id = 'qr--bar'; | |
root.classList.add('flex-container'); | |
root.classList.add('flexGap5'); | |
if (this.settings.showPopoutButton) { | |
root.classList.add('popoutVisible'); | |
const popout = document.createElement('div'); { | |
popout.id = 'qr--popoutTrigger'; | |
popout.classList.add('menu_button'); | |
popout.classList.add('fa-solid'); | |
popout.classList.add('fa-window-restore'); | |
popout.addEventListener('click', ()=>{ | |
this.settings.isPopout = true; | |
this.refresh(); | |
this.settings.save(); | |
}); | |
root.append(popout); | |
} | |
} | |
if (this.settings.isCombined) { | |
const buttons = document.createElement('div'); { | |
buttonHolder = buttons; | |
buttons.classList.add('qr--buttons'); | |
root.append(buttons); | |
} | |
} | |
[...this.settings.config.setList, ...(this.settings.chatConfig?.setList ?? [])] | |
.filter(link=>link.isVisible) | |
.forEach(link=>buttonHolder.append(link.set.render())) | |
; | |
} | |
} | |
return this.dom; | |
} | |
renderPopout() { | |
if (!this.popoutDom) { | |
let buttonHolder; | |
const root = document.createElement('div'); { | |
this.popoutDom = root; | |
root.id = 'qr--popout'; | |
root.classList.add('qr--popout'); | |
root.classList.add('draggable'); | |
const head = document.createElement('div'); { | |
head.classList.add('qr--header'); | |
root.append(head); | |
const controls = document.createElement('div'); { | |
controls.classList.add('qr--controls'); | |
controls.classList.add('panelControlBar'); | |
controls.classList.add('flex-container'); | |
const drag = document.createElement('div'); { | |
drag.id = 'qr--popoutheader'; | |
drag.classList.add('fa-solid'); | |
drag.classList.add('fa-grip'); | |
drag.classList.add('drag-grabber'); | |
drag.classList.add('hoverglow'); | |
controls.append(drag); | |
} | |
const close = document.createElement('div'); { | |
close.classList.add('qr--close'); | |
close.classList.add('fa-solid'); | |
close.classList.add('fa-circle-xmark'); | |
close.classList.add('hoverglow'); | |
close.addEventListener('click', ()=>{ | |
this.settings.isPopout = false; | |
this.refresh(); | |
this.settings.save(); | |
}); | |
controls.append(close); | |
} | |
head.append(controls); | |
} | |
} | |
const body = document.createElement('div'); { | |
buttonHolder = body; | |
body.classList.add('qr--body'); | |
if (this.settings.isCombined) { | |
const buttons = document.createElement('div'); { | |
buttonHolder = buttons; | |
buttons.classList.add('qr--buttons'); | |
body.append(buttons); | |
} | |
} | |
[...this.settings.config.setList, ...(this.settings.chatConfig?.setList ?? [])] | |
.filter(link=>link.isVisible) | |
.forEach(link=>buttonHolder.append(link.set.render())) | |
; | |
root.append(body); | |
} | |
} | |
} | |
return this.popoutDom; | |
} | |
} | |