Project

texter

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
* Лёгкий вывод блочных и инлайновых текстов, отформатированных с помощью Textile, Markdown или simple_format * Дефолтные тексты в I18n * При редактировании тексты сохраняются в базе * Подключаемые обработчики (препроцессоры) — можно легко подключить «Типограф Лебедева» * Удобный, встроенный в сайт интерфейс редактирования
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 3.2.9
>= 3.2.3
 Project Readme

Rails-engine для редактирования блоков текста

Начальная идея изложена в посте «Турборедактирование кусков текста», Texter развивает эту идею.

  • Лёгкий вывод блочных и инлайновых текстов, отформатированных с помощью Textile, Markdown или simple_format или своего форматтера
  • Дефолтные тексты в I18n
  • При редактировании тексты сохраняются в базе
  • Подключаемые обработчики (препроцессоры) — можно легко подключить Типограф Лебедева или другой
  • Удобный, встроенный в сайт интерфейс редактирования

Подключение

# Gemfile
gem 'texter'

# config/routes.rb
mount Texter::Engine => '/texter'

Миграция

rake texter:install:migrations
rake db:migrate

В assets pipeline нужно добавить texter/texts.js и texter/_texts.scss соответственно.

Должен быть подключен gem jquery-rails.

Texter по-умолчанию не имеет ограничений доступа.

Как пользоваться

Пользоваться приходится следующими хелперами:

  • block(path, options = {}) — возвращает отформатированный текст для блочного элемента;
  • inline(path, options = {}) — для инлайнового (особенности вывода указаны для каждого форматтера по отдельности).

pathI18n-идентификатор текста в скопе texter:

ru:
  texter:
    pages:
      index:
        header: Песня Винни-Пуха
        intro: |
          Вот горшок пустой!

          Он предмет простой!

в pages/index аналогично стандартному хелперу translate можно использовать полную версию или сокращённую:

<h1><%= inline "pages.index.header" %></h1>

<div><%= block ".intro" %></div>

получим, предсказуемо:

<h1>Песня Винни-Пуха</h1>

<div><p>Вот горшок пустой!</p><p>Он предмет простой!</p></div>

В options-хеше можно передать :locale и :formatter.

Форматтеры

Texter может форматировать текст следующими способами:

:simpleвключен по умолчанию

Использует хелпер simple_format.

Хелпер inline выдаёт текст без обработки.

:textile

Использует RedCloth (можно настроить rules и restrictions, смотрите Texter::TextileFormatter).

Нужно установить джем:

# Gemfile
gem 'RedCloth', '~> 4.2.9'

Хелпер inline выдаёт весь текст, обработанный с помощью :lite_mode restriction.

:markdown

Использует RDiscount (можно настроить расширения, смотрите Texter::MarkdownFormatter).

Нужно установить джем:

# Gemfile
gem 'rdiscount'

Хелпер inline выдаёт содержимое первого <p> или <h\d>.

Установить глобальный форматтер можно так:

# config/initializers/texter.rb
Texter.formatter = :textile

Для создания других форматтеров смотрите базовый класс Texter::Formatter.

Обработчики

Texter позволяет подключить несколько последовательных обработчиков текста (например для типографики), обработка происходит перед сохранением текста в базу.

По дефолту используется единственный Texter::CleanPreprocessor (:clean), который просто удаляет символы \r.

Также Texter имеет встроенную поддержку Типографа Лебедева, подключить можно следующим образом:

# Gemfile
gem 'art_typograph', '~> 0.1.1'

# config/initializers/texter.rb
Texter.preprocessors << :art_typograph

Для создания других обработчиков смотрите базовый класс Texter::Preprocessor.

Ограничение доступа

Чтобы выяснить и показать на сайте, можно ли редактировать текст, Texter вызывает метод can_be_edited? презентера Texter::TextPresenter (по-дефолту true, то есть все могут редактировать).

Пример настройки доступа на уровне контроллера:

# app/controllers/texter/texts_controller.rb
require_dependency Texter::Engine.root.join("app/controllers/texter/texts_controller").to_s

class Texter::TextsController
  before_filter :authenticate_user!
end

Многоязычность

По умолчанию Texter редактирует текст в текущей локали, но его можно быстро подкрутить для работы с несколькими. Русская и английская версия минимальными усилиями:

После установки миграции поправим её:

class CreateTexterTexts < ActiveRecord::Migration
  def change
    create_table :texter_texts do |t|
      t.string :path, :null => false
      t.text :body_ru
      t.text :body_en
    end

    add_index :texter_texts, :path, :unique => true
  end
end

Настроим модель:

# config/initializers/texter.rb
Texter.bodies = %w{body_ru body_en}

# app/models/texter/text.rb
require_dependency Texter::Engine.root.join("app/models/texter/text").to_s

class Texter::Text
  def body
    send("body_#{I18n.locale}")
  end

  def default_attributes
    {
      :body_ru => get_body(:locale => :ru),
      :body_en => get_body(:locale => :en)
    }
  end
end

Обновления

Читайте твитторд Прогерского говна.