Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   tinymce 5 присвоить класс кнопки (https://javascript.ru/forum/events/83131-tinymce-5-prisvoit-klass-knopki.html)

ureech 24.09.2021 13:50

tinymce 5 присвоить класс кнопки
 
Привет. Хочу добавить свою кнопку в этот редактор. Делаю в виде плагина.
tinymce.PluginManager.add('gallery', function (editor, url) {

....

    editor.ui.registry.addButton('gallery', {
        tooltip: 'Из альбома',
        icon: 'gallery',		
        onAction: function () {
            load(openDialog);
        },
		
    });

....

});

Подскажите как добавить класс к этой кнопки? Так же интересует,как вместо иконки вставить своё избражение или просто текст. Пробовал вместо icon использовать image не прокатило.

Aetae 24.09.2021 17:50

Читайте документацию.
https://www.tiny.cloud/docs/ui-compo...oolbarbuttons/ :
Цитата:

Name of the icon to be displayed. Must correspond to an icon: in the icon pack, in a custom icon pack, or added using the addIcon API.
https://www.tiny.cloud/docs/api/tiny...istry/#addicon
Также в onSetup приходит элемент кнопки - там можно ей поставить класс.

ureech 28.09.2021 21:55

Цитата:

Сообщение от Aetae
Читайте документацию.

Нет там ничего(.

Aetae 28.09.2021 22:13

ureech, ссылки которые я дал - это "ничо"? 0_о

ureech 29.09.2021 10:33

Как назначить класс для кнопки? Нет.
В четвёртой версии вроде можно было так

editor.ui.registry.addButton('gallery', {
        tooltip: 'Из альбома',
        text: button_text,
        classes : 'my_class',	// для 4-ой
        onAction: function () {
            load(openDialog);
        },

В пятой не работает. Плюс у меня не иконка, а текст

рони 29.09.2021 13:15

Цитата:

Сообщение от Aetae
Также в onSetup приходит элемент кнопки - там можно ей поставить класс.

можно пример? кроме buttonApi я там ничего не вижу.

Aetae 29.09.2021 17:22

рони, да, нет нифига.)
Если без иконки, то походу только монкипатчить через что-то типа: button.tox-tbtn[label="Из альбома"].
Цитата:

It is by design that there is currently no option to add styles or classes to custom components. It is to maintain the uniformity in look and feel of the TinyMCE UI.
...upd:
В text можно пихать html, а значит нет проблемы сделать так:
text: '<span class="my_class">' + button_text +'</span>'


...upd2 накидал функцию, добавляющую classes:
function addButton(editor, name, {
  classes, 
  _posAttr = 'data-temp-button-index', 
  ...options
}) {
  const registry = editor.ui.registry;

  if(!classes)
    return registry.addButton(name, options);
  classes = String(classes).split(/\s+/);

  const attr = `${_posAttr}="${addButton.index++}"`;
  const text = `<span ${attr}"></span>`;
  const selector = `span[${attr}]`;
  const hasText = 'text' in options;

  const removePosEl = hasText ? posEl => posEl.remove() : posEl => posEl.parentNode.remove();
  const addClasses = () => {
    const el = editor.getContainer().querySelector(selector);
    el.closest('button').classList.add(...classes);
    removePosEl(el);
  };
  const {onSetup} = options;

  return registry.addButton(name, {
    ...options,
    text: hasText ? options.text + text : text,
    onSetup: typeof onSetup === 'function' ? function() {
      addClasses();
      return onSetup.apply(this, arguments);
    } : addClasses
  });
}
addButton.index = 0;

//...

addButton(editor, 'gallery', {
  tooltip: 'Из альбома',
  text: button_text,
  classes : 'my_class',	
  onAction: function () {
    load(openDialog);
  }
})

ureech 29.09.2021 22:30

Aetae,
Спасибо. Попробую разобраться). Насчёт html в text
Цитата:

Сообщение от Aetae
text: '<span class="my_class">' + button_text +'</span>'

так стили только текста коснуться, а не кнопки.


Часовой пояс GMT +3, время: 05:26.