Состояние удовлетворенного

Состояние удовлетворенного

Разметка, созданная редакторами wysiwyg, ужасна. Он завален атрибутами стиля и часто даже не является действительным HTML (отсутствуют закрывающие теги, перекрывающиеся стили и т. Д.). Существуют ли какие-либо устоявшиеся решения проблем, представленных contenteditable? Если нет, как я могу его создать?

Неверный HTML

Например, после ввода неупорядоченного списка, за которым следует строка текста, в популярный редактор форматированного текста, я получаю следующий HTML-код:

<ul><li>foo</li><li>bar</li></ul><div>baz

Откуда появился тег div? Почему не закрывается? Почему не параграф - конечно, как следует закрытый? Можно ли это предотвратить?

Несемантический HTML

Другой редактор написал следующее:

<p style="font-size:11pt; line-height:115%; margin:0pt 0pt 0pt 36pt; text-indent:-18pt"><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">●</span><span style="font:7.0pt &#39;Times New Roman&#39;">     </span><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">Lorem</span></p><p style="font-size:11pt; line-height:115%; margin:0pt 0pt 0pt 36pt; text-indent:-18pt"><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">●</span><span style="font:7.0pt &#39;Times New Roman&#39;">     </span><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">ipsum</span></p>

Это допустимая разметка, но семантически ужасная! Вместо стилизованного неупорядоченного списка редактор вставил буквальные символы маркера. Как разработчик я понятия не имею, что делать с разметкой, созданной contenteditable. Что касается стиля, это совершенно бесполезно.

Замены

До недавнего времени я использовал Markdown как инструмент для генерации семантически правильного HTML от пользователей. Однако в Markdown отсутствуют некоторые функции, о которых просят мои пользователи (простота использования для нетехнических специалистов, позиционирование изображений и т. Д.). После поиска редактора wysiwyg, который в течение нескольких недель создавал бы правильную семантическую разметку, я обнаружил, что contenteditable делает это невозможным. Кто-то где-то говорит о решениях этих проблем? Как я могу принять участие.

[Обновить] Разъяснение

Полагаю, я не был полностью ясен с самого начала. Я не спрашиваю, как можно обойти проблемы contenteditable. Я нашел много таких, в том числе большинство из упомянутых ниже. Я пытаюсь найти первопричину этих проблем. Почему contenteditable так сломан? Это связано с техническими проблемами или проблемами с устаревшим кодом? Более того, что делается для его устранения и где эта работа проводится?

[Обновить] Документы Google

HTML-код во втором примере выше взят из редактора Google Docs Editor. Однако, как указывает AlfonsoML ниже, Документы Google не используют contenteditable в своем редакторе. Их методика объясняется здесь.


person brad    schedule 30.07.2010    source источник


Ответы (6)


Я подозреваю, что он находится в таком состоянии по нескольким причинам:

1.) Стандарт HTML5, который определяет его, не определяет, что он должен выводить, оставляя каждую реализацию решать за себя.

2.) Редактор не знает, нужно ли вам точное представление или семантическое. Часто это компромиссы.

3.) Похоже, Mozilla перетащила старый код Netscape Mail / Composer в свою реализацию designMode, а затем перетащила его в contentEditable. Он по-прежнему использует те же пунктирные очертания и маленькие красные ручки, которые существовали 10 лет назад, и я подозреваю, что огромное количество устаревшего кода.

4. Похоже, что Internet Explorer делал то же самое, а IE вообще никогда ничего не делал должным образом. Он по-прежнему тянет за собой свое наследие в виде причуд и режимов «совместимости».

5.) На самом деле он используется только в системах CMS и форумах / комментариях, и обычно они имеют довольно тяжелые оболочки вокруг реализации. Я не видел особого использования в других местах, особенно «голых».

6.) Есть несколько успешных онлайн-текстовых процессоров и еще меньше приложений WYSIWYG или верстки страниц. Нет необходимости создавать точных редакторов. Что еще хуже, Microsoft продает автономное программное обеспечение, такое как Word и Expressions, которым определенно повредит рост количества онлайн-редакторов, особенно высококачественных бесплатных.

7.) У Microsoft есть наследие создания инструментов, которые генерируют неверный и раздутый HTML-код, который до сих пор существует в Outlook 2010 и пакете Office.

8.) Иногда одна и та же команда выбора и редактирования может быть применима к нескольким возможным объектам, занимающим одно и то же пространство, и редактор никогда не может точно знать, какой из них вы хотели изменить. Также команда редактирования может вызвать разделение элемента неопределенным или неожиданным образом (опять же, он не будет знать, какой из них вы предпочтете).

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

person SpliFF    schedule 11.08.2010

Это сложный вопрос, который все решают по-своему.

Я знаю о следующих возможностях:
* Просто отпустите (худший вариант)
* Попробуйте исправить HTML самостоятельно (TinyMCE и CKEditor пытаются сделать это с помощью различные показатели успеха)
* Используйте плагин, такой как XStandard
* Используйте DOM, чтобы создать свой собственный редактор - сделайте каретку из DIV, обработайте выделение, редактирование и все остальное самостоятельно. Вот как это делает, например, Google. Однако для этого требуется много кода.

person Karel Petranek    schedule 30.07.2010
comment
Спасибо за ответ. Я никогда не слышал о XStandard, но обязательно проверю. Что касается создания собственного редактора, то второй пример, приведенный выше, взят из Google Docs - хотя их редактор и хорош, содержание, которое он выплевывает, вызывает смех. - person brad; 31.07.2010

Для браузеров, поддерживающих contenteditable, решение можно довольно легко найти; используя, например, jQuery для сохранения данных и присоединения новых элементов к редактируемому контенту (с помощью кнопок, очевидно) можно получить простой редактор WYSIWYG с очень небольшими усилиями.

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

Редактор, использующий contenteditable, будет и легко развернут, и легковесен, действительно ли это что-то стоящее разработки, ИМХО.

Изменить: перечитав ваш вопрос, я понял, что вы действительно искали работающее решение, отличное от contenteditable. Я не знаю почему; AFAIK contenteditable создает допустимую разметку, и если вы получите полный контроль (позволяя пользователям вставлять элементы и изменять их свойства через ваш пользовательский интерфейс), это также будет семантическим. Насколько мне известно, текущие редакторы WYSIWYG не используют contenteditable, но я могу ошибаться.

person You    schedule 30.07.2010
comment
Я согласен, но как мне убедиться, что то, что выходит из редактора, является правильным и семантическим? - person brad; 31.07.2010
comment
Убедиться, что он действителен, не требуется, хотя можно проверить его при сохранении и вернуть ошибку, если он недействителен. В определенной степени семантичность может быть обеспечена путем принуждения пользователя к использованию вашего пользовательского интерфейса. Это не помешает пользователям составлять списки из абзацев и тому подобного, но подобные вещи можно довольно легко исправить перед сохранением (при условии, что пользователь придерживается разумных стандартов, например, использует * для обозначения списков). - person You; 31.07.2010

Я думаю, что ваша проблема заключается в попытке использовать такой инструмент, как Google Docs, как указано в предыдущем комментарии, вместо инструмента, который действительно ориентирован на редактирование HTML.

Да, оба типа являются WYSIWYG, но я не думаю, что целью GDocs является создание хорошего HTML, вместо этого они сосредоточены на предоставлении альтернативы MS Word, даже если им придется идти и создавать странный HTML по пути.

Я не могу поверить, что вы изучали это в течение нескольких недель и еще не используете CKEditor или TinyMCE. Оба решения включают в себя варианты использования атрибутов, классов или стилей для вывода, просто посмотрите на образцы, немного почитайте документацию и настройте ее в соответствии с вашими потребностями.

person AlfonsoML    schedule 31.07.2010
comment
Я не пытаюсь использовать Google Docs в качестве инструмента для редактирования HTML. Это был просто пример вывода, который генерирует contenteditable. - person brad; 02.08.2010
comment
Дело в том, что Документы Google не используют contentEditable: googledocs.blogspot.com/2010/05/ - person AlfonsoML; 02.08.2010
comment
Даже сейчас, год спустя, iPad Safari даже не поддерживает contentEditable, что делает бесполезными решения на основе contentEditable, такие как TinyMCE. Google Docs, как уже упоминалось, использует реализацию редактирования, полностью основанную на Java-Script, в комплекте с крошечным элементом div шириной 2 пикселя для курсора! - person Triynko; 12.09.2011
comment
Скоро будут выпущены новые версии CKEditor и TinyMCE, включая поддержку iOS5, так что все немного изменилось. Другой вопрос, окажется ли полезным использование планшета для редактирования контента или, в конце концов, лучше использовать физическую клавиатуру. - person AlfonsoML; 12.09.2011

Я ответил на очень похожий вопрос в редактируемых текстовых редакторах содержимого - почему ситуация выглядит вот так и что мы, авторы редакторов WYSIWYG, можем с этим поделать.

Да, я знаю, что этому вопросу 2 года, но он все еще актуален.

person Reinmar    schedule 18.04.2013

Medium.js !!

Medium.js сохраняет HTML-код contenteditable семантическим, простым и чистым. Medium.js также поддерживает заполнители, автоматическое создание HR (или BR, или P), события, горячие клавиши, внедрение простых и сложных элементов и многое другое!

person eightyfive    schedule 11.07.2014