| import { animation_duration } from '../../../../../script.js'; |
| import { dragElement } from '../../../../RossAscends-mods.js'; |
| import { loadMovingUIState } from '../../../../power-user.js'; |
| import { QuickReplySettings } from '../QuickReplySettings.js'; |
|
|
| export class ButtonUi { |
| settings; |
|
|
| dom; |
| popoutDom; |
|
|
|
|
|
|
|
|
| constructor(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 ?? []), ...(this.settings.charConfig?.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 ?? []), ...(this.settings.charConfig?.setList ?? [])] |
| .filter(link=>link.isVisible) |
| .forEach(link=>buttonHolder.append(link.set.render())) |
| ; |
| root.append(body); |
| } |
| } |
| } |
| return this.popoutDom; |
| } |
| } |
|
|