Cmsable


Add inline editable content to pages.

Installation

Add to your Gemfile

gem 'cmsable'

Get Dependencies

bundle install

Add to your routes

  mount Cmsable::Engine => '/cmsable'

Install and run the migrations if you want to use the built in model

rake cmsable:install:migrations
rake db:migrate

Cmsable uses CanCan so make sure this is set up in your necessary controller(s) If your users aren't called users then you'll get something like:

undefined local variable or method `current_user' for ...

You need to define the current_ability, e.g.

def current_ability
  @current_ability ||= AccountAbility.new()
end

(From https://github.com/ryanb/cancan/wiki/changing-defaults)

Usage

To use the built in model

In your view files

<%= cms 'identifier' %>

Identifier can be any string or symbol, for example 'Homepage Intro' or :something

For plain text areas pass type: :plain as an option. This way you can put content in any tag you want without worrying about users messing up the markup.

<span><%= cms :identifier, type: :plain %></span>

The problem with the above is that in edit mode you'll end up with invalid HTML:

<span><div contenteditable>Content</div></span>

To avoid this you can override the tag used in edit mode:

<%= cms :identifier, type: :plain, tag: 'span' %>

Resulting in:

<span contenteditable>Content</span>

To use your own models

Add to your model:

cms :body => :column_to_use_for_content

Then in your views:

<%= cms @model_instance %>

TODO

  • Allow classes on custom tags
  • Fix highlight so empty areas are still visible
  • Add image mode
  • Add file mode
  • Add video mode (youtube/vimeo/etc)
  • Add support for langs/i18n
  • Handle saving errors
  • Decouple ckeditor
  • Support different editors
  • Remove CanCan dependancy
  • Setup config initializer for added customizability