2016-09-16 5 views
0

Я пытаюсь манипулировать содержимым, читаемым RTE. RTE размещает тег <br> для Shift + Введите. Для соответствия WAI необходимо заменить <br> на <br aria-hidden='true'>.Прицельно заменить тег разным значением - AEM

Пробовал следующее JavaScript использования API, но ниже не работает, он держит тег как

text.replaceAll("<br>","<br aria-hidden='true'>");

Если я заменить какой-то иной тег заменяет значение правильно

text.replaceAll("<br>","<div>Something</div>");

Пробовал то же самое в Java Использовать API также, но не работает. Любые указатели помогут.

+0

проверить, будет ли замена с
, но содержит известный правильный атрибут данных, потому что это похоже на подтверждение проверки тега. например, попробуйте
должно быть
(закрытый тег) также как вы, наконец, выведите свой html? возможно, это просто очистит ваш атрибут. – ub1k

+0

@ ub1k Это прекрасно работает с известным атрибутом, например. 'Class'. WAI является стандартом W3C, ожидал его работы. –

ответ

1

Плагин rte, который вам нужно переопределить, - KeyPlugin присутствует на /etc/clientlibs/granite/coralui2/optional/rte/js/core/plugins/KeyPlugin.js.

Вокруг линии 254, когда он создает <br> элемента, добавить атрибут с помощью
newBr.setAttribute('aria-hidden', true);

Debug Совет: Вы можете установить точку отладки в Chrome на этот файл и изменить код во время выполнения (поиск KeyPlugin) /etc/clientlibs/granite/coralui2/optional/rte.js

Как только вы сделаете это, при нажатии кнопки ok вы увидите, что <br aria-hidden="true"> отправлено на сервер в сетевой консоли.

После этого вы, вероятно, столкнетесь с защитой XSS Sling, которая удаляет этот атрибут из полученного HTML. Посмотрите на этот журнал

org.apache.sling.xss.impl.HtmlToHtmlContentContext AntiSamy warning: The br tag contained an attribute that we could not process. The aria&#45;hidden attribute has been filtered out, but the tag is still in place. The value of the attribute was "true".

Я знаю двух способов борьбы с этим.

  1. Используйте «небезопасный» контекст в поле зрения.
  2. Переопределить /libs/sling/xss/config.xml и изменить аттестат <br>.
+0

Спасибо Абхишек. Это работает на стороне AEM. Для классического интерфейса аналогичный файл присутствует в 'libs/cq/ui/rte/core/plugins/KeyPlugin.js'. Не удалось выполнить наложение с использованием опциона OLEB Overlay. Получил 'org.apache.sling.commons.json.JSONException: Неверный объект.« Необходимо проверить это. –

+0

Это должно быть возможно, создав в своем проекте папку clientlib с категорией «rte.coralui2», а затем переопределив JS. Создал образец [gist] (https://gist.github.com/abhardwaj4/8716352d2926e0b45fcf6e1f38d854eb) для него. – Abhishek

1

Если вы посмотрите на /libs/cq/ui/rte/core/DomProcessor.js и /libs/cq/ui/rte/core/HtmlProcessor.js в CRXDE, здесь вы найдете много конкретных тегов.

В настоящее время существует несколько способов исходящее -

  1. Выяснить в нужном месте, чтобы добавить свой собственный обработку путем наложения одного из двух JS (я не уверен, если JS накладывания работы или нет, поскольку они являются статическими Ресурсы).
  2. В вашей логике визуализации, в которой вы используете API-интерфейс Java, добавьте настраиваемый шаг обработки на основе токенизации строки для обработки узла <br> и добавления к ним атрибутов.
  3. Напишите пользовательский регистратор для обработки тега <br> и добавьте к нему атрибуты. Make имеет конфигурацию, позволяющую вносить изменения в будущем.
  4. Используйте JQUERY для обработки элемента <br> и добавьте к нему свои настраиваемые атрибуты.

Что-то, что я еще не изучил, это правила HTML, которые могут быть определены или настроены для RTE, если у вас есть время, чтобы выяснить, можно ли определить правило для достижения того, что вы хотите, что было бы лучшим решением по моему мнению.

+0

Спасибо Ameesh за ответ. Параметр JQuery работает, но мы испускаем только разметку из AEM. Нужно спросить слой интерфейса для этого, если мы не сможем обрабатывать сторону AEM. Вам нужно попробовать другие варианты. –