2006-12-03 23:56:47 +00:00
|
|
|
require 'haml/engine'
|
2006-09-29 18:39:13 +00:00
|
|
|
|
|
|
|
module Haml
|
2009-04-30 12:43:21 -07:00
|
|
|
# The class that keeps track of the global options for Haml within Rails.
|
2009-04-22 13:45:26 -07:00
|
|
|
module Template
|
|
|
|
extend self
|
2006-11-04 08:35:06 +00:00
|
|
|
|
2009-04-22 13:45:26 -07:00
|
|
|
@options = {}
|
2009-04-30 12:43:21 -07:00
|
|
|
# The options hash for Haml when used within Rails.
|
2009-06-18 13:40:57 -07:00
|
|
|
# See {file:HAML_REFERENCE.md#haml_options the Haml options documentation}.
|
2009-04-30 12:43:21 -07:00
|
|
|
#
|
|
|
|
# @return [Hash<Symbol, Object>]
|
2009-04-22 13:45:26 -07:00
|
|
|
attr_accessor :options
|
2009-10-29 13:27:24 -07:00
|
|
|
|
|
|
|
# Enables integration with the Rails 2.2.5+ XSS protection,
|
|
|
|
# if it's available and enabled.
|
|
|
|
#
|
|
|
|
# @return [Boolean] Whether the XSS integration was enabled.
|
|
|
|
def try_enabling_xss_integration
|
|
|
|
return false unless ActionView::Base.respond_to?(:xss_safe?) && ActionView::Base.xss_safe?
|
|
|
|
|
|
|
|
Haml::Template.options[:escape_html] = true
|
|
|
|
|
|
|
|
Haml::Util.module_eval {def rails_xss_safe?; true; end}
|
|
|
|
|
|
|
|
require 'haml/helpers/xss_mods'
|
|
|
|
Haml::Helpers.send(:include, Haml::Helpers::XssMods)
|
|
|
|
|
2009-10-29 14:14:30 -07:00
|
|
|
Haml::Precompiler.module_eval do
|
|
|
|
def precompiled_method_return_value_with_haml_xss
|
|
|
|
"(#{precompiled_method_return_value_without_haml_xss}).html_safe!"
|
|
|
|
end
|
|
|
|
alias_method :precompiled_method_return_value_without_haml_xss, :precompiled_method_return_value
|
|
|
|
alias_method :precompiled_method_return_value, :precompiled_method_return_value_with_haml_xss
|
|
|
|
end
|
|
|
|
|
2009-10-29 13:27:24 -07:00
|
|
|
true
|
|
|
|
end
|
2006-09-29 18:39:13 +00:00
|
|
|
end
|
2006-10-14 22:24:53 +00:00
|
|
|
end
|
|
|
|
|
2009-07-04 18:14:15 -07:00
|
|
|
if defined?(RAILS_ENV) && RAILS_ENV == "production"
|
|
|
|
Haml::Template.options[:ugly] = true
|
|
|
|
end
|
|
|
|
|
2007-12-15 21:07:27 +00:00
|
|
|
# Decide how we want to load Haml into Rails.
|
|
|
|
# Patching was necessary for versions <= 2.0.1,
|
|
|
|
# but we can make it a normal handler for higher versions.
|
|
|
|
if defined?(ActionView::TemplateHandler)
|
|
|
|
require 'haml/template/plugin'
|
|
|
|
else
|
|
|
|
require 'haml/template/patch'
|
2006-10-14 22:24:53 +00:00
|
|
|
end
|
2008-01-07 02:38:19 +00:00
|
|
|
|
2009-10-29 13:27:24 -07:00
|
|
|
# Enable XSS integration. Use Rails' after_initialize method if possible
|
|
|
|
# so that integration will be checked after the rails_xss plugin is loaded
|
|
|
|
# (for Rails 2.3.* where it's not enabled by default).
|
|
|
|
if defined?(Rails.configuration.after_initialize)
|
|
|
|
Rails.configuration.after_initialize {Haml::Template.try_enabling_xss_integration}
|
|
|
|
else
|
|
|
|
Haml::Template.try_enabling_xss_integration
|
2009-10-15 22:31:24 -07:00
|
|
|
end
|
|
|
|
|
2009-11-04 19:01:39 -08:00
|
|
|
if Haml::Util.rails_root
|
2008-01-07 05:04:46 +00:00
|
|
|
# Update init.rb to the current version
|
|
|
|
# if it's out of date.
|
|
|
|
#
|
|
|
|
# We can probably remove this as of v1.9,
|
|
|
|
# because the new init file is sufficiently flexible
|
|
|
|
# to not need updating.
|
2009-11-04 19:01:39 -08:00
|
|
|
rails_init_file = File.join(Haml::Util.rails_root, 'vendor', 'plugins', 'haml', 'init.rb')
|
2009-04-30 14:22:05 -07:00
|
|
|
haml_init_file = Haml::Util.scope('init.rb')
|
2008-05-24 12:19:18 -07:00
|
|
|
begin
|
|
|
|
if File.exists?(rails_init_file)
|
|
|
|
require 'fileutils'
|
|
|
|
FileUtils.cp(haml_init_file, rails_init_file) unless FileUtils.cmp(rails_init_file, haml_init_file)
|
|
|
|
end
|
|
|
|
rescue SystemCallError
|
|
|
|
warn <<END
|
|
|
|
HAML WARNING:
|
|
|
|
#{rails_init_file} is out of date and couldn't be automatically updated.
|
2009-11-04 19:01:39 -08:00
|
|
|
Please run `haml --rails #{File.expand_path(Haml::Util.rails_root)}' to update it.
|
2008-05-24 12:19:18 -07:00
|
|
|
END
|
2008-01-07 05:04:46 +00:00
|
|
|
end
|
2008-01-07 02:38:19 +00:00
|
|
|
end
|