Как односторонней обработки данных HTML для представления в CKEditor 5? - PullRequest
0 голосов
/ 03 июля 2019

В представлении CKEditor для авторов мне нужно изменить ссылки на файлы, чтобы привязать идентификатор сеанса автора. Однако в реальном контенте для обычных пользователей конкретный идентификатор пользователя добавляется автоматически. Поэтому идентификатор автора не должен сохраняться в содержимом, которое автор редактирует с помощью CKEditor, он просто должен присутствовать в представлении, пока он редактирует, чтобы он мог видеть изображение, например. При сохранении «чистая» ссылка без каких-либо идентификаторов должна быть сохранена.

В CKEditor 5, кажется, есть больше возможностей для достижения такой односторонней фильтрации данных, например с

Однако я не смог найти хороший пример и, соответственно, простой и понятный подход для достижения этой цели. (Мои попытки оказались довольно сложными и не работали должным образом ...) Я предполагаю, что это довольно распространенный вариант использования, поэтому, возможно, я что-то упускаю. Есть ли хорошее решение для этого?


Обновление 1:
Пример ссылки будет:


Обновление 2:
Пока я работал с CKEditor, я сталкивался с такими вещами, которые просто очень неприятны с точки зрения разработчиков. И, похоже, это сделано специально, так как цитата от автора 'fredck':

[...] мы хотим вывести редактор из «HTML Editor», что делает его идеальным решением для «качественной записи контента».

Неявно это означает, что если вы разработчик и у вас есть продвинутые пользователи с расширенными вариантами использования (что, вероятно, может иметь место, если вы используете Stackoverflow), вы не являетесь целевой аудиторией и не должны использовать CKEditor в первую очередь. .

Вы можете прочитать об этом, например, в обсуждении здесь (также это касается другой функции): https://github.com/ckeditor/ckeditor5/issues/592

1 Ответ

1 голос
/ 08 июля 2019

Для изменения загруженных ссылок вы можете написать собственный конвертер, который изменяет полученный href.Вот рабочий пример, который добавляет текущую временную метку к URL-адресам: https://codepen.io/msamsel/pen/zVMvZN?editors=1010

editor.conversion.for( 'dataDowncast' ).add( dispatcher => {
    dispatcher.on(
        'attribute:linkHref',
        ( evt, data, conversionApi ) => {
            if ( !conversionApi.consumable.test( data.item, 'attribute:linkHref' ) ) {
                return;
            }

            if ( data.attributeNewValue ) {
                data.attributeNewValue += `#time=${ ( new Date() ).getTime() }`;
            }
        },
        { priority: 'high' }
    );
} );

Несколько слов о том, как это работает.
Создан прослушиватель, который реагирует на изменения attribute:linkHref (срабатывает только когдаданные все равно получаются, потому что это dataDowncast).Слушатели запускают с приоритетом 'high', чтобы изменить URL, прежде чем фактический плагин Link создаст вывод.Сначала проверяется, не используется ли данный элемент модели, но не потребляет его, потому что мы хотим сохранить нативное поведение, которое снова будет обрабатывать этот же элемент.Значение атрибута увеличивается с отметкой времени, что завершает этот слушатель.После этого запускается собственное поведение, которое имеет приоритет 'normal'.

Аналогичный подход использовался для реализации пользовательских атрибутов ссылки .Подробнее о диспетчере и процессе конвертации можно узнать здесь:

...