module TinyMCE::Rails::Helper

def tinymce(config=:default, options={})

<%= tinymce(:theme => "advanced", :editor_selector => "editorClass") %>
@example

override these defaults.
available. The :editor_selector and :language options can be used to
TinyMCE language files are available, falling back to English if not
editor applied. The current locale will also be used as the language when
By default, all textareas with a class of "tinymce" will have the TinyMCE

the TinyMCE init function.
Custom options can be set via the options hash, which will be passed to

Initializes TinyMCE on the current page based on the global configuration.
def tinymce(config=:default, options={})
  javascript_tag { tinymce_javascript(config, options) }
end

def tinymce_assets

Includes TinyMCE javascript assets via a script tag.
def tinymce_assets
  javascript_include_tag "tinymce"
end

def tinymce_configuration(config=:default, options={})

It should be converted to JavaScript (via #to_javascript) for use within JavaScript.
Returns the TinyMCE configuration object.
def tinymce_configuration(config=:default, options={})
  options, config = config, :default if config.is_a?(Hash)
  options.stringify_keys!
  
  base_configuration = TinyMCE::Rails.configuration
  
  if base_configuration.is_a?(MultipleConfiguration)
    base_configuration = base_configuration.fetch(config)
  end
  
  base_configuration.merge(options)
end

def tinymce_javascript(config=:default, options={})

Returns the JavaScript code required to initialize TinyMCE.
def tinymce_javascript(config=:default, options={})
  <<-JAVASCRIPT.strip_heredoc.html_safe
  (function() {
    if (typeof tinyMCE != 'undefined') {
      tinyMCE.init(#{tinymce_configuration(config, options).to_javascript.gsub(/^/, ' ' * 10).sub(/\A\s+/, "")});
    } else {
      setTimeout(arguments.callee, 50);
    }
  })();
  JAVASCRIPT
end