При создании пользовательского плагина для CKEDITOR 5 в угловом приложении выдается TypeError: Невозможно прочитать свойство '0' из неопределенного - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь добавить пользовательский плагин для добавления в редактор ckeditor5-build-decoupled-document.Когда я добавляю свой пользовательский плагин в код сборки ckeditor5-build-decoupled-document и затем запускаю npm run build.Но я получаю сообщение об ошибке TypeError: Невозможно прочитать свойство '0' из неопределенного при добавлении файла сборки ckeditor.js в мой угловой проект.

enter image description here

Панель инструментов редактора больше не отображается на экране, и я не могу редактировать текст, однако плагин, похоже, выполняет свою функцию, разрешив встроенный стиль в редакторе.

У меня есть 2 вопроса:

  1. Правильно ли я создал плагин?
  2. Чего-то не хватает в моей конфигурации в моем проекте Angular?

Это шаги, которые язатем и используемый код

Созданный плагин

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';


export default class Extension extends Plugin {
    constructor( editor ) {
        super( editor );
    }

    init() {
        const editor = this.editor;

        let allowedAttributes = [
            'width', 'height', 'style', 'stylex', 'target', 'class', 'id', 'name', 'title', 'type', 'olddisplay', 'text-align', 'align',
            'border', 'cellspacing','padding', 'cellpadding', 'color', 'valign', 'clear', 'src',  'shapes', '&amp',
            'prefix', 'tagtype', 'datetime', 'cite',  'cols', 'colspan', 'noshade', 'text-decoration',
            'shape', 'start',  'alt', 'strong', 'files', 'hr', 'font-size',
            'com',  'background-color', 'rowspan', 'span', 'page', 'content',
            'action', 'value', 'autofocus', 'maxlength', 'rows', 'for', 'aria-label', 'checked', 'selected',
            'rel', 'scope', 'location', 'cellpacing', 'block-id', 'lang',
            'original-style', 'datatype', 'property', 'controls', 'controlslist', 'data-attr', 'poster', 'preload',
            'tabindex', 'role', 'aria-describedby', 'aria-disabled','aria-haspopup', 
            'href', 'col', 'doc', 'attach', 'pls', 'vspace', 'hspace', 'slatepath'];

         //creates a new schema to to keep preexisting styles
         editor.model.schema.extend('$root', { allowAttributes: allowedAttributes });
         editor.model.schema.extend('$block', { allowAttributes: allowedAttributes });
         editor.model.schema.extend('$text', { allowAttributes: allowedAttributes });

         for (var i = 0; i < allowedAttributes.length; i++) {
             editor.conversion.attributeToAttribute({ model: this.allowedAttributes[i], view: this.allowedAttributes[i] });
         }

         editor.model.schema.extend('paragraph', { allowAttributes: '__style' });

         editor.conversion.for('upcast').attributeToAttribute({
             model: {
                 key: '__style',
                 name: 'paragraph'
             },
             view: 'style'
         });

         editor.conversion.for('downcast').add(dispatcher => {
             dispatcher.on('attribute:__style:paragraph', (evt, data, conversionApi) => {
                 conversionApi.consumable.consume(data.item, evt.name);

                 const viewElement = conversionApi.mapper.toViewElement(data.item);

                 conversionApi.writer.setAttribute('style', data.attributeNewValue, viewElement);
             });
         });
    } 
}

Затем я добавил плагин в файл ckeditor.js

import Extension from "../ckeditor5-extension/src/extension.js";

DecoupledEditor.builtinPlugins = [
    *
    *
    PasteFromOffice,
    Table,
    TableToolbar,
    Extension
];

После этого я запускаю npm run build, который генерирует ckeditor.js в папке сборки.Затем я скопировал ckeditor.js (и соответствующие файлы перевода) из папки сборки в папку assets моего углового проекта.

Затем добавьте мой пользовательский редактор в мой файл.

import * as CustomEditor from 'src/assets/ckeditor.js';
public Editor = CustomEditor;

В tsconfig.json

"compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowJs": true,
    "importHelpers": true,
    "target": "es2015",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  }

В консоли, когда я распечатываю плагины для редактора, мой пользовательский плагин показывает неопределенный.

["Essentials", "Alignment", "FontSize", "FontFamily", "Highlight", "CKFinderUploadAdapter", "Autoformat", "Bold", "Italic", "Strikethrough", "Underline", "BlockQuote", "CKFinder", "EasyImage", "Heading", "Image", "ImageCaption", "ImageStyle", "ImageToolbar", "ImageUpload", "Link", "List", "MediaEmbed", "Paragraph", "PasteFromOffice", "Table", "TableToolbar", undefined]
...