Как добавить пользовательскую кнопку в редактор среды daviferreira?

Я хотел бы добавить кнопку для создания собственного стиля в панели кнопок редактора (в данном случае, красный текст).

Я могу создать кнопку и отобразить ее на панели кнопок:

var medium = new MediumEditor(editorBox, {
    buttons: ['bold', ..., 'red'],
    extensions: {
        'red': new MyButton({label: 'R', style: 'color:red'})
    }
});

function MyButton(options) {
    this.options = options;
};

MyButton.prototype.getButton = function(instance) {
    return '<button><span style="' + this.options.style + '">' + this.options.label + '</span></button>';
};

Я не знаю много Javascript. На https://github.com/daviferreira/medium-editor/wiki/Custom-Buttons-and-Extensions есть документация, но я ничего не знаю в качестве примера, поэтому я не знаю, как это работает на практике.

Есть указатели?

1 ответ

Таким образом, вы можете найти пример чего-то похожего на то, что вы пытаетесь сделать, внизу страницы, на которую вы ссылались: Примеры

Если вы реализуете базовое расширение, вам необходимо onclick обработчик кнопки, которую вы возвращаете в getButton(),

Так что вы бы изменили свой getButton() способ сделать что-то вроде этого:

MyButton.prototype.getButton = function(instance) {
    var button = document.createElement('button');
    button.innerHTML = '<span style="' + this.options.style + '"'> + this.options.label + '</span>';
    button.addEventListener('click', this.onClick.bind(this));
    return button;
};

Вы можете увидеть пример этого в примере с кнопкой выделения. В этом случае кнопка создается в конструкторе, назначенном this.button и onclick обработчик прилагается.

В этом примере используются rangy и модуль CSS Class Applier для применения изменений к текущему выделенному тексту.

Для вашего случая вы можете сделать что-то вроде этого (при условии, что вы используете rangy):

MyButton.prototype.onClick = function(event) {
    var applier = rangy.createClassApplier("your-red-text-class");
    applier.toggleSelection();
}

Вы можете создать applier класса как часть конструктора и просто использовать его каждый раз при нажатии кнопки.

Чтобы ваша кнопка на панели инструментов была "активной" или "неактивной" в зависимости от текущего выбора, вы можете реализовать checkState() как пример Highligher или isAlreadyApplied(), isActive(), setActive() функции, описанные в документации по расширениям

Другие вопросы по тегам