1

我创建了一个自定义链接按钮,并希望它在您选择/单击文本编辑器中的链接时突出​​显示/选中,就像单击粗体文本显示选中的粗体图标一样。在TinyMCE 4中,您可以简单地使用“stateSelector”在选择那种 DOM 元素时使其突出显示,如下所示:

editor.ui.registry.addButton('SpecialLink', {
        icon: 'link',
        onAction: makeSpecialLink(),
        **stateSelector: 'a[href]'**
});

我找不到任何关于在TinyMCE 5中替换 stateSelector 的信息,到目前为止,我所能做的就是在 tinymce.init 中重新创建一些功能:

    init_instance_callback: function(editor) {
            editor.on("SelectionChange", function(e){
                let elem = editor.selection.getNode();
                if( $(elem).is("a") )
                    console.log("Highlight the Special Link button");
                else
                    console.log("Deselect the Special Link button");
            })
        }

我可以参考myMCE.plugins.SpecialLink,但我不能调用setActive(true)它。

任何帮助将不胜感激!

4

2 回答 2

1

你可以使用addToggleButton而不是addButton,然后调用setActive

这是我的代码片段。

  editor.ui.registry.addToggleButton('my-action', {
    icon: null,
    text: 'My action',
    onAction: function onAction() {
       // ...do stuff
    },
    onSetup: function(api) {
      function nodeChangeHandler(){
        const selectedNode = editor.selection.getNode();
        return api.setActive(selectedNode.id === constants.id);
      }
      editor.on('NodeChange', nodeChangeHandler);
    }
  });
}

https://www.tiny.cloud/docs/ui-components/typesoftoolbarbuttons/#togglebutton

于 2020-05-04T08:51:38.253 回答
1

@Muki 的答案与我所做的类似,但我在这里引用了 tinymce git repo 中的锚按钮的核心代码https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/src/plugins/anchor/主/ts/ui/Buttons.ts

我改为editor.ui.registry.addButtoneditor.ui.registry.addToggleButton添加onSetup: (buttonApi) => editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind而不是stateSelectorafter onAction

如下所示:

editor.ui.registry.addToggleButton('SpecialLink', {
        icon: 'link',
        onAction: makeSpecialLink(),
        onSetup: (buttonApi) => editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind
});
于 2020-05-12T05:39:25.443 回答