class TinyMCE::Rails::Configuration

def self.assets

def self.assets
  Rails.application.assets
end

def self.available_languages

Searches asset paths for TinyMCE language files.
def self.available_languages
  assets.paths.map { |path|
    # Find all assets within tinymce/langs
    entries = assets.entries(File.join(path, "tinymce/langs"))
    entries.map { |entry|
      if assets.respond_to?(:attributes_for)
        assets.attributes_for(File.join(path, entry))
      else
        assets.find_asset(File.join("tinymce/langs", entry))
      end
    }.select { |asset|
      # Select only JavaScript files
      asset.logical_path =~ /\.js$/
    }.map { |asset|
      # Strip path and extension
      asset.logical_path.sub(/^tinymce\/langs\//, "").sub(/\.js$/, "")
    }
  }.flatten.uniq
end

def self.default_language

Default language falls back to English if current locale is not available.
def self.default_language
  available_languages.include?(I18n.locale.to_s) ? I18n.locale.to_s : "en"
end

def self.defaults

def self.defaults
  {
    "mode"            => "specific_textareas",
    "editor_selector" => "tinymce",
    "theme"           => "advanced"
  }
end

def self.new_with_defaults(options={})

def self.new_with_defaults(options={})
  config = new(defaults)
  config = config.merge(options) if options
  config
end

def initialize(options)

def initialize(options)
  @options = options
end

def merge(options)

def merge(options)
  self.class.new(self.options.merge(options))
end

def options_for_tinymce

def options_for_tinymce
  result = {}
  
  options.each do |key, value|
    if value.is_a?(Array) && value.all? { |v| v.is_a?(String) }
      result[key] = value.join(",")
    elsif value.to_s.starts_with?("function(")
      result[key] = Function.new(value)
    else
      result[key] = value
    end
  end
  
  result["language"] ||= self.class.default_language
  
  result
end

def to_javascript

def to_javascript
  pairs = options_for_tinymce.inject([]) do |result, (k, v)|
    if v.respond_to?(:to_javascript)
      v = v.to_javascript
    elsif v.respond_to?(:to_json)
      v = v.to_json
    end
    
    result << [k, v].join(": ")
  end
  
  "{\n#{pairs.join(",\n")}\n}"
end