// Copyright (c) 2024-present AI-Labs // @ ts-nocheck import { MenuButton, MenuButtonOptions } from "../../MenuButton.ts"; import icon from "../../../../assets/icons/audio.svg"; import { t } from "i18next"; import { UAIEditorEventListener, UAIEditorOptions } from "../../../../core/UAIEditor.ts"; import { EditorEvents } from "@tiptap/core"; /** * 插入菜单:插入音频 */ export class Audio extends HTMLElement implements UAIEditorEventListener { // 按钮选项 menuButtonOptions: MenuButtonOptions = { menuType: "button", enable: true, icon: icon, hideText: false, text: t('insert.audio'), tooltip: t('insert.audio'), } // 功能按钮 menuButton: MenuButton; constructor(options: MenuButtonOptions) { super(); // 初始化功能按钮选项 this.menuButtonOptions = { ...this.menuButtonOptions, ...options }; // 创建功能按钮 this.menuButton = new MenuButton(this.menuButtonOptions); } /** * 定义创建方法 * @param event * @param options */ onCreate(event: EditorEvents["create"], options: UAIEditorOptions) { this.menuButton.onCreate(event, options); this.appendChild(this.menuButton); // 定义按钮点击事件,插入音频 this.addEventListener("click", () => { if (this.menuButtonOptions.enable) { event.editor.chain().focus().selectFiles('audio', true).run() } }) } /** * 定义Transaction监听方法 * @param event * @param options */ onTransaction(event: EditorEvents["transaction"], options: UAIEditorOptions) { this.menuButton.onTransaction(event, options); if (this.menuButton.menuButton) { var disable = event.editor.isEditable; this.onEditableChange(disable); } } onEditableChange(editable: boolean) { this.menuButtonOptions.enable = editable; this.menuButton.onEditableChange(editable); } }