drg_cms 0.5.52.7 → 0.5.52.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 14e0c13f818cd5c883d7a2ebe8e5a677b6603579
4
- data.tar.gz: 12f30b353bd1347d739f6cf13c6dc44fef46c4aa
3
+ metadata.gz: 40fa56fbdb21a8a10e26ebeefc4f9ebf1a0a41d3
4
+ data.tar.gz: f3c627f7e59044e1826d120174b91c06d7d0ee25
5
5
  SHA512:
6
- metadata.gz: 96bd289df2c2b236a3bf68e51e9b70965a6cc11353c802ea6c4a0c3140f4bb8bdfcf1e7d8edab681a1964ee8a9cd40da7e74d7447bb088ef455c989434352b51
7
- data.tar.gz: 43c1445d8b6ae652a6b05070ad12475a4beddbc5b02ab6d61998031eb0e2d5e1c93dbd11c938e8e6b4353d4833b405993436f9680823d55b8e3a1334e4a1c52a
6
+ metadata.gz: 377369ee96b9fa738a115e607d3e187ab5a1bb951ea767add202be5cc3e3d1ef9f83f39a03ce8411c8c3fc86889c7d250e4f22c2ee51448b90b1ecc0492b0942
7
+ data.tar.gz: 2db3772bf7c84abf8a316eb3519f74e86b0d2a2925214f6e8a2a328f2b683ef6fa67df3d56cc4363d2481c7de9e77b030d2481c49ebe720e28a7d43623052f7e
@@ -253,6 +253,7 @@ font-size: 0.9rem;
253
253
  /* border-bottom: 2px solid #222; */
254
254
  color: #000;
255
255
  font-weight: bold;
256
+ background-color: #ddd;
256
257
  }
257
258
 
258
259
  .dc-menu {
@@ -467,12 +468,6 @@ border: 1px solid #ddd;
467
468
  width: 99.9%;
468
469
  margin: 0px;
469
470
  background-color: #fff;
470
- /*
471
-
472
- border-radius: 1px;
473
- border-top:1px solid #fff;
474
- border-left:1px solid #fff;
475
- border-bottom:1px solid #ccc;*/
476
471
  }
477
472
 
478
473
  .dc-form {
@@ -185,6 +185,7 @@ def check_filter_options() #:nodoc:
185
185
  site_id = dc_get_site._id if dc_get_site
186
186
  # dont't filter site if no dc_site_id field or user is ADMIN
187
187
  site_id = nil if !model.method_defined?('dc_site_id') or dc_user_can(DcPermission::CAN_ADMIN)
188
+ site_id = nil if session[table_name][:filter].to_s.match('dc_site_id')
188
189
  #
189
190
  if @records = DcFilter.get_filter(session[table_name][:filter])
190
191
  @records = @records.and(dc_site_id: site_id) if site_id
@@ -239,7 +240,7 @@ def index
239
240
  @records = @records.page(params[:page]).per(per_page) if per_page > 0
240
241
  end
241
242
  else
242
- p "Error: result_set:filter: #{@form['result_set']['filter']} not found in controls!"
243
+ Rails.logger.error "Error: result_set:filter: #{@form['result_set']['filter']} not found in controls!"
243
244
  end
244
245
  else
245
246
  if @tables.size > 1
@@ -412,12 +413,14 @@ def create
412
413
  create_new_empty_record
413
414
  params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
414
415
  if save_data
415
- @parms['action'] = 'update'
416
- @parms['id'] = @record.id # must be set, for proper update link
417
- flash[:info] = t('drgcms.doc_saved')
416
+ flash[:info] = t('drgcms.doc_saved')
418
417
  return process_return_to(params[:return_to]) if params[:return_to]
419
- render action: :edit
420
- else
418
+
419
+ @parms['id'] = @record.id # must be set, for proper update link
420
+ params[:id] = @record.id # must be set, for find_record
421
+ edit
422
+ # render action: :edit
423
+ else # error
421
424
  render action: :new
422
425
  end
423
426
  else # duplicate record
@@ -443,6 +446,7 @@ def edit
443
446
  return index if ret.class == FalseClass
444
447
  end
445
448
  @parms['action'] = 'update'
449
+ render action: :edit
446
450
  end
447
451
 
448
452
  ########################################################################
@@ -472,7 +476,7 @@ def update
472
476
  else
473
477
  flash[:error] = t('drgcms.not_authorized')
474
478
  end
475
- render action: :edit
479
+ edit
476
480
  end
477
481
 
478
482
  ########################################################################
@@ -322,12 +322,14 @@ def dc_process_default_request()
322
322
  @js, @css = '', ''
323
323
  # find domain name in sites
324
324
  @site = dc_get_site
325
- # site is not defined. render 404 error
325
+ # site not defined. render 404 error
326
326
  return dc_render_404('Site!') if @site.nil?
327
327
  dc_set_options(@site.settings)
328
328
  # HOMEPAGE. When no parameters is set
329
- params[:path] = @site.homepage_link if params[:id].nil? and params[:path].nil?
330
- # some other process request. It shoud fail if not defined
329
+ params[:path] = @site.homepage_link if params[:id].nil? and params[:path].nil?
330
+ @options[:path] = params[:path].split('/')
331
+ params[:path] = @options[:path].first if @options[:path].size > 1
332
+ # some other process request. It should fail if not defined
331
333
  return send(@site.request_processor) unless @site.request_processor.blank?
332
334
 
333
335
  # Search for page
@@ -14,11 +14,14 @@ result_set:
14
14
  columns:
15
15
  1:
16
16
  name: name
17
+ width: 30%
17
18
  2:
18
19
  name: updated_at
20
+ width: 10%
19
21
  3:
20
22
  name: active
21
23
  eval: dc_icon4_boolean
24
+ width: 10%
22
25
 
23
26
  form:
24
27
  title:
@@ -17,9 +17,10 @@ result_set:
17
17
  columns:
18
18
  10:
19
19
  name: name
20
+ width: 20%
20
21
  20:
21
22
  name: description
22
- width: 50%
23
+ width: 80%
23
24
 
24
25
  form:
25
26
  title:
@@ -113,6 +113,8 @@ form:
113
113
  25:
114
114
  name: _update_menu
115
115
  type: check_box
116
+ help: helpers.help.dc_page._update_menu
117
+ caption: helpers.label.dc_page._update_menu
116
118
 
117
119
  30:
118
120
  name: params
@@ -15,6 +15,7 @@ result_set:
15
15
  1:
16
16
  name: dc_policy_role_id
17
17
  eval: dc_name4_id,dc_policy_role,name
18
+ width: 30%
18
19
 
19
20
  2:
20
21
  name: permission
@@ -15,6 +15,7 @@ result_set:
15
15
  1:
16
16
  name: dc_policy_role_id
17
17
  eval: dc_name4_id,dc_policy_role,name
18
+ width: 30%
18
19
 
19
20
  2:
20
21
  name: permission
@@ -17,6 +17,7 @@ result_set:
17
17
  columns:
18
18
  10:
19
19
  name: name
20
+ width: 20%
20
21
  20:
21
22
  name: description
22
23
  width: 50%
@@ -35,44 +35,37 @@ form:
35
35
  10:
36
36
  name: caption
37
37
  type: text_field
38
- html:
39
- size: 30
38
+ size: 30
40
39
  20:
41
40
  name: picture
42
41
  type: file_select
43
- html:
44
- size: 50
42
+ size: 50
43
+ preview: no
45
44
  30:
46
45
  name: link_prepend
47
46
  type: text_field
48
- html:
49
- size: 20
47
+ size: 20
50
48
  40:
51
49
  name: link
52
50
  type: text_with_select
53
51
  eval: '@parent.dc_page_class.all_pages_for_site(@parent.dc_get_site)'
54
- html:
55
- size: 50
52
+ size: 50
56
53
  50:
57
54
  name: target
58
55
  type: text_field
59
- html:
60
- size: 10
56
+ size: 10
61
57
  60:
62
58
  name: order
63
59
  type: text_field
64
- html:
65
- size: 2
60
+ size: 2
66
61
  70:
67
62
  name: submenu
68
63
  type: text_area
69
- html:
70
- size: 60x20
64
+ size: 60x20
71
65
  80:
72
66
  name: css
73
67
  type: text_area
74
- html:
75
- size: 60x10
68
+ size: 60x10
76
69
  90:
77
70
  name: policy_id
78
71
  type: select
@@ -17,9 +17,10 @@ result_set:
17
17
  columns:
18
18
  1:
19
19
  name: name
20
+ width: 30%
20
21
  2:
21
22
  name: description
22
- width: 80%
23
+ width: 70%
23
24
 
24
25
  form:
25
26
  title:
@@ -17,10 +17,13 @@ result_set:
17
17
  name: username
18
18
  2:
19
19
  name: first_name
20
+ width: 40%
20
21
  3:
21
22
  name: last_name
23
+ width: 20%
22
24
  4:
23
25
  name: last_visit
26
+ width: 10%
24
27
 
25
28
  form:
26
29
  title:
@@ -34,66 +37,55 @@ form:
34
37
  10:
35
38
  name: username
36
39
  type: text_field
37
- html:
38
- size: 10
40
+ size: 10
39
41
  20:
40
42
  name: title
41
43
  type: text_field
42
- html:
43
- size: 5
44
+ size: 5
44
45
  30:
45
46
  name: first_name
46
47
  type: text_field
47
- html:
48
- size: 20
48
+ size: 20
49
49
 
50
50
  40:
51
51
  name: middle_name
52
52
  type: text_field
53
- html:
54
- size: 20
53
+ size: 20
55
54
 
56
55
  50:
57
56
  name: last_name
58
57
  type: text_field
59
- html:
60
- size: 20
58
+ size: 20
61
59
 
62
60
  60:
63
61
  name: company
64
62
  type: text_field
65
- html:
66
- size: 50
63
+ size: 50
67
64
 
68
65
  70:
69
66
  name: address
70
67
  type: text_field
71
- html:
72
- size: 50
68
+ size: 50
73
69
 
74
70
  80:
75
71
  name: post
76
72
  type: text_field
77
- html:
78
- size: 50
73
+ size: 50
79
74
 
80
75
  90:
81
76
  name: country
82
77
  type: text_field
83
- html:
84
- size: 20
78
+ size: 20
85
79
 
86
80
  100:
87
81
  name: email
88
82
  type: text_field
89
- html:
90
- size: 30
83
+ size: 30
91
84
 
92
85
  110:
93
86
  name: phone
94
87
  type: text_field
95
- html:
96
- size: 30
88
+ size: 30
97
89
 
98
90
  120:
99
91
  name: birthdate
@@ -104,36 +96,30 @@ form:
104
96
  130:
105
97
  name: picture
106
98
  type: text_field
107
- html:
108
- size: 50
99
+ size: 50
109
100
 
110
101
  140:
111
102
  name: about
112
103
  type: text_area
113
- html:
114
- size: 100x10
104
+ size: 100x10
115
105
 
116
106
  150:
117
107
  name: password
118
108
  type: password_field
119
- html:
120
- size: 20
109
+ size: 20
121
110
 
122
111
  160:
123
112
  name: password_confirmation
124
113
  type: password_field
125
- html:
126
- size: 20
114
+ size: 20
127
115
 
128
116
  170:
129
117
  name: dc_user_roles
130
118
  type: embedded
131
119
  form_name: dc_user_role
132
- html:
133
- size: 20
120
+ size: 20
134
121
 
135
122
  180:
136
123
  name: signature
137
124
  type: text_area
138
- html:
139
- size: 100x5
125
+ size: 100x5
@@ -30,6 +30,27 @@
30
30
  module CmseditHelper
31
31
  # javascript part created by form helpers
32
32
  attr_reader :js
33
+
34
+ ############################################################################
35
+ # Get standard actions when actions directive contains single line.
36
+ # Subroutine of dc_actions_for_index
37
+ #
38
+ # Allows for actions: new, filter, standard syntax
39
+ ############################################################################
40
+ def define_standard_actions(actions_params, standard)
41
+ actions = {}
42
+ actions_params.split(',').each do |an_action|
43
+ an_action.strip!
44
+ if an_action == 'standard'
45
+ actions.merge!(standard)
46
+ else
47
+ standard.each do |index, action|
48
+ (actions[index] = action; break) if action == an_action
49
+ end
50
+ end
51
+ end
52
+ actions
53
+ end
33
54
 
34
55
  ############################################################################
35
56
  # Creates action div for cmsedit index action.
@@ -38,13 +59,14 @@ def dc_actions_for_index()
38
59
  return '' if @form['index'].nil? or @form['readonly']
39
60
  actions = @form['index']['actions']
40
61
  return '' if actions.nil? or actions.size == 0
41
- # Simulate standard actions
42
- actions = {'standard' => true} if actions.class == String && actions == 'standard'
43
62
  std_actions = {2 => 'new', 3 => 'sort', 4 => 'filter' }
44
- if actions['standard']
63
+ if actions.class == String
64
+ actions = define_standard_actions(actions, std_actions)
65
+ elsif actions['standard']
45
66
  actions.merge!(std_actions)
46
67
  actions['standard'] = nil
47
68
  end
69
+
48
70
  # start div with hidden spinner image
49
71
  html = <<EOT
50
72
  <div id="dc-action-menu">
@@ -106,7 +106,7 @@ def dc_render(renderer, opts={})
106
106
  @css << obj.render_css.to_s
107
107
  html.nil? ? '' : html.html_safe # nil can happened
108
108
  else
109
- "Class #{klass} not defined!"
109
+ I18n.t 'drgcms.no_class', class: klass
110
110
  end
111
111
  end
112
112
 
@@ -647,13 +647,13 @@ end
647
647
  # Returns:
648
648
  # String. Translated text.
649
649
  ####################################################################
650
- def t(key, default='')
650
+ def t(key, default=nil)
651
651
  c = I18n.t(key)
652
652
  if c.class == Hash or c.match( 'translation missing' )
653
653
  c = I18n.t(key, locale: 'en')
654
654
  # Still not found. Return default if set
655
655
  if c.class == Hash or c.match( 'translation missing' )
656
- c = default.blank? ? key : default
656
+ c = default.nil? ? key : default
657
657
  end
658
658
  end
659
659
  c
@@ -923,12 +923,11 @@ def dc_choices4_cmsmenu()
923
923
  end
924
924
  #
925
925
  html = '<ul>'
926
- menus.to_a.sort.each do |one_menu| # sort menus, result is array of sorted hashes
927
- menu = one_menu[1] # value is the second (1) element of array
926
+ menus.to_a.sort.each do |index, menu| # sort menus, result is array of sorted hashes
928
927
  next unless menu['caption']
929
- html << "<li class=\"cmsedit-top-level-menu\">#{fa_icon(menu['icon'])}#{t(menu['caption'])}<ul>"
930
- menu['items'].to_a.sort.each do |item| # as above. sort items first
931
- value = item[1]
928
+ icon = menu['icon'].match('/') ? image_tag(menu['icon']) : fa_icon(menu['icon']) #external or fa- image
929
+ html << "<li class=\"cmsedit-top-level-menu\">#{icon}#{t(menu['caption'])}<ul>"
930
+ menu['items'].to_a.sort.each do |index1, value| # again, sort menu items first
932
931
  html << if value['link']
933
932
  opts = { target: value['target'] || 'iframe_cms' }
934
933
  "<li>#{dc_link_to(t(value['caption']), value['icon'] || '', value['link'], opts)}</li>"
@@ -40,9 +40,7 @@ include DcApplicationHelper
40
40
  ########################################################################
41
41
  def initialize( parent, opts ) #:nodoc:
42
42
  @parent = parent
43
- @menu = opts[:name] ?
44
- DcMenu.find_by(name: opts[:name].to_s) :
45
- DcMenu.find(@parent.site.menu_id)
43
+ @menu = opts[:name] ? DcMenu.find_by(name: opts[:name].to_s) : DcMenu.find(@parent.site.menu_id)
46
44
  @opts = opts
47
45
  self
48
46
  end
@@ -105,11 +103,56 @@ def link_4menu(item)
105
103
  @parent.link_to(caption, link, {target: target}) )
106
104
  end
107
105
 
106
+ ########################################################################
107
+ # Returns html code required for creating one link in a menu.
108
+ #
109
+ # Parameters:
110
+ # [item] MenuItem.
111
+ ########################################################################
112
+ def link_4menu(item)
113
+ # prepand to link
114
+ link = if !item.link_prepend.blank?
115
+ item.link_prepend
116
+ elsif !@menu.link_prepend.blank?
117
+ @menu.link_prepend
118
+ else
119
+ ''
120
+ end
121
+
122
+ if item.link.match('http')
123
+ link = item.link
124
+ else
125
+ link += (item.link[0] == '/' ? '' : '/') + item.link
126
+ link = '/' + link unless link[0] == '/' # link should start with '/'
127
+ end
128
+
129
+ caption = ''
130
+ unless item.picture.blank?
131
+ caption = case
132
+ when item.picture[0] == '@' then # call method
133
+ method = item.picture[1,100] # remove leading @
134
+ return send(method) if respond_to?(method)
135
+ return @parent.send(method) if @parent.respond_to?(method)
136
+ return 'ERROR!'
137
+ when item.picture.match(/\./) then @parent.image_tag(item.picture)
138
+ when item.picture.match('<i') then item.picture
139
+ else
140
+ @parent.fa_icon(item.picture)
141
+ end
142
+ caption << ' '
143
+ end
144
+ # - in first place won't write caption text
145
+ caption = caption.html_safe + (item.caption[0] == '-' ? '' : item.caption.html_safe )
146
+
147
+ target = item.target.blank? ? nil : item.target
148
+ @parent.link_to(caption, link, {target: target})
149
+ end
150
+
108
151
  ########################################################################
109
152
  # Creates HTML code required for submenu on single level. Subroutine of default.
110
153
  ########################################################################
111
154
  def do_menu_level(menu, options={})
112
- html = "<ul id=\"#{menu.name}\">"
155
+ html = "<ul>"
113
156
  if @opts[:edit_mode] > 1
114
157
  options[:title] = menu.respond_to?('name') ? menu.name : menu.caption # 1. level or submenus
115
158
  options[:id] = menu._id
@@ -102,8 +102,10 @@ def link_4menu(item)
102
102
  unless item.picture.blank?
103
103
  caption = case
104
104
  when item.picture[0] == '@' then # call method
105
- method = item.picture.sub('@','')
106
- return eval(method) rescue 'ERROR!'
105
+ method = item.picture[1,100] # remove leading @
106
+ return send(method) if respond_to?(method)
107
+ return @parent.send(method) if @parent.respond_to?(method)
108
+ return 'ERROR!'
107
109
  when item.picture.match(/\./) then @parent.image_tag(item.picture)
108
110
  when item.picture.match('<i') then item.picture
109
111
  else
@@ -82,6 +82,13 @@ before_save :do_before_save
82
82
  validates :publish_date, presence: true
83
83
 
84
84
  ######################################################################
85
+ # Will return subject_link. Field name link should be common for all documents
86
+ # which can be found with links.
87
+ ######################################################################
88
+ def link
89
+ subject_link
90
+ end
91
+
85
92
  protected
86
93
 
87
94
  ######################################################################
@@ -88,7 +88,21 @@ def do_before_save
88
88
  self.name = "#{self.title} #{self.first_name} #{self.middle_name + ' ' unless self.middle_name.blank?}#{self.last_name}".strip
89
89
  # to ensure unique e-mail
90
90
  self.email = "unknown@#{self.id}" if self.email.to_s.strip.size < 5
91
- end
91
+ end
92
+
93
+ ##########################################################################
94
+ # Checks if user has role 'role_id' defined in his roles
95
+ ##########################################################################
96
+ def has_role?(role_id)
97
+ return false unless role_id
98
+ #
99
+ unless BSON::ObjectId.legal?(role_id)
100
+ role = DcPolicyRole.get_role(role_id)
101
+ role_id = role.id if role
102
+ end
103
+ role = self.dc_user_roles.where(dc_policy_role_id: role_id)
104
+ (role && role.active?)
105
+ end
92
106
 
93
107
  ##########################################################################
94
108
  # Will return all possible values for country field ready for input in select field.
@@ -119,7 +119,7 @@ end
119
119
  #
120
120
  # Do nothing. The method is defined only for compatibility.
121
121
  #######################################################################
122
- def self.update_menu_item_link(path, link)
122
+ def self.update_menu_item_link(document)
123
123
  end
124
124
 
125
125
  end
@@ -52,4 +52,13 @@ class DcUserRole
52
52
  field :updated_by, type: BSON::ObjectId
53
53
 
54
54
  embedded_in :dc_user
55
+
56
+ ###############################################################################
57
+ # Determine of role is still active
58
+ ###############################################################################
59
+ def active?
60
+ now = Time.zone.local
61
+ self.active and (self.valid_from.nil? or now > self.valid_from) and (self.valid_to.nil? or now < self.valid_to)
55
62
  end
63
+
64
+ end
@@ -347,10 +347,15 @@ def render
347
347
  #
348
348
  html = ''
349
349
  @yaml['html'].each {|k,v| html << "#{k}=\"#{v}\" "}
350
- #
351
- tables = @parent.tables.inject('') { |r,v| r << "#{v[1]};" } + @yaml['table']
352
- ids = @parent.ids.inject('') { |r,v| r << "#{v};" } + @record._id
353
- opts = { controller: 'cmsedit', action: 'index', ids: ids, table: tables, form_name: @yaml['form_name'] || @yaml['form_name'],
350
+ #
351
+ if @yaml['name'] == @yaml['table']
352
+ tables = @yaml['table']
353
+ ids = @record._id
354
+ else
355
+ tables = @parent.tables.inject('') { |r,v| r << "#{v[1]};" } + @yaml['table']
356
+ ids = @parent.ids.inject('') { |r,v| r << "#{v};" } + @record._id
357
+ end
358
+ opts = { controller: 'cmsedit', action: 'index', ids: ids, table: tables, form_name: @yaml['form_name'],
354
359
  field_name: @yaml['name'], iframe: "if_#{@yaml['name']}", readonly: @readonly }
355
360
  @html << "<iframe class='iframe_embedded' id='if_#{@yaml['name']}' name='if_#{@yaml['name']}' #{html}></iframe>"
356
361
  @js = <<EOJS
@@ -60,6 +60,7 @@ en:
60
60
  password: Password
61
61
  form_error: Error loading form #{form_name}
62
62
  img_large: Click for larger image
63
+ no_class: Class %{class} not defined!
63
64
 
64
65
  edit: Edit
65
66
  show: Prikaz
@@ -60,6 +60,7 @@ sl:
60
60
  password: Geslo
61
61
  form_error: Napaka pri branju forme #{form_name}
62
62
  img_large: Klik za večjo sliko
63
+ no_class: Class %{class} ni definiran!
63
64
 
64
65
  edit: Urejanje
65
66
  show: Prikaz
@@ -1,4 +1,4 @@
1
1
  module DrgCms #:nodoc:
2
2
  # drg_cms gem version
3
- VERSION = "0.5.52.7"
3
+ VERSION = "0.5.52.9"
4
4
  end
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drg_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.52.7
4
+ version: 0.5.52.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damjan Rems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-02 00:00:00.000000000 Z
11
+ date: 2018-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -303,7 +303,6 @@ files:
303
303
  - app/models/dc_user_role.rb
304
304
  - app/models/dc_visit.rb
305
305
  - app/models/drgcms_form_fields.rb
306
- - app/views/cmsedit/__result.html.erb
307
306
  - app/views/cmsedit/_edit_stuff.html.erb
308
307
  - app/views/cmsedit/_form.html.erb
309
308
  - app/views/cmsedit/_result.html.erb
@@ -397,7 +396,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
397
396
  version: '0'
398
397
  requirements: []
399
398
  rubyforge_project:
400
- rubygems_version: 2.6.14
399
+ rubygems_version: 2.6.14.1
401
400
  signing_key:
402
401
  specification_version: 4
403
402
  summary: 'DRG: Rapid web application development tool and CMS for Ruby, Rails and
@@ -1,20 +0,0 @@
1
-
2
- <div class="dc-table-frame">
3
-
4
- <%= dc_table_title_for_result @records %>
5
-
6
- <% unless @records.nil? %>
7
- <%= dc_background_for_result(:start) %>
8
-
9
- <tr><%= dc_header_for_result %></tr>
10
- <% for document in @records %>
11
- <%= dc_row_for_result(document) %>
12
- <%= dc_actions_for_result(document) %>
13
- <%= dc_columns_for_result(document) %>
14
- </tr>
15
- <% end %>
16
-
17
- <%= dc_background_for_result(:end) %>
18
- <% end %>
19
-
20
- </div>