我正在使用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代码的方法。周围是非常好的复合和可继承,我觉得必须有一种方法来实现它。此外,插件的概念表明添加内容应该相当简单和直接。
谷歌搜索后,我找到的只有this和this。这两种方法都需要更改GC代码。
我错过了什么?
TL; DR版本: 有没有一种方法可以将我自己的插件添加到GC编辑器中?
如果更容易修改(即继承)插件而不是添加插件,该怎么做?如何指定我的execCommandInternal
应该被调用,而不是原来的那个?
编辑:好的,我发现按钮可以是字符串数组,也可以是goog.ui.Control
。所以这可能会解决这一步骤。无论如何。我会继续努力。如果有人知道某些链接,所有内容都很好地总结,或者最近有人这样做并且可以在这里总结一下,我将非常感激。
答案 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
命令分发给所有已注册的插件,我的插件捕获并响应。如果需要修改插件而不是添加(并且仍然需要保留原始插件中的某些内容),那么注册我的修改后的插件应该比原始插件更快。
我正用脑袋敲击键盘一会儿发现这很容易。为什么没有互联网上的指南(虽然有几乎所有内容的指南,包括更原始的东西)对我来说仍然是一个谜。