Javascript 向Google闭包编辑器添加插件

Javascript 向Google闭包编辑器添加插件,javascript,rich-text-editor,google-closure,google-closure-library,Javascript,Rich Text Editor,Google Closure,Google Closure Library,我正在使用谷歌闭包编辑器,我需要更改一个按钮的功能(即链接)。我想要么继承负责的插件(BasicTextFormatter),要么创建一个新插件,以更简单的为准。我的假设是,所有这些都可以通过继承实现,我不需要更改Google闭包文件 我能够继承goog.editor.Plugin,并放置一些虚拟调试信息来了解如何调用它 goog.provide('project.LinkPlugin'); goog.require('goog.editor.Plugin'); project.LinkPlu

我正在使用谷歌闭包编辑器,我需要更改一个按钮的功能(即
链接
)。我想要么继承负责的插件(
BasicTextFormatter
),要么创建一个新插件,以更简单的为准。我的假设是,所有这些都可以通过继承实现,我不需要更改Google闭包文件

我能够继承
goog.editor.Plugin
,并放置一些虚拟调试信息来了解如何调用它

goog.provide('project.LinkPlugin');
goog.require('goog.editor.Plugin');

project.LinkPlugin = function() {
  goog.editor.Plugin.call(this);
}
goog.inherits(project.LinkPlugin, goog.editor.Plugin);

project.LinkPlugin.prototype.getTrogClassId = function() {
  return 'projectLinkPlugin';
}

project.LinkPlugin.prototype.isSupportedCommand = function(command) {
  console.log('is supported ' + command);
  return command == 'myLink';
};

project.LinkPlugin.prototype.execCommandInternal = function(command, var_args) {
  console.log('exec command ' + command);
}
我注册了插件

var editor = new goog.editor.Field('rtfEditor');
editor.registerPlugin(new project.LinkPlugin());
editor.registerPlugin(new goog.editor.plugins.BasicTextFormatter());
... 
然后我不知道如何添加我的按钮,所以我尝试用丑陋的方式(至少现在是这样)

然后我被卡住了。有关按钮的信息位于
defaulttoolbar.js
中,我还没有找到一种方法,可以在不修改GC代码的情况下将我的按钮添加到
buttons\uu
数组中。所有这些都是很好的组合和可继承的,我觉得一定有办法实现它。加上插件的概念表明,添加一些东西应该是相当简单和直接的

在谷歌搜索之后,我只找到了和。这两种方法都需要更改GC代码

我错过了什么

TL;灾难恢复版本: 有没有一种干净的方法可以将我自己的插件添加到GC编辑器中

如果修改(即继承)插件比添加插件更容易,那么如何做到这一点?如何指定应调用my
execCommandInternal
,而不是原始调用


编辑:好的,我发现按钮可以是字符串数组,也可以是
goog.ui.Control
。所以这可能会解决这一步。无论如何我会继续努力的。不过,如果有人知道某个链接,其中所有内容都被很好地总结了,或者有人最近做了,并可以在这里总结,我将非常感激。

好的。正如我所怀疑的那样,它做得很好,实际上没有必要修改Google闭包代码。如果有人对向GC编辑器中添加插件感兴趣,请看这里

基本上,我正确地创建了新插件,并且正确地注册了它(如上所示)。只需要将
goog.ui.Control
添加到
makeToolbar
array属性中,如下所示

var myLinkButton = goog.ui.editor.ToolbarFactory.makeButton('myLink', 'This is a tooltip', 'My Custom Link', goog.getCssName('tr-link'));

var buttons = [
  goog.editor.Command.BOLD,
  goog.editor.Command.ITALIC,
  goog.editor.Command.UNDERLINE,
  ...
  myLinkButton,
];

var toolbar = goog.ui.editor.DefaultToolbar.makeToolbar(buttons, toolbarDiv);
var toolbarController = new goog.ui.editor.ToolbarController(editor, toolbar);
(最后两行保持不变)

之后,编辑器插件引擎将
myLink
命令分发给所有注册的插件,我的插件捕获并响应该命令。如果需要修改插件而不是添加插件(并且仍然需要保留原始插件中的某些内容),那么注册我修改的插件应该比注册原始插件早

我用头敲击键盘有一阵子才发现这很容易。为什么互联网上没有这方面的指南(而几乎所有的东西都有指南,包括更原始的东西)对我来说仍然是个谜

var myLinkButton = goog.ui.editor.ToolbarFactory.makeButton('myLink', 'This is a tooltip', 'My Custom Link', goog.getCssName('tr-link'));

var buttons = [
  goog.editor.Command.BOLD,
  goog.editor.Command.ITALIC,
  goog.editor.Command.UNDERLINE,
  ...
  myLinkButton,
];

var toolbar = goog.ui.editor.DefaultToolbar.makeToolbar(buttons, toolbarDiv);
var toolbarController = new goog.ui.editor.ToolbarController(editor, toolbar);