fckeditor(obj, method, options={}, configs={})


FCKeditor を標準のWYSIWYGエディタとして採用。TinyMCEでもいいんだけれど、以前Rails用サーバーブラウザを作ったことがあるので、それを再利用したい、という動機。


こんな感じでかけば、Helperになります。

      # FCKeditor helper
      def fckeditor(obj, method, options ={ }, configs={ })
        options_default = {
          "BasePath"                 => "/javascripts/fckeditor/",   # fckeditor.js のあるディレクトリ
          "Width"                    => "100%",
          "Height"                   => "300"
        }.update(options)

        configs_default = {
          "CustomConfigurationsPath" => "/javascripts/webjourney/fckconfig.js",  # 設定ファイルを独自指定
          "StylesXmlPath"            => "/javascripts/webjourney/fckstyles.xml"  # 設定ファイルを独自指定
        }.update(configs)

        instance = "#{obj}_#{method}"

        script = []
        script << "var #{instance} = new FCKeditor('#{obj}[#{method}]');"
        # options append
        options_default.each do |k,v|
          script << "#{instance}.#{k} = #{v.to_json};"
        end
        # configs append
        configs_default.each do |k, v|
          script << "#{instance}.Config['#{k}'] = #{v.to_json};"
        end
        script << "#{instance}.ReplaceTextarea();"
        text_area_tag = text_area(obj, method)
        text_area_tag + javascript_tag(script.join("\n"))
      end

ちなみに、form_widget_tag(Widget内フォーム)で使う場合は、

    <%= submit_widget_tag _("save"), :onclick => "$('entry_content').value = FCKeditorAPI.GetInstance('entry[content]').GetHTML();" %>

こんな感じで、エディタの内容をtextareaにフィードバックしないとだめ。これように、fckeditor_form_widget_tag とかいって作ろうと思ったけれど、名前が長いので却下。ついでに、Rails用のpluginも見つけたが、依存関係が多かったので却下して独自で。