将插件添加到Google Closure编辑器

时间:2013-10-01 11:41:08

标签: javascript rich-text-editor google-closure google-closure-library

我正在使用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。所以这可能会解决这一步骤。无论如何。我会继续努力。如果有人知道某些链接,所有内容都很好地总结,或者最近有人这样做并且可以在这里总结一下,我将非常感激。

1 个答案:

答案 0 :(得分:1)

行。正如我所怀疑的那样,它做得很好,并且确实没有必要修改Google Closure代码。如果有人对将GC插件添加到GC编辑器的一种方式感兴趣,那么就是这样。

基本上,我正确地创建了新的插件并且我正确地注册了它(如上所示)。只需将goog.ui.Control添加到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命令分发给所有已注册的插件,我的插件捕获并响应。如果需要修改插件而不是添加(并且仍然需要保留原始插件中的某些内容),那么注册我的修改后的插件应该比原始插件更快。

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