尝试向 CKEditor 添加插件

Trying to add a plugin to CKEditor

我正在尝试添加插件以在添加 link 时设置默认值 URL。

我按照此处的说明操作: https://apostrophecms.org/docs/tutorials/howtos/ckeditor.html

最后我得到了:

// lib/modules/apostrophe-areas/public/js/user.js
apos.define('apostrophe-areas', {
    construct: function(self, options) {

    var superEnableCkeditor = self.enableCkeditor;

    self.enableCkeditor = function() {
    superEnableCkeditor();

    CKEDITOR.plugins.addExternal('defaulturl', '/modules/my-apostrophe-areas/js/ckeditorPlugins/defaulturl/', 'plugin.js');
  };
 }
});

这是我的 apostrophe-areas/public/js/ckeditorPlugins/defaulturl/plugin.js

CKEDITOR.on( 'dialogDefinition', function( ev ) {

    var dialogName = ev.data.name;
    var dialogDefinition = ev.data.definition;

    if ( dialogName == 'link' ) {

        var infoTab = dialogDefinition.getContents( 'info' );
        var urlField = infoTab.get( 'url' );

        urlField[ 'default' ] = 'www.example.com';
    }
});

但是,这对我不起作用,我尝试按照此处的建议进行操作:

但是没有用。

我尝试并工作的是将 plugin.js 文件附加到撇号区域文件夹中拆分插件的 plugin.js 末尾,但我认为这不是正确的走法

谢谢!

我认为您可以通过两种方式解决问题:

1。如果你想保留外部插件文件:

根据 API 包装您的代码,参见例如https://sdk.ckeditor.com/samples/timestamp.html and the plugin it references https://sdk.ckeditor.com/samples/assets/plugins/timestamp/plugin.js 举个例子。您需要在 plugin.js 中使用 CKEDITOR.plugins.add( 'defaulturl', { init: ... })。不确定是否有什么特别的事情要做,因为你想修改 CKEDITOR 核心插件的行为。这就是为什么它会选择下一个选项...

2。如果你不需要额外的 plugin.js:

您还可以用 plugin.js 文件的内容替换 CKEDITOR.plugins.addExternal() 调用。我这样做是为了将默认 link 目标修改为 _blank:

// /lib/modules/apostrophe-areas/public/js/user.js
'use strict';

// See https://apostrophecms.org/docs/tutorials/howtos/ckeditor.html and
apos.define('apostrophe-areas', {
  construct: function(self, options) {
    var superEnableCkeditor = self.enableCkeditor;

    self.enableCkeditor = function enableCkeditor() {
      superEnableCkeditor();

      // https://docs.ckeditor.com/ckeditor4/latest/guide/dev_howtos_dialog_windows.html
      CKEDITOR.on('dialogDefinition', function redefineDialog(ev) {
        var dialogName = ev.data.name;
        var dialogDefinition = ev.data.definition;

        if (dialogName === 'link') {
          var targetTab = dialogDefinition.getContents('target');
          var targetField = targetTab.get('linkTargetType');

          targetField.default = '_blank';
        }
      });
    };
  }
});

祝你好运!