Class: ArPageRenderer

Inherits:
Object
  • Object
show all
Includes:
AgileApplicationHelper, AgileCommonHelper
Defined in:
app/renderers/ar_page_renderer.rb

Overview

Page renderer renders data from ar_page collection documents. This renderer will almost certainly be replaced by your own renderer so example here shows just basic code which just checks if user is allowed to view data and if so returns document body content otherwise returns error message defined in site policy.

Example:

<div id="page">
 <%= agile_render(:ar_page, div_class: 'my-pages') %>
</div>

Instance Attribute Summary

Attributes included from AgileApplicationHelper

#design, #footer_record, #form, #ids, #json_ld, #menu, #menu_item, #options, #page, #page_title, #part, #parts, #record, #site, #tables

Instance Method Summary collapse

Methods included from AgileCommonHelper

agile_choices_for_field, #agile_format_date_time, #agile_format_number, #agile_help_body, #agile_help_button, #agile_help_fields, #agile_help_for_tab, #agile_icon_for_boolean, #agile_name_for_id, #agile_steps_menu_get, #agile_text_for_value, #t, #t_label_for_column, #t_label_for_field, #t_table_name, #url_forward_params

Methods included from AgileApplicationHelper

#_agile_link_to, #_origin, #agile_add2_record_cookie, #agile_add_json_ld, #agile_add_meta_tag, #agile_ajax_link_to, #agile_application_menu, #agile_big_table_choices, #agile_big_table_name_for_value, #agile_choices_for, #agile_choices_for_all_tables, #agile_choices_for_folders, #agile_choices_for_menu, #agile_choices_for_site_policies, #agile_deprecate, #agile_dialog_title, #agile_dont?, #agile_edit_frame, #agile_edit_mode?, #agile_edit_title, #agile_error_messages_for, #agile_flash_messages, #agile_get_json_ld, #agile_get_seo_meta_tags, #agile_get_site, #agile_icon_for_link, #agile_img_alt, #agile_img_alt_tag, #agile_internal_var, #agile_limit_string, #agile_link_for_create, #agile_link_for_edit, #agile_link_for_edit1, #agile_link_menu_tag, #agile_link_to, #agile_menu_class, #agile_new_title, #agile_page_bottom, #agile_page_class, #agile_page_edit_menu, #agile_page_top, #agile_render, #agile_render_part, #agile_submit_tag, #agile_user_can_view, #agile_user_has_role?, #agile_warning_messages_for, #decamelize_type

Constructor Details

#initialize(env, opts = {}) ⇒ ArPageRenderer

Object initialization.



44
45
46
47
48
49
# File 'app/renderers/ar_page_renderer.rb', line 44

def initialize( env, opts={} ) #:nodoc:

  @env  = env
  @opts = opts
  @page = @env.page
  @css  = ''
end

Instance Method Details

#defaultObject

Default ArPage render method



117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'app/renderers/ar_page_renderer.rb', line 117

def default
  can_view, msg = agile_user_can_view(@env, @page)
  return msg unless can_view

  @env.page_title = @page.title.blank? ? @page.subject : @page.title
  html = "<div class=\"#{@page.div_class} #{@opts[:div_class]}\">"
  html += agile_page_edit_menu() if @opts[:edit_mode] > 1
  html += @page.body

  html += poll()    if @page.ar_poll_id.to_i > 0
  html += gallery() if @page.gallery
  html += iframe()  if @page.if_url.present?
  html += '</div>'
end


107
108
109
110
111
112
# File 'app/renderers/ar_page_renderer.rb', line 107

def gallery
  opts = @opts.merge(doc_id: @page.id, doc_type: @page.class.to_s.underscore, method: nil)
  gall = ArGalleryRenderer.new(@env, opts)
  @css += "\n#{gall.render_css}"
  "<div class='wrap row'>#{gall.render_html}</div>"
end

#iframeObject

Render IFrame part if defined on page

Parameters forwarded to iframe are defined in if_params field as yaml as:

param_name:
object: internal object name (params, session, site, page)
method: method name (variable) holding the value of parameter

example: Forward id parameter to iframe 
id:
object: params
method: id

example: Forward user id and edit_mode to iframe
user_id:
object: session
method: user_id
edit:
object: session
method: edit_mode


73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'app/renderers/ar_page_renderer.rb', line 73

def iframe
  html =  "\n<iframe"
  html += " id=\"#{@page.if_id}\"" if @page.if_id.present?
  html += " class=\"#{@page.if_class}\"" if @page.if_class.present?
  html += " border=\"#{@page.if_border}\""
  html += " height=\"#{@page.if_height}\"" if @page.if_height.present?
  html += " width=\"#{@page.if_width}\"" if @page.if_width.present?
  html += " scrolling=\"#{@page.if_scroll}\""
  # Parameters

  parameters = @page.if_url.match(/\?/) ? '' : '?' 
  params = YAML.load(@page.if_params) rescue {}
  params = {} unless params.class == Hash
  params.each do |key, value|
    val = @env.ar_internal_var(value['object'], value['method'])
    parameters += "&#{key}=#{val}" if val # only when not nil

  end
  url = @page.if_url + (parameters.size > 1 ? parameters : '')
  html += "src=\"#{url}\" ></iframe>\n"
  html
end

#pollObject



97
98
99
100
101
102
# File 'app/renderers/ar_page_renderer.rb', line 97

def poll
  opts = @opts.merge(poll_id: @page.ar_poll_id, return_to: @env.request.url, method: nil)
  poll = ArPollRenderer.new(@env, opts)
  @css += "\n#{poll.render_css}"
  "<div class='wrap row'>#{poll.render_html}</div>"
end

#render_cssObject

Return CSS part of code.



143
144
145
# File 'app/renderers/ar_page_renderer.rb', line 143

def render_css
  @css
end

#render_htmlObject

Renderer dispatcher. Method returns HTML part of code.



135
136
137
138
# File 'app/renderers/ar_page_renderer.rb', line 135

def render_html
  method = @opts[:method] || 'default'
  respond_to?(method) ? send(method) : "Error ArPage: Method #{method} doesn't exist!"
end