- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ruby/Ruby on Rails/FCKEditor/Easy FCKEditor

はじめに Edit

attribute_fuみたいなモデルを入れ子にしてformを作るようなプラグインとEasy FCKEditorが競合する件について。
というか、Easy FCKEditorのfckeditor_textareaが、アドホックすぎだから、Railsのタグ生成メソッドとかつかってくれよ、というお話。

時間ができたら本気を出すパッチ書きます。

とりあえずの解決方法 Edit

本家と違いFormBuilderのみ対応 (FormHelperを欲していた方、すいません。でもたぶんこれ見てすぐ作れますよ)
Railsのタグ生成メソッドなどを使用して対応してみた。
Railsのメソッドを使えば、attribute_fuとかの兼ね合いも大丈夫です!(確認済み)

Rails 2.3.4で確認しました。

以下を、lib/fckeditor_form_helper.rbとして保存します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# for FCKEditor and Easy FCKEditor plugin
module FckeditorFormHelper
  module FormBuilder
    # text_area Form Builder for FCKEditor
    def fckeditor_text_area(method, options = {})
      # get id
      tag = ActionView::Helpers::InstanceTag.new(@object_name, method, @template, objectify_options(options).delete(:object))
      id = tag.send :add_default_name_and_id, ActionView::Helpers::InstanceTag::DEFAULT_TEXT_AREA_OPTIONS.merge(options.stringify_keys)

      # set parameter
      toolbar_set_parameter = options[:toolbarSet] || options[:toolbar_set]
      toolbar_set = toolbar_set_parameter.nil? ? 'Default' : toolbar_set_parameter
      width = options[:width].nil? ? '100%' : options[:width]
      height = options[:height].nil? ? '100%' : options[:height]
      js_path = "#{ActionController::Base.relative_url_root}/javascripts"
      base_path = "#{js_path}/fckeditor/"

      # create javascript for FCKEditor
      javascript = "var oFCKeditor = new FCKeditor('#{id}', '#{width}', '#{height}', '#{toolbar_set}');\n" <<
          "oFCKeditor.BasePath = \"#{base_path}\"\n" <<
          "oFCKeditor.Config['CustomConfigurationsPath'] = '#{js_path}/fckcustom.js';\n"
      # swap enter_mode
      if options[:enter_mode_is_br]
        javascript <<
          "oFCKeditor.Config['EnterMode'] = 'br' ;\n"   <<              # p | div | br
          "oFCKeditor.Config['ShiftEnterMode'] = 'p' ;"         #{} p | div | br
      end
      javascript << "oFCKeditor.ReplaceTextarea();\n"

      # create html text_area & javascript
      return @template.text_area(@object_name, method, objectify_options(options)) << "\n" <<
        @template.javascript_tag(javascript)
    end

    # "fckeditor_textarea" too :)
    alias :fckeditor_textarea :fckeditor_text_area
  end
end

後は、app/helpers/application_helper.rbなどで、

ActionView::Helpers::FormBuilder.class_eval { include FckeditorFormHelper::FormBuilder }

と追加してやります。これでOK。
(confi/initializersに適当なファイル置いてその中で書いてもいいかもね)

Railsのautoload機能によりrequireいりまっせん。

使い方 Edit

本家Easy FCKEditorのfckeditor_textareaの代わりに、
というか、f.text_areaとかの代わりに
view内でform_forとかつかうときに、

<%= f.fckeditor_text_area :comment, :size => "10x8", :toolbarSet => 'Simple', :height => "300px" %>

のように書けばOK。

オプションは、text_areaのものとEasy FCKEditorのfckeditor_textareaのものが大体使えます。

ただし、AJAX版は使えないです(作ってないので) ちゅうい

ライセンスががが Edit

半分コピってきたので、Easy FCKEditor準拠ですので注意。2009/11/19時点ではGPLになっちゃてます。

雑感 Edit

そのうち、Easy FCKEditorに組み込んで、パッチに作って本家に送りたいところです。
FCKEditorは使えるので時間ができたらやります。

[TODO]:Easy FCKEditorのパッチ作る!


No comment. Comments/Ruby/Ruby on Rails/FCKEditor/Easy FCKEditor/attritube_fuとの兼ね合い?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-11-19 Thu 17:54:08 JST (2862d)