# Ckeditor CKEditor is a ready-for-use HTML text editor designed to simplify web content creation. It's a WYSIWYG editor that brings common word processor features directly to your web pages. Enhance your website experience with our community maintained editor. [ckeditor.com](http://ckeditor.com/) ## Features * Ckeditor version 4.4.6 (full) * Rails 4 integration * Files browser * HTML5 files uploader * Hooks for formtastic and simple_form forms generators * Integrated with authorization framework CanCan and Pundit ## Installation For basic usage just include ckeditor gem: ``` gem 'ckeditor' ``` or if you want to use the latest version from github: ``` gem 'ckeditor', github: 'galetahub/ckeditor' ``` #### Using with ruby 1.8.7 For usage with ruby 1.8.7 you need to specify gem version: ``` gem 'ckeditor', '4.0.4' ``` For files uploading support you need generate models for file storage. Currently supported next backends: * ActiveRecord (paperclip, carrierwave, dragonfly) * Mongoid (paperclip, carrierwave, dragonfly) ### How generate models for store uploading files #### ActiveRecord + paperclip For active_record orm is used paperclip gem (it's by default). ``` gem 'paperclip' rails generate ckeditor:install --orm=active_record --backend=paperclip ``` #### ActiveRecord + carrierwave ``` gem 'carrierwave' gem 'mini_magick' rails generate ckeditor:install --orm=active_record --backend=carrierwave ``` #### Mongoid + paperclip ``` gem 'mongoid-paperclip', :require => 'mongoid_paperclip' rails generate ckeditor:install --orm=mongoid --backend=paperclip ``` #### Mongoid + carrierwave ``` gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid' gem 'mini_magick' rails generate ckeditor:install --orm=mongoid --backend=carrierwave ``` #### Load generated models All ckeditor models will be generated into app/models/ckeditor folder. Models are autoloaded in Rails 4. For earlier Rails versions you need to add them to autoload path (in application.rb): ```ruby config.autoload_paths += %W(#{config.root}/app/models/ckeditor) ``` Mount engine in your routes (config/routes.rb): ```ruby mount Ckeditor::Engine => '/ckeditor' ``` ## Usage Include ckeditor javascripts in your `app/assets/javascripts/application.js`: ``` //= require ckeditor/init ``` Form helpers: ```erb <%= form_for @page do |form| -%> ... <%= form.cktext_area :notes, :class => 'someclass', :ckeditor => {:language => 'uk'} %> ... <%= form.cktext_area :content, :value => 'Default value', :id => 'sometext' %> ... <%= cktext_area :page, :info, :cols => 40, :ckeditor => {:uiColor => '#AADC6E', :toolbar => 'mini'} %> ... <% end -%> ``` ### Customize ckeditor All ckeditor options [here](http://docs.ckeditor.com/#!/api/CKEDITOR.config) In order to configure the ckeditor default options, create files: ``` app/assets/javascripts/ckeditor/config.js app/assets/javascripts/ckeditor/contents.css ``` #### Custom toolbars example Adding custom toolbar: ```javascript # in app/assets/javascripts/ckeditor/config.js CKEDITOR.editorConfig = function (config) { // ... other configuration ... config.toolbar_mini = [ ["Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript"], ]; config.toolbar = "simple"; // ... rest of the original config.js ... } ``` When overriding default `config.js` you have to set all configuration yourself since bundled `config.js` will not be loaded. To see the default configuration run `bundle open ckeditor` and copy `app/assets/javascripts/ckeditor/config.js` to your project and customize it to your needs. ### Deployment For Rails 4, add the following to `config/initializers/assets.rb`: ```ruby Rails.application.config.assets.precompile += %w( ckeditor/* ) ``` Since version 4.1.0, non-digested assets of ckeditor will simply be copied after digested assets were compiled. For older versions, use gem [non-stupid-digest-assets](https://rubygems.org/gems/non-stupid-digest-assets), to copy non digest assets. To reduce the asset precompilation time, you can limit plugins and/or languages to those you need: ```ruby # in config/initializers/ckeditor.rb Ckeditor.setup do |config| config.assets_languages = ['en', 'fr'] config.assets_plugins = ['image', 'smiley'] end ``` Note that you have to list your plugins including all their dependencies. ### Include customized CKEDITOR_BASEPATH setting Add your app/assets/javascripts/ckeditor/basepath.js.erb like ```erb <% base_path = '' if ENV['PROJECT'] =~ /editor/i base_path << "/#{Rails.root.basename.to_s}/" end base_path << Rails.application.config.assets.prefix base_path << '/ckeditor/' %> var CKEDITOR_BASEPATH = '<%= base_path %>'; ``` ### AJAX jQuery sample: ```html ``` ### Formtastic integration ```erb <%= form.input :content, :as => :ckeditor %> <%= form.input :content, :as => :ckeditor, :input_html => { :ckeditor => { :height => 400 } } %> ``` ### SimpleForm integration ```erb <%= form.input :content, :as => :ckeditor, :input_html => { :ckeditor => {:toolbar => 'Full'} } %> ``` ### CanCan integration To use cancan with Ckeditor, add this to an initializer. ```ruby # in config/initializers/ckeditor.rb Ckeditor.setup do |config| config.authorize_with :cancan end ``` At this point, all authorization will fail and no one will be able to access the filebrowser pages. To grant access, add this to Ability#initialize ```ruby # Always performed can :access, :ckeditor # needed to access Ckeditor filebrowser # Performed checks for actions: can [:read, :create, :destroy], Ckeditor::Picture can [:read, :create, :destroy], Ckeditor::AttachmentFile ``` ### Pundit integration Just like CanCan, you can write this code in your config/initializers/ckeditor.rb file ```ruby Ckeditor.setup do |config| config.authorize_with :pundit end ``` And then, generate the policy files for model **Picture** and **AttachmentFile** ``` $ rails g ckeditor:pundit_policy ``` By this command, you will got two files: > app/policies/ckeditor/picture_policy.rb app/policies/ckeditor/attachment_file_policy.rb By default, only the user that logged in can access the models(with action *index* and *create*), and only the owner of the asset can **destroy** the resource. You can simply customize these two policy files as you like. ## I18n ```yml en: ckeditor: page_title: 'CKEditor Files Manager' confirm_delete: 'Delete file?' buttons: cancel: 'Cancel' upload: 'Upload' delete: 'Delete' next: 'Next' ``` ## Tests ```bash $> rake test $> rake test CKEDITOR_ORM=mongoid $> rake test CKEDITOR_BACKEND=carrierwave $> rake test:controllers $> rake test:generators $> rake test:integration $> rake test:models ``` This project rocks and uses MIT-LICENSE.