0

我正在使用 Google Closure 编辑器,我需要更改一个按钮(即Link)的功能。我认为要么我会继承负责的插件(BasicTextFormatter在这种情况下),要么我会创建一个新插件,以更容易为准。我的假设是,这一切都可以通过继承来实现,我不需要更改 Google Closure 文件。

我能够继承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());
... 

然后我不确定如何添加我的按钮,所以我试图以丑陋的方式来做(至少现在)

var buttons = [
  ...
  goog.editor.Command.FONT_SIZE,
  'myLink',
  goog.editor.Command.UNDO,
  ...
];
var toolbar = goog.ui.editor.DefaultToolbar.makeToolbar(buttons, toolbarDiv);

然后我被卡住了。有关按钮的信息在其中defaulttoolbar.js,但我还没有找到一种在BUTTONS_不修改 GC 代码的情况下将按钮添加到数组中的方法。周围的一切都很好地组合和继承,我觉得必须有一种方法来实现它。加上插件的概念表明添加一些东西应该相当容易和直接。

谷歌搜索后,我发现的只有thisthis。这两种方法都需要更改 GC 代码。

我错过了什么?

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

如果修改(即继承)一个插件而不是添加一个插件更容易,那该怎么做?如何指定,execCommandInternal应该调用我的,而不是原来的?

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

4

1 回答 1

1

好的。正如我所怀疑的那样,它做得很好,真的不需要修改 Google Closure 代码。如果有人对将插件添加到 GC 编辑器的一种方式感兴趣,这里就是。

基本上,我正确创建了新插件并正确注册了它(如上所示)。只需goog.ui.Control要将a添加到makeToolbar数组属性中,例如以下方式。

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命令分发给所有注册的插件,我的插件捕获并响应。如果需要修改插件而不是添加(并且仍然需要保留原始插件中的某些内容),那么比原始插件更快地注册我修改过的插件就足够了。

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

于 2013-10-10T11:08:37.717 回答