+ content_tag(tag, capture(&block))
+ end
+ end
+
+ def if_administrator(tag = :div, &block)
+ content_tag(tag, capture(&block), :class => "hide_unless_administrator")
+ end
+
+ def preferred_editor
+ if params[:editor]
+ params[:editor]
+ elsif @user and @user.preferred_editor
+ @user.preferred_editor
+ else
+ DEFAULT_EDITOR
+ end
+ end
+
+ def scale_to_zoom(scale)
+ Math.log(360.0 / (scale.to_f * 512.0)) / Math.log(2.0)
+ end
+
+ def richtext_area(object_name, method, options = {})
+ id = "#{object_name.to_s}_#{method.to_s}"
+ format = options.delete(:format) || "markdown"
+
+ content_tag(:div, :id => "#{id}_container", :class => "richtext_container") do
+ output_buffer << content_tag(:div, :id => "#{id}_content", :class => "richtext_content") do
+ output_buffer << text_area(object_name, method, options.merge("data-preview-url" => preview_url(:format => format)))
+ output_buffer << content_tag(:div, "", :id => "#{id}_preview", :class => "richtext_preview")
+ end
+
+ output_buffer << content_tag(:div, :id => "#{id}_help", :class => "richtext_help") do
+ output_buffer << render("site/#{format}_help")
+ output_buffer << submit_tag(I18n.t("site.richtext_area.edit"), :id => "#{id}_doedit", :class => "richtext_doedit", :disabled => true)
+ output_buffer << submit_tag(I18n.t("site.richtext_area.preview"), :id => "#{id}_dopreview", :class => "richtext_dopreview")