1

Тема: [релиз] Дополнение стандартного редактора разметкой Textile

Хотелось бы увидеть возможность использовать вместо стандартного WYSYWIG-редактора Textile-форматирование (в начале файла класса в комментариях указаны все виды форматирования). Это сродни вики-разметке, но более гибкое и полное.

То есть редактирование материала происходит в обычном тестовом формате, где пользователю не нужно знать html или bb-коды.

Из вкусного:
1. Создание таблиц
2. Создание сносок

Ну и, ко всему, там еще и типограф встроенный есть.

Увидеть в действии можно здесь. Но там старенькая версия 2.0 от 2006 года, по ссылке выше последняя версия 2.4, в котрой исправлено множество ошибок, в том числе правильная обработка сносок после кириллистических символов.

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

18.04.2014 18:36:29. Текст был изменен (boo).

2

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Мне кажется, что подобные разметки придуманы для упрощения жизни разработчикам, а не пользователям.

Большинству пользователей подходит именно визуальный редактор. Например, его разрабатывают для википедии: http://habrahabr.ru/post/146345/

3

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Соглашусь с Романом, визуальный редактор все таки самый удобный, чем любые разметки, даже самые упрощенные.
Более того, большое количество разных разметок создаёт путаницу для пользователей, на одном сайте одна, в википедии другая, где-то BBкоды, уж проще один HTML изучить. Давайте не будем вносить свой вклад в хаос :)

20.07.2012 18:30:22. Текст был изменен (Igor1).

4

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Роман, позиция понятна. Тогда хотелось бы получить рекомендации куда смотреть, чтобы сделать это своими силами.

5

Re: [релиз] Дополнение стандартного редактора разметкой Textile

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

Сейчас код страницы хранится в поле pagetext таблицы articles. Расширение при установке должно создавать дополнительное поле, например, source. При загрузке страниц для редактирования в админке расширение должно подменять обращение к pagetext на source. При сохранении исходник должен сохраняться в source, а преобразованный вариант в pagetext.

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

6

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Да, стало гораздо понятнее, благодарю. Буду пробовать.

7

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Итак, друзья, всё получилось!

И получилось даже лучше, чем ожидалось.
Плагин бесплатный и распространяется совершенно свободно — пользуйтесь!

Обработка разметки Textile работает в стандартном редакторе по умолчанию, при этом оба работают совместно и друг другу не мешают.

При установке плагина hm_textile (.7z, 20kb) ссылка появится после завершения тестирования создается дополнительная таблица, где сохраняется текст до обработки текстайлом (как это обычно делает встроенный редактор, но таблица при этом дополнительная и не влияет на работу движка). После сохранения документа происходит две записи: неформатированный текст до обработки текстайлом в отдельную таблицу, и, собственно, форматированный текст в поле документа.

Выглядит это вот так (не обращайте внимания на кнопки админки, это происходит при изменении размера окна до неприлично маленького):

http://i.minus.com/ibiAC7HMeHQC6R.png

Движок отображает только свою обычную часть — форматированный документ. На скриншоте видно, что в документе есть как html-тэги, так и textile-разметка. Также плагин сообщает о том, что разметка включена.

Да, и ещё один момент, про который надо помнить при использовании плагина: предпросмотр из админки будет показывать только то, что уже отформатировано в стандартном редакторе. Текстайл-форматирование не применяется и показывается в сыром виде, без превращения в html. Это происходит потому, что данные из редактора просто берутся и передаются ява-скриптом во вкладочку предпросмотра. Текстайл-форматирование работает как php-класс, и посмотреть изменения можно только открыв вкладку в браузере с живым сайтом (ссылка "Просмотреть опубликованное ↑" справа).

После удаления плагина (не отключения, а именно удаления) таблица с сырым текстом до обработки текстайлом удаляется вместе с самим плагином, но ничего при этом не ломается, весь контент остаётся на месте. А текст для редактирования попадает в админку уже с расставленными html-тэгами, как обычно.

В итоге мы имеем двойной эффект: администратор может быстро подготовить текст в текстайле, а обычный пользователь работает как обычно.

Ура, товарищи!

18.04.2014 18:54:35. Текст был изменен (boo).

8

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Здорово, что у вас получилось разобраться с расширением. Пока я только заглянул в код, еще не тестировал.

Если хотите, я размещу ссылку где-нибудь здесь: http://s2cms.ru/extension/
И если вы можете пользоваться svn, могу дать доступ к репозиторию для хранения кода.

9

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Роман пишет:

Здорово, что у вас получилось разобраться с расширением. Пока я только заглянул в код, еще не тестировал.

Если хотите, я размещу ссылку где-нибудь здесь: http://s2cms.ru/extension/

Ну, разобрался не я, а коллега по работе. Моя заслуга лишь в желании получить конкретную вещь.

А разместить, конечно же, можно. Всё-таки развитие идёт, мало ли кому понадобится.

10

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Внимание, в настоящий момент идет тестирование и доработка плагина.

Возникла проблема с удалением элементов в админке с включенным плагином.
Так что лучше пока его отключить.

11

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Проблема в том, что в расширении подменяется запрос удаления страницы на запрос удаления из таблицы textile_source:

<hook id="fn_delete_item_and_children_pre_del_art_qr"><![CDATA[
    $query = array(
        'DELETE'    => 'textile_source',
        'WHERE'    => 'topic_id = '.$id
    );
]]></hook>

Поэтому сама страница не удалялась. Вместо этого нужно делать дополнительный запрос на удаление из textile_source:

<hook id="fn_delete_item_and_children_start"><![CDATA[
    $hm_textile_query = array(
        'DELETE'    => 'textile_source',
        'WHERE'    => 'topic_id = '.$id
    );
    ($hook = s2_hook('hm_textile_pre_src_del_qr')) ? eval($hook) : null;
    $s2_db->query_build($hm_textile_query) or error(__FILE__, __LINE__);
]]></hook>

12

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Роман, благодарю!

Теперь удаляется. Но как-то странно: при нажатии «удалить» пропадает, но тут же появляется обратно. Исчезает после обновления дерева через «обновить». Так и должно работать?

И ещё вопрос. Существует ли возможность показывать статью с текстайлом во вкладке «предпросмотр» в админке? Предусмотрен ли для этого хук? Можно ли это реализовать через добавление пары нужных строк в уже существующий плагин?

15.04.2014 16:01:31. Текст был изменен (boo).

13

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Если удаленная страница сразу же появляется, это значит, что с сервера не приходит подтверждение об успешном удалении. Либо вы не удалили все операторы отладочного вывода, либо в процессе удаления возникает какая-то ошибка. Надо проверять в средствах разработки.

Возможность, конечно, есть. Вот функция, которая срабатывает при переключении на вкладку предпросмотра: http://s2cms.ru/trac/browser/trunk/_adm … n.js#L1335
В ней нет возможности перехватывать сам текст, дорабатывается примерно так:

function Preview ()
{
    var frm = document.forms['artform'];
    if (!frm || !frm.elements['page[text]'])
        return;

    $(document).trigger('preview_start.s2');

    var d = window.frames['preview_frame'].document,
        s = str_replace('<!-- s2_title -->', '<h1>' + frm.elements['page[title]'].value + '</h1>', template),
        text = frm.elements['page[text]'].value;

    var result = Hooks.run('fn_preview_filter_text', text);
    if (result)
        text = result;

    s = str_replace('<!-- s2_text -->', text, s);

    d.open();
    d.write(s);
    d.close();
}

Я этот код не тестировал, привел в качестве иллюстрации. Протестируйте и пришлите мне готовый вариант, я включу в код движка.

Конструкция Hooks.run в этом примере позволяет расширениям перехватить содержимое текстового редактора text. В расширении нужно добавить перехватчик, примерно как здесь: http://s2cms.ru/trac/browser/extensions … log.js#L88

В вашем случае в аргументе функции будет приходить text. Подключаете js-реализацию textile, пишете

Hooks.add('fn_preview_filter_text', function (text) { return Textile(text); });

и на этом всё готово :)

14

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Да, действительно. После удаления отладочной строчки всё работает без нареканий.

А по поводу текстайла, тут сложнее. Js-реализации я для него не знаю, вряд ли она есть.
Я, конечно, поизучаю ещё, но сильно вряд ли.

В любом случае — огромное спасибо за советы и помощь!

15

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Вот что гугл выдает первой ссылкой: http://borgar.github.io/textile-js/
Вроде работает.

В крайнем случае в исходник фрейма просмотра можно внедрить код, который будет делать аякс-запросы на сервер для перекодировки своего содержимого. Но это сложнее дополнительной библиотеки.

16

Re: [релиз] Дополнение стандартного редактора разметкой Textile

Ого! Раньше не было.

Значит буду пробовать разобраться.