Typofilter.js
Когда-то давно, полтора года назад, разработал для домовой страницы модуль Typofilter, исправляющий дефисы на тире, заменяющий
Во-первых, так как модуль по сути — фильтр в форматах ввода, то чтобы насладиться оттипографленным текстом заметки или комментария, нужно нажать «Сохранить» или хотя бы «Предпросмотр», то есть перезагрузить страницу. Во-вторых — непонятно, почему этим должен заниматься сервер, когда на самом деле написание красивого текста — забота клиента (то есть браузера). В третьих, я как раз недавно включил для всех редактор BUEditor, и кнопка «Типограф» была бы очень кстати.
В общем, решил я портировать «Типограф» в JavaScript. Поначалу подумал, что это вообще ерунда — чего там, все регулярки-то уже написаны. Но в процессе выяснилось, что, оказывается, правила построения регулярных выражений в PHP и в JavaScript несколько отличаются. Но где наша не пропадала. Поломал немного башку (люблю я регулярки) и сделал-таки скрипт, выполняющий типографскую работу на стороне клиента.
Скрипт в конце заметки приложен для всех желающих скачать и воспользоваться. А далее — некоторые подробности его работы.
Опции фильтрации
— замена
— замена
— замена
— замена нескольких точек на многоточия;
— замена
— замена
— замена
— исправление кавычек (использование кавычек типа «елочка»);
— исправление дефисов на тире в тексте;
— исправление дефисов на короткое тире в числовых диапазонах;
— удаление пробелов между числом и знаком процента.
Отличия от модуля Typofilter
Скрипт был изначально сделан для интеграции в WYSIWYG-редакторы (BUEditor, CKEditor, TinyMCE) и поэтому не добавляется на страницу никаким модулем Друпала. В связи с чем у скрипта, в отличие от модуля Typofilter, отсутствуют настройки включения/выключения опций замены и добавления безопасных блоков (блоков текста, которые не будут подвергаться типографированию). Однако можно добавлять эти блоки прямо в код скрипта: место добавления отмечено комментарием.
В настоящий момент безопасным блоком считается текст, заключенный между тегами:
— <safeblock></safeblock>
— <pre></pre>
— <style></style>
— <script></script>
— <code></code>
— <!-- -->
— <?php ?>
— <drupal6></drupal6>
— <php></php>
— <cpp></cpp>
— <object></object>
— <javascript></javascript>
— <qt></qt>
Кроме того, лично я не испытываю нужды в расстановке разных вложенных кавычек (елочки → лапки → елочки …), этой опции в скрипте тоже нет. Но если кому понадобится — могу добавить.
Интеграция в BUEditor
Интегрировать скрипт в BUEditor довольно просто.
1. Скопируйте скрипт typofilter.js на сайт, лучше всего в директорию %modules/bueditor/library, где %modules — директория, в которой вы храните дополнительные модули (напр. sites/all/modules/).
2. Пройдите на страницу admin/settings/bueditor/ и выберите редактор, к которому нужно добавить кнопку.
3. В секции Editor paths → Editor specific library files добавьте новую строчку, содержащую путь к файлу typofilter.js. Если вы копировали его в bueditor/library, это будет строчка %BUEDITOR/library/typofilter.js.
4. Нажмите «Сохранить конфигурацию».
5. В секции Import Buttons вставьте приведенный ниже код в поле Editor Code и нажмите «Импорт».
'buttons' => array (
0 => array (
'title' => 'Typograph!',
'content' => 'js:
s = E.getSelection();
if (s != \'\') {
E.replaceSelection(Typographus_Lite_UTF8.process(s));
} else {
E.setContent(Typographus_Lite_UTF8.process(E.getContent()));
}',
'icon' => 'Типограф',
'accesskey' => '',
'weight' => '18',
),
),
)
6. Нажмите «Сохранить конфигурацию».
7. Все, скрипт установлен, кнопка появилась, можно пользоваться.
Кстати, скрипт умеет типографировать как весь текст, введенный в форму, так и только выделенную часть текста. Поиграться можно прямо в форме комментариев к заметке.
Интеграция в CKEditor
1. Распакуйте архив и скопируйте директорию typofilter в директорию plugins установленного модуля ckeditor (напр. sites/all/modules/ckeditor/plugins).
2. В конец файла ckeditor.config.js (в корне директории установленного модуля ckeditor) добавьте строки:
CKEDITOR.plugins.addExternal('typofilter', Drupal.settings.ckeditor.module_path + '/plugins/typofilter/');
3. Добавьте кнопку в нужный тулбар. Для этого отредактируйте тот же файл
ckeditor.config.js. Например:4. Сбросьте кэш браузера и перезагрузите страницу с редактором, чтобы подтянулся новый скрипт настроек.
5. Все, кнопка установлена.
Для редактора CKEditor скрипт Typofilter.js выполнен в виде плагина. Однако работа плагина ограничена типографированием выделенного в редакторе текста, а при нажатии на кнопку без выделения — ничего не происходит. Кроме того, ввиду серьезнейшей wysiwygнутости редактора, все теги при типографировании удаляются, так что рекомендуется сначала расставлять кавычки и тире, а уже потом — ссылки и разметку.
Интеграция в TinyMCE
Обратите внимание, что плагин для TinyMCE рассчитан на установку этого редактора через модуль wysiwyg.
1. Распакуйте архив и скопируйте директорию typofilter в директорию plugins по месту установки библиотеки tinymce. Путь должен быть примерно такой: sites/all/libraries/tinymce/jscripts/tiny_mce/plugins
2. К файлу tinymce.inc в директории wysiwyg/editors примените прилагающийся в архиве патч tinymce.inc.patch.
3. Включите кнопку Typofilter на странице админки модуля Wisywig, то есть поставьте галочку в настройках тех профилей, в которых вам нужна кнопка.
4. Все, кнопка готова.
Плагин для TinyMCE также работает только с выделенным текстом. Если при обработке в тексте попадаются теги (BBCode или просто) — после обработки они появятся в тексте. Чтобы их убрать, нажмите стандартную кнопку Cleanup messy code.
Сам я CKEditor и TinyMCE не использую и поэтому улучшать плагины в ближайшее время не намерен. Но если кто подредактирует и пришлет — буду признателен и стану прославлять этого человека на каждом углу. Все пожелания, предложения и модификации с радостью будут рассмотрены, пишите.
| Прикрепленный файл | Размер |
|---|---|
| typofilter.js.tar.gz | 2.05 кб |
| typofilter.js.ckeditor.tar.gz | 3.04 кб |
| typofilter.js.tinymce.tar.gz | 3.71 кб |
Для FCK типограф есть тут:
http://drupal.ru/node/21349
Для TinyMCE:
http://drupal.ru/node/23149
Ну и для BuEditor есть :)
http://habrahabr.ru/blogs/drupal/83294/
Думаю, что да. Надо?
unic, тот что на хабре — серверный, в отличие от. И требует связи с постороним сайтом, в отличие от. И не любит работать с тегами в тексте. В отличие от.
Да, разные подходы. У каждого свои достоинства и недостатки (работа с тегами в недостатки типографа от Лебедева не входит).
А люди говорят — входит, как быть? :)
Очевидно, попробовать самому :)
Не, ну я-то не буду, мне и других недостатков хватает, чтобы не пробовать :) А вообще, я весь набор типографов еще в 2009-м рассматривал, прежде чем typofilter сделать.
graker, спасибо. Прикручу к своему сайту. А то на днях устал менять тире на дефис. Для ckeditor тоже было бы замечательно, чтобы на корпоративные сайты прикрутить. Хотя от их вида меня воротит, т.ч. с типографией или без — хрен редьки не слаще.
Сделаю для ckeditor на днях, да.
Просто не сразу, т.к. я им сам не пользуюсь — надо поставить, посмотреть.
У меня на сайте люди пишут в таком виде. http://krd.name/gov/drugoe/pozor/1998.html (один из примеров)
Не очень хорошо, согласись? Как с ЭТИМ бороться?
Либо ставить принудительные lowercase и т.п. Либо ругать, наказывать и банить.
Лично я считаю — лучше второй вариант.
Лично я считаю — лучше второй вариант.
да крупные буквы это еще полбеды. Тут запятые расставлены как на пьяную голову писали. Одна запятая так,другая так , и т.п.
Никаких автоматизированных средств для борьбы с безграмотностью и глупостью нет. С неаккуратностью — тем более.
Только массовые расстрелы спасут Родину!!!
Чтото не хочет он у меня работать на ckeditor-7.x-1.9, вроде все правильно добавил, но кнопка нигде не появляется...
Я же по этому сообщению не пойму, в чем дело, правда?
Подсказать могу только одно: если не ставится по тексту выше, ищешь мануал как добавлять свои кнопки к CKE — и делаешь как там написано, используя мой скрипт.
Пару месяцев назад ставил, как раз на CKEditor в семерке — работало.
upd: А, вспомнил. Там надо скрипт переоформить в соответствии с правилами JS в семерке. Нетрудно, в принципе. Если найду свой вариант где-нибудь — чуть позже приложу.
Забавно, но ничего что написано в статье делать не нужно :)
Нужно только в настройках профиля CKEditor включить плагин и вытащить кнопку на панель там же... :)
Только вопрос, можно ли гдето менять правила замены, например добавить убирание двойных пробелов и пробелов перед точкой?
Ну да, в семерке проще.
Менять можно только в коде. В главной функции, там где rules_main и прочие rules — прямо в массив можно добавлять. Ключ — регулярное выражение для поиска, значение — то, на что заменять.
А друпал разве двойные пробелы не убирает? Я забыл уже.
что-то не нашел
Да чего там искать. Вот в функции типографа:
var rules_main = {};
//fix dashes
rules_main[' +(?:--?|—|—)(?=\\s)'] = sym['nbsp'] + sym['mdash'];
rules_main['^(?:--?|—|—)(?=\\s)'] = sym['mdash'];
rules_main['(?:^|\\s+)(?:--?|—|—)(?=\\s)'] = "\n" + sym['nbsp'] + sym['mdash'];
//fix digit-dash
rules_main['(\\d{1,})(-)(?=\\d{1,})'] = '$1' + sym['ndash'];
//glue percent
rules_main['([0-9]+)\\s+%'] = '$1%';
Дописываешь новые элементы в rules_main — вот тебе новые правила.
да не, я про
А друпал разве двойные пробелы не убирает? Я забыл уже.
это разобрался, спасибо :)
А, понял :)
Ну значит не убирает. Я помню, что он где-то их убирал, лишние пробелы. В начале абзаца, что ли.
а подскажите как в точку зачменить? пробовал экранировать \ — не хочет
Какую точку, чем заменить?
Черт, половина предложения кудато пропало :)
Я имею ввиду как заменить " ." на "."? Да я знаю что это делается с помощью regex, но никак не разбирусь в них :(
Просто в случае с запятой прокатило так:
rules_main[' ,'] = ','; а с точкой так не хочет =)
Сейчас времени нет разбираться, найди проверку регэкспов онлайн — их полно. Ну и посмотри в коде скрипта, как три точки на троеточие исправляются, тоже не лишне.
ахты ж емае! двумя \\ нада экранировать, спасибо :)
Да не за что :)













А интеграцию для ckeditor и соответствующего модуля можете добавить?