drg_cms 0.4.61 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -47,6 +47,15 @@ attr_reader :options
47
47
  # all parts read from page, design, ...
48
48
  attr_accessor :parts
49
49
 
50
+
51
+ ############################################################################
52
+ # When @parent is present then helper methods are called from parent class otherwise
53
+ # from self.
54
+ ############################################################################
55
+ def _origin #:nodoc:
56
+ @parent ? @parent : self
57
+ end
58
+
50
59
  ############################################################################
51
60
  # This is main method used for render parts of design into final HTML document.
52
61
  #
@@ -142,11 +151,13 @@ end
142
151
  def dc_edit_title()
143
152
  title = @form['form']['title']
144
153
  # defined as form:title:edit
145
- if title and title['edit']
154
+ if title and title['edit'] and !@form['readonly']
146
155
  t( title['edit'], title['edit'] )
156
+ elsif title and title['show'] and @form['readonly']
157
+ t( title['show'], title['show'] )
147
158
  else
148
159
  # concatenate title
149
- c = "#{t('drgcms.edit')} : "
160
+ c = (@form['readonly'] ? t('drgcms.show') : t('drgcms.edit')) + " : "
150
161
  c << (@form['title'] ? t( @form['title'], @form['title'] ) : t_tablename(@form['table'])) + ' : '
151
162
  title = (title and title['field']) ? title['field'] : @form['form']['edit_title']
152
163
  c << "#{@record[ title ]} : " if title and @record.respond_to?(title)
@@ -191,6 +202,51 @@ eot
191
202
  c.html_safe
192
203
  end
193
204
 
205
+ ############################################################################
206
+ # Similar to rails submit_tag, but also takes care of link icon, translation, ...
207
+ ############################################################################
208
+ def dc_submit_tag(caption, icon, parms, rest={})
209
+ parms['class'] ||= 'dc-submit'
210
+ if icon
211
+ icon_image = if icon.match(/\./)
212
+ image_tag(icon, class: 'dc-animate')
213
+ elsif icon.match('<i')
214
+ icon
215
+ else
216
+ fa_icon(icon)
217
+ end
218
+ end
219
+ html = icon_image || ''
220
+ html << submit_tag(t(caption, caption), parms)
221
+ end
222
+ ############################################################################
223
+ # Similar to rails link_to, but also takes care of link icon, translation, ...
224
+ ############################################################################
225
+ def dc_link_to(caption, icon, parms, rest={})
226
+ if parms.class == Hash
227
+ parms.stringify_keys!
228
+ rest.stringify_keys!
229
+ rest['class'] = rest['class'].to_s + ' dc-animate'
230
+ rest['target'] ||= parms.delete('target')
231
+ end
232
+ #
233
+ if icon
234
+ icon_image = if icon.match(/\./)
235
+ _origin.image_tag(icon, class: 'dc-link-img dc-animate')
236
+ elsif icon.match('<i')
237
+ icon
238
+ else
239
+ _origin.fa_icon(icon)
240
+ end
241
+ end
242
+ #
243
+ if caption
244
+ caption = t(caption, caption)
245
+ icon_image << ' ' if icon_image
246
+ end
247
+ _origin.link_to("#{icon_image}#{caption}".html_safe, parms, rest)
248
+ end
249
+
194
250
  ####################################################################
195
251
  # Returns flash messages formatted for display on message div.
196
252
  #
@@ -198,27 +254,21 @@ end
198
254
  # String. HTML code formatted for display.
199
255
  ####################################################################
200
256
  def dc_flash_messages()
201
- err = @parent ? @parent.flash[:error] : flash[:error]
202
- war = @parent ? @parent.flash[:warning] : flash[:warning]
203
- inf = @parent ? @parent.flash[:info] : flash[:info]
204
- note = @parent ? @parent.flash[:note] : flash[:note]
257
+ err = _origin.flash[:error]
258
+ war = _origin.flash[:warning]
259
+ inf = _origin.flash[:info]
260
+ note = _origin.flash[:note]
205
261
  unless err.nil? and war.nil? and inf.nil? and note.nil?
206
262
  c = ''
207
263
  c << "<div class=\"dc-form-error\">#{err}</div>" if err
208
264
  c << "<div class=\"dc-form-warning\">#{war}</div>" if war
209
265
  c << "<div class=\"dc-form-info\">#{inf}</div>" if inf
210
266
  c << note if note
211
- if @parent
212
- @parent.flash[:error] = nil
213
- @parent.flash[:warning] = nil
214
- @parent.flash[:info] = nil
215
- @parent.flash[:note] = nil
216
- else
217
- flash[:error] = nil
218
- flash[:warning] = nil
219
- flash[:info] = nil
220
- flash[:note] = nil
221
- end
267
+ _origin.flash[:error] = nil
268
+ _origin.flash[:warning] = nil
269
+ _origin.flash[:info] = nil
270
+ _origin.flash[:note] = nil
271
+
222
272
  c.html_safe
223
273
  end
224
274
  end
@@ -280,7 +330,7 @@ end
280
330
  # Boolean. True if in edit mode
281
331
  ####################################################################
282
332
  def dc_edit_mode?
283
- (@parent ? @parent.session[:edit_mode] : session[:edit_mode]) > 1
333
+ _origin.session[:edit_mode] > 1
284
334
  end
285
335
 
286
336
  ####################################################################
@@ -300,18 +350,14 @@ end
300
350
  # String. HTML code which includes add image and javascript to invoke new document create action.
301
351
  ####################################################################
302
352
  def dc_link_for_create(opts)
303
- title = opts.delete(:title) #
353
+ opts.stringify_keys!
354
+ title = opts.delete('title') #
304
355
  title = t(title, title) if title
305
- target = opts.delete(:target) || 'iframe_cms'
306
- opts[:action] = 'new'
307
- url = @parent ? @parent.url_for(opts) : url_for(opts)
308
- js = "$('##{target}').attr('src', '#{url}'); return false;"
309
- html = if @parent
310
- @parent.image_tag('drg_cms/add.png', { onclick: js, style: 'cursor: pointer;', title: title, alt: 'Create'})
311
- else
312
- image_tag('drg_cms/add.png', { onclick: js, style: 'cursor: pointer;', title: title, alt: 'Create'})
313
- end
314
- html.html_safe
356
+ target = opts.delete('target') || 'iframe_cms'
357
+ opts['action'] = 'new'
358
+ js = "$('##{target}').attr('src', '#{_origin.url_for(opts)}'); return false;"
359
+ dc_link_to(nil, _origin.fa_icon('plus-circle lg', class: 'dc-inline-link'), '#',
360
+ { onclick: js, title: title, alt: 'Create'}).html_safe
315
361
  end
316
362
 
317
363
  ####################################################################
@@ -328,19 +374,14 @@ end
328
374
  # String. HTML code which includes edit image and javascript to invoke edit document action.
329
375
  ####################################################################
330
376
  def dc_link_for_edit(opts)
331
- title = opts.delete(:title) #
332
- title = t(title, title) if title
333
- target = opts.delete(:target) || 'iframe_cms'
334
- opts[:action] = 'edit'
335
- opts[:controller] ||= 'cmsedit'
336
- url = @parent ? @parent.url_for(opts) : url_for(opts)
337
- js = "$('##{target}').attr('src', '#{url}'); return false;"
338
- html = if @parent
339
- @parent.image_tag('drg_cms/edit.png', { onclick: js, style: 'cursor: pointer;', title: title, alt: 'Edit'})
340
- else
341
- image_tag('drg_cms/edit.png', { onclick: js, style: 'cursor: pointer;', title: title, alt: 'Edit'})
342
- end
343
- html.html_safe
377
+ opts.stringify_keys!
378
+ title = opts.delete('title') #
379
+ target = opts.delete('target') || 'iframe_cms'
380
+ opts['action'] = 'edit'
381
+ opts['controller'] ||= 'cmsedit'
382
+ js = "$('##{target}').attr('src', '#{_origin.url_for(opts)}'); return false;"
383
+ dc_link_to(nil, _origin.fa_icon('edit lg', class: 'dc-inline-link'), '#',
384
+ { onclick: js, title: title, alt: 'Edit'})
344
385
  end
345
386
 
346
387
  ####################################################################
@@ -349,7 +390,8 @@ end
349
390
  def dc_link_menu_tag(title) #:nodoc:
350
391
  html =<<EOT
351
392
  <dl>
352
- <dt><div class='drgcms_popmenu' href="#"><span><img style="cursor:pointer;" src="/assets/drg_cms/edit.png" title="#{title}"></span></div></dt>
393
+ <dt><div class='drgcms_popmenu' href="#">
394
+ #{_origin.fa_icon('edit lg', class: 'dc-inline-link', title: title)}</div></dt>
353
395
  <dd>
354
396
  <ul class=' div-hidden drgcms_popmenu_class'>
355
397
  EOT
@@ -361,8 +403,10 @@ end
361
403
  # Create one option in page edit link. Subroutine of dc_page_edit_menu.
362
404
  ####################################################################
363
405
  def dc_link_for_edit1(opts, link_text) #:nodoc:
364
- url = @parent.url_for(opts)
365
- "<li><div class='drgcms_popmenu_item' style='cursor: pointer;' data-url='#{url}'>#{link_text}</div></li>\n"
406
+ icon = opts.delete('icon')
407
+ url = @parent.url_for(opts)
408
+ "<li><div class='drgcms_popmenu_item' style='cursor: pointer;' data-url='#{url}'>
409
+ #{_origin.fa_icon(icon)} #{link_text}</div></li>\n"
366
410
  end
367
411
 
368
412
  ########################################################################
@@ -396,17 +440,20 @@ def dc_page_edit_menu(opts=@opts)
396
440
  @parent.cookies[:record] = Marshal.dump(kukis)
397
441
  title = "#{t('drgcms.edit')}: #{@page.subject}"
398
442
  dc_link_menu_tag(title) do |html|
399
- opts[:editparams].merge!( :controller => 'cmsedit', :action => 'edit' )
443
+ opts[:editparams].merge!( controller: 'cmsedit', action: 'edit', 'icon' => 'edit' )
400
444
  opts[:editparams].merge!( :id => @page.id, :table => @parent.site.page_table, formname: nil, edit_only: 'body' )
401
445
  html << dc_link_for_edit1( opts[:editparams], t('drgcms.edit_content') )
402
446
 
403
- opts[:editparams][:edit_only] = nil
447
+ # opts[:editparams][:edit_only] = nil
448
+ opts[:editparams].merge!( edit_only: nil, 'icon' => 'pencil' )
404
449
  html << dc_link_for_edit1( opts[:editparams], t('drgcms.edit_advanced') )
405
450
 
406
- opts[:editparams][:action] = 'new'
451
+ # opts[:editparams][:action] = 'new'
452
+ opts[:editparams].merge!( action: 'new', 'icon' => 'plus' )
407
453
  html << dc_link_for_edit1( opts[:editparams], t('drgcms.edit_new_page') )
408
454
 
409
- opts[:editparams].merge!(ids: @page.id, formname: 'dc_part', table: "#{@parent.site.page_table};dc_part" )
455
+ opts[:editparams].merge!(ids: @page.id, formname: 'dc_part', 'icon' => 'plus-square-o',
456
+ table: "#{@parent.site.page_table};dc_part" )
410
457
  html << dc_link_for_edit1( opts[:editparams], t('drgcms.edit_new_part') )
411
458
  end
412
459
  end
@@ -594,7 +641,7 @@ end
594
641
  def dc_get_site()
595
642
  return @site if @site # already cached
596
643
  #
597
- req = @parent ? @parent.request.url : request.url # different when called from renderer
644
+ req = _origin.request.url # different when called from renderer
598
645
  uri = URI.parse(req)
599
646
  @site = DcSite.find_by(name: uri.host)
600
647
  # Site can be aliased
@@ -859,12 +906,8 @@ end
859
906
  # Boolean. True if user has required role.
860
907
  ####################################################################
861
908
  def dc_user_has_role( role, user=nil, roles=nil )
862
- if roles.nil?
863
- roles = (@parent ? @parent.session : session)[:user_roles]
864
- end
865
- if user.nil?
866
- user = (@parent ? @parent.session : session)[:user_id]
867
- end
909
+ roles = _origin.session[:user_roles] if roles.nil?
910
+ user = _origin.session[:user_id] if user.nil?
868
911
  return false if user.nil?
869
912
  #
870
913
  if role.class == String
@@ -891,7 +934,7 @@ end
891
934
  ####################################################################
892
935
  def dc_dont?(what, default=false)
893
936
  return default if what.nil?
894
- %w(0 no - false).include?(what.to_s.downcase.strip)
937
+ %w(0 no - false none).include?(what.to_s.downcase.strip)
895
938
  end
896
939
 
897
940
  ############################################################################
@@ -30,7 +30,7 @@
30
30
  #
31
31
  # Each class must have at least render method implemented. All classes can
32
32
  # inherit from DrgcmsField class which acts as abstract template class and implements
33
- # most of surrounding code.
33
+ # most of surrounding code for creating custom DRG CMS form field.
34
34
  #
35
35
  # Render method must create html and javascript code which must be
36
36
  # saved to internal @html and @js variables. Field code is then retrived by accessing
@@ -58,7 +58,7 @@ module DrgcmsFormFields
58
58
 
59
59
  ###########################################################################
60
60
  # Template method for DRG CMS form field definition. This is abstract class with
61
- # most of the common code already implemented.
61
+ # most of the common code for custom form field already implemented.
62
62
  ###########################################################################
63
63
  class DrgcmsField
64
64
  attr_reader :html, :js
@@ -137,7 +137,7 @@ end
137
137
  # Parameters:
138
138
  # [Hash] Hash. Ruby hash parameters.
139
139
  #
140
- # Example: As used in forms
140
+ # Form example: As used in forms
141
141
  # options:
142
142
  # height: 400
143
143
  # width: 800
@@ -190,6 +190,25 @@ end
190
190
  # Implementation of readonly DRG CMS form field.
191
191
  #
192
192
  # Readonly field value is just painted on form.
193
+ #
194
+ # ===Form options:
195
+ # * +name:+ field name
196
+ # * +type:+ readonly
197
+ # * +eval:+ value will be provided by evaluating expression. Usually dc_name4_id helper
198
+ # can be used to get value. Example: dc_name4_id,model_name_in_lower_case,field_name
199
+ #
200
+ # * +readonly:+ yes (can be applied to any field type)
201
+ #
202
+ # Form example:
203
+ # 10:
204
+ # name: user
205
+ # type: readonly
206
+ # html:
207
+ # size: 50
208
+ # 20:
209
+ # name: created_by
210
+ # type: readonly
211
+ # eval: dc_name4_id,dc_user,name
193
212
  ###########################################################################
194
213
  class Readonly < DrgcmsField
195
214
  ###########################################################################
@@ -218,6 +237,15 @@ end
218
237
  # Implementation of hidden DRG CMS form field.
219
238
  #
220
239
  # Will create hidden_field on form.
240
+ #
241
+ # ===Form options:
242
+ # * +name:+ field name
243
+ # * +type:+ hidden_field
244
+ #
245
+ # Form example:
246
+ # 10:
247
+ # name: im_hidden
248
+ # type: hidden_field
221
249
  ###########################################################################
222
250
  class HiddenField < DrgcmsField
223
251
  ###########################################################################
@@ -235,6 +263,22 @@ end
235
263
  # Implementation of embedded DRG CMS form field.
236
264
  #
237
265
  # Creates html required to paint embedded object on form.
266
+ #
267
+ # ===Form options:
268
+ # * +name:+ field name (required)
269
+ # * +type:+ embedded (required)
270
+ # * +formname:+ name of form which will be used for editing
271
+ # * +html:+ html options (optional)
272
+ # * +height:+ height of embedded object in pixels (1000)
273
+ # * +width:+ width of embedded object in pixels (500)
274
+ #
275
+ # Form example:
276
+ # 10:
277
+ # name: dc_parts
278
+ # type: embedded
279
+ # formname: dc_part
280
+ # html:
281
+ # height: 1000
238
282
  ###########################################################################
239
283
  class Embedded < DrgcmsField
240
284
  ###########################################################################
@@ -269,9 +313,19 @@ end
269
313
  end
270
314
 
271
315
  ###########################################################################
272
- # Implementation of journal_diff DRG CMS form field.
316
+ # Implementation of journal_diff DRG CMS form field. journal_diff field is used to
317
+ # show differences between two fields in DcJournal collection.
273
318
  #
274
- # journal_diff field is used to show differences between two fields in DcJournal collection.
319
+ # ===Form options:
320
+ # * +name:+ field name (required)
321
+ # * +type:+ journal_diff (required)
322
+ #
323
+ # Form example:
324
+ # 10:
325
+ # name: diff
326
+ # type: journal_diff
327
+ # html:
328
+ # size: 100x25
275
329
  ###########################################################################
276
330
  class JournalDiff < DrgcmsField
277
331
  ###########################################################################
@@ -298,15 +352,23 @@ end
298
352
  # id's of selected documents and control typically displays value of the field name
299
353
  # defined by search options.
300
354
  #
301
- # Form options:
302
- # [name] field name
303
- # [table] Collection (table) name
304
- # [search] Search may consist of three parameters from which last is not required. Parameters
305
- # can be separated either by dot (.) or comma(,) table_name.display_field_name.(table_name_search_method)
306
- # table_name is name of collection, display_field_name will be used for displaying value of selected
307
- # document ids on screen. Optional search method can be defined when searched documents are
308
- # only subset of all documents and additional query is required.
309
- # [html] Various html options which can be applied to input object.
355
+ # ===Form options:
356
+ # * +name:+ field name (required)
357
+ # * +type:+ multitext_autocomplete (required)
358
+ # * +table+ Collection (table) name. When defined search must contain field name
359
+ # * +search:+ Search may consist of three parameters from which are separated either by dot (.) or comma(,)
360
+ # * search_field_name; when table option is defined search must define field name which will be used for search query
361
+ # * collection_name.search_field_name; Same as above except that table options must be ommited.
362
+ # * collection_name.search_field_name.method_name; When searching is more complex custom search
363
+ # method may be defined in CollectionName model which will provide result set for search.
364
+ #
365
+ # Form example:
366
+ # 90:
367
+ # name: kats
368
+ # type: multitext_autocomplete
369
+ # search: dc_category.name
370
+ # html:
371
+ # size: 30
310
372
  ###########################################################################
311
373
  class MultitextAutocomplete < DrgcmsField
312
374
 
@@ -447,22 +509,37 @@ end
447
509
  ###########################################################################
448
510
  # Implementation of select DRG CMS form field.
449
511
  #
450
- # Form options:
451
- # [name] field name
452
- # [choices] Values for choices separated by comma. Values can also be specified like description:value.
453
- # In this case description will be shown to user, but value will be saved to document.
512
+ # ===Form options:
513
+ # * +name:+ field name (required)
514
+ # * +type:+ select (required)
515
+ # * +choices:+ Values for choices separated by comma. Values can also be specified like description:value.
516
+ # In the example description will be shown to user, but value will be saved to document.
454
517
  # choices: 'OK:0,Ready:1,Error:2'
455
518
  # choices: Ruby,Pyton,PHP
456
- # [eval] Choices will be provided by evaluating expression
457
- # eval: dc_choices4('model_name','description_field_name','_id') # call dc_choices4 method
458
- # eval: DcPolicyRole.choices4_roles # call class method choices4_roles in DcPolicyRole class definition.
459
- # If choices or eval is not defined choices will be provided from translation helpers. If you have
460
- # field status on a form choices may be provided by en.helpers.model_name.choices4_status entry of
461
- # english translation. English is of course default translation. If you provide translations in
462
- # your own language then select choices will be localized.
519
+ # * +eval:+ Choices will be provided by evaluating expression
520
+ # * eval: dc_choices4('model_name','description_field_name','_id'); dc_choices4 helper will provide data for select field.
521
+ # * eval: ModelName.choices4_field; ModelName class will define method choices4_field which
522
+ # will provide data for select field.
523
+ # * collection_name.search_field_name.method_name; When searching is more complex custom search
524
+ # method may be defined in CollectionName model which will provide result set for search.
525
+ # * If choices or eval is not defined choices will be provided from translation helpers. For example:
526
+ # Collection has field status choices for field may be provided by en.helpers.model_name.choices4_status
527
+ # entry of english translation. English is of course default translation. If you provide translations in
528
+ # your local language then select choices will be localized.
529
+ # en.helpers.model_name.choices4_status: 'OK:0,Ready:1,Error:2'
463
530
  # sl.helpers.model_name.choices4_status: 'V redu:0,Pripravljen:1,Napaka:2'
464
- #
465
- # [html] html options which can be applied to select field.
531
+ # * +html:+ html options which apply to select field (optional)
532
+ #
533
+ # Form example:
534
+ # 30:
535
+ # name: type
536
+ # type: select
537
+ # 40:
538
+ # name: parent
539
+ # type: select
540
+ # eval: DcCategory.values_for_parent
541
+ # html:
542
+ # include_blank: true
466
543
  ###########################################################################
467
544
  class Select < DrgcmsField
468
545
 
@@ -537,6 +614,23 @@ end
537
614
 
538
615
  ###########################################################################
539
616
  # Implementation of check_box DRG CMS form field.
617
+ #
618
+ # ===Form options:
619
+ # * +name:+ field name (required)
620
+ # * +type:+ check_box (required)
621
+ # * +choices:+ Values check_box separated by comma (1,0) (yes,no)
622
+ # * +checked_value:+ 1 or yes or approved
623
+ # * +unchecked_value:+ 0 or no or not approved
624
+ # * +html:+ html options which apply to check_box field (optional)
625
+ #
626
+ # Form example:
627
+ # 30:
628
+ # name: active
629
+ # type: check_box
630
+ # 40:
631
+ # name: status
632
+ # type: check_box
633
+ # choices: yes,no
540
634
  ###########################################################################
541
635
  class CheckBox < DrgcmsField
542
636
 
@@ -563,7 +657,18 @@ end
563
657
  end
564
658
 
565
659
  ###########################################################################
566
- # Implementation of comment DRG CMS form field.
660
+ # Implementation of comment DRG CMS form field. Comments may also be written
661
+ # on the place of form field.
662
+ #
663
+ # ===Form options:
664
+ # * +text:+ any text. Text will be translated if key is found in translations. (required)
665
+ # * +type:+ comment (required)
666
+ #
667
+ # Form example:
668
+ # 30:
669
+ # name: active
670
+ # type: check_box
671
+
567
672
  ###########################################################################
568
673
  class Comment < DrgcmsField
569
674
 
@@ -571,14 +676,32 @@ class Comment < DrgcmsField
571
676
  # Render comment field html code
572
677
  ###########################################################################
573
678
  def render
574
- @html << @yaml['text']
679
+ @html << t(@yaml['text'], @yaml['text'])
575
680
  self
576
681
  end
577
682
  end
578
683
 
579
684
  ###########################################################################
580
685
  # Implementation of link_to DRG CMS form field. link_to form field is mostly used by polls but can
581
- # be also incorporated in the middle of form.
686
+ # be also incorporated anywhere on the form.
687
+ #
688
+ # ===Form options:
689
+ # * +type:+ link_to (required)
690
+ # * +caption:+ Link caption
691
+ # * +icon:+ Link icon
692
+ # * +url:+ direct url link
693
+ # * +controller:+ controller name
694
+ # * +action:+ action name
695
+ # * +html:+ html options which apply to link_to (optional)
696
+ #
697
+ # Form example:
698
+ # 30:
699
+ # type: link_to
700
+ # caption: Some action
701
+ # icon: cogs
702
+ # controller: my_controller
703
+ # action: my_action
704
+ # id: id # will be replaced by record._id
582
705
  ###########################################################################
583
706
  class LinkTo < DrgcmsField
584
707
 
@@ -590,13 +713,14 @@ def render
590
713
  @yaml['html']['class'] ||= 'dc-link dc-animate'
591
714
  @yaml['html'].symbolize_keys!
592
715
  #
716
+ @yaml[:id] = record._id if @yaml[:id] == 'id'
593
717
  url = @yaml['url'] || "#{@yaml[:controller]}/#{@yaml[:action]}/#{@yaml[:id]}"
594
718
  url.gsub!('//','/') # no action and id
595
719
  url = '/' + @yaml['url'] unless url[0,1] == '/' # no leading /
596
720
  url.chop if url[0,-1] == '/' # remove trailing /
597
721
  #
598
722
  caption = @yaml['caption'] || @yaml['text']
599
- @html << @parent.link_to(caption, url, @yaml['html'])
723
+ @html << @parent.dc_link_to(caption, @yaml['icon'], url, @yaml['html'])
600
724
  self
601
725
  end
602
726
  end
@@ -604,6 +728,18 @@ end
604
728
  ###########################################################################
605
729
  # Create submit_tag form field. submit_tag form field is mostly used by polls but can
606
730
  # be also incorporated in the middle of form.
731
+ #
732
+ # ===Form options:
733
+ # * +type:+ submit_tag (required)
734
+ # * +caption:+ Submit field caption
735
+ # * +icon:+ Icon
736
+ # * +html:+ html options which apply to link_to (optional)
737
+ #
738
+ # Form example:
739
+ # 40:
740
+ # type: submit_tag
741
+ # caption: translate.this
742
+ # icon: check
607
743
  ###########################################################################
608
744
  class SubmitTag < DrgcmsField
609
745
 
@@ -624,11 +760,31 @@ end
624
760
 
625
761
  ###########################################################################
626
762
  # Implementation of password DRG CMS form field.
763
+ #
764
+ # ===Form options:
765
+ # * +type:+ password_field (required)
766
+ # * +name:+ Field name (required)
767
+ # * +html:+ html options which apply to password field (optional)
768
+ #
769
+ # Form example:
770
+ # 20:
771
+ # name: password
772
+ # type: pasword_field
773
+ # html:
774
+ # size: 20
775
+ #
776
+ # 30:
777
+ # name: password_confirmation
778
+ # type: pasword_field
779
+ # html:
780
+ # size: 20
781
+ #
627
782
  ###########################################################################
628
783
  class PasswordField < DrgcmsField
629
784
 
630
785
  ###########################################################################
631
786
  # Render password field html code
787
+ #
632
788
  ###########################################################################
633
789
  def render
634
790
  return self if @readonly
@@ -641,6 +797,21 @@ end
641
797
 
642
798
  ###########################################################################
643
799
  # Implementation of date_select DRG CMS form field.
800
+ #
801
+ # ===Form options:
802
+ # * +type:+ date_select (required)
803
+ # * +name:+ Field name (required)
804
+ # * +options:+ options which apply to date_select field (optional)
805
+ # * +html:+ html options which apply to password field (optional)
806
+ #
807
+ # Form example:
808
+ # 50:
809
+ # name: valid_from
810
+ # type: date_select
811
+ # options:
812
+ # include_blank: true
813
+ # html:
814
+ # class: my-date-class
644
815
  ###########################################################################
645
816
  class DateSelect < DrgcmsField
646
817
 
@@ -648,9 +819,7 @@ class DateSelect < DrgcmsField
648
819
  # Render date_select field html code
649
820
  ###########################################################################
650
821
  def render
651
- # return ro_standard if @readonly
652
822
  return ro_standard( @parent.dc_format_value(@record[@yaml['name']])) if @readonly
653
-
654
823
  #
655
824
  @yaml['options'] ||= {}
656
825
  set_initial_value('options','default')
@@ -683,6 +852,19 @@ end
683
852
 
684
853
  ###########################################################################
685
854
  # Create datetime_select form field
855
+ #
856
+ # ===Form options:
857
+ # * +type:+ date_select (required)
858
+ # * +name:+ Field name (required)
859
+ # * +options:+ options which apply to date_select field (optional)
860
+ # * +html:+ html options which apply to password field (optional)
861
+ #
862
+ # Form example:
863
+ # 60:
864
+ # name: end_time
865
+ # type: date_time_select
866
+ # options:
867
+ # include_blank: true
686
868
  ###########################################################################
687
869
  class DatetimeSelect < DrgcmsField
688
870
 
@@ -712,7 +894,41 @@ end
712
894
  end
713
895
 
714
896
  ###########################################################################
715
- # Implementation of date_picker DRG CMS form field.
897
+ # Implementation of date_picker DRG CMS form field with help of jQuery DateTimePicker plugin.
898
+ #
899
+ # Since javascript date(time) format differs from ruby date(time) format localization
900
+ # must be provided in order for date_picker object works as expected. For example:
901
+ #
902
+ # en:
903
+ # datetimepicker:
904
+ # formats:
905
+ # date: 'Y/m/d'
906
+ # datetime: 'Y/m/d H:i'
907
+ #
908
+ # sl:
909
+ # datetimepicker:
910
+ # formats:
911
+ # date: 'd.m.Y'
912
+ # datetime: 'd.m.Y H:i'
913
+ #
914
+ # ===Form options:
915
+ # * +type:+ date_picker (required)
916
+ # * +name:+ Field name (required)
917
+ # * +options:+ options which apply to date_picker field. All options can be found here http://xdsoft.net/jqplugins/datetimepicker/ .
918
+ # Options can be defined in single line like:
919
+ # * options: 'inline: true,lang: "sl"' or
920
+ #
921
+ # * options:
922
+ # * inline: true
923
+ # * lang: '"sl"'
924
+ #
925
+ # * +html:+ html options which apply to date_picker field (optional)
926
+ #
927
+ # Form example:
928
+ # 10:
929
+ # name: created
930
+ # type: date_picker
931
+ # options: 'inline: true,lang: "sl"'
716
932
  ###########################################################################
717
933
  class DatePicker < DrgcmsField
718
934
 
@@ -720,13 +936,13 @@ class DatePicker < DrgcmsField
720
936
  # Render date_picker field html code
721
937
  ###########################################################################
722
938
  def render
723
- # return ro_standard if @readonly
724
- return ro_standard( @parent.dc_format_value(@record[@yaml['name']])) if @readonly
939
+ value = @record[@yaml['name']] ? I18n.localize(@record[@yaml['name']].localtime.to_date) : nil
940
+ return ro_standard( @parent.dc_format_value(value)) if @readonly
725
941
  #
726
942
  @yaml['options'] ||= {}
727
943
  set_initial_value
728
944
  @yaml['html']['size'] ||= 10
729
- @yaml['html']['value'] = I18n.localize(@record[@yaml['name']].localtime.to_date) if @record[@yaml['name']]
945
+ @yaml['html']['value'] = value
730
946
  #
731
947
  @yaml['options']['lang'] ||= "'#{I18n.locale}'"
732
948
  @yaml['options']['format'] ||= "'#{t('datetimepicker.formats.date')}'"
@@ -755,7 +971,27 @@ end
755
971
 
756
972
  end
757
973
  ###########################################################################
758
- # Implementation of date_time_picker DRG CMS form field.
974
+ # Implementation of date_time_picker DRG CMS form field with help of jQuery DateTimePicker plugin
975
+ #
976
+ # ===Form options:
977
+ # * +type:+ date_time_picker (required)
978
+ # * +name:+ Field name (required)
979
+ # * +options:+ options which apply to date_picker field. All options can be found here http://xdsoft.net/jqplugins/datetimepicker/ .
980
+ # Options can be defined in single line like:
981
+ # * options: 'step: 15,inline: true,lang: "sl"' or
982
+ #
983
+ # * options:
984
+ # * step: 15
985
+ # * inline: true
986
+ # * lang: '"sl"'
987
+ #
988
+ # * +html:+ html options which apply to date_time_picker field (optional)
989
+ #
990
+ # Form example:
991
+ # 10:
992
+ # name: valid_to
993
+ # type: date_time_picker
994
+ # options: 'step: 60'
759
995
  ###########################################################################
760
996
  class DatetimePicker < DrgcmsField
761
997
 
@@ -763,13 +999,13 @@ class DatetimePicker < DrgcmsField
763
999
  # Render date_time_picker field html code
764
1000
  ###########################################################################
765
1001
  def render
766
- # return ro_standard if @readonly
767
- return ro_standard( @parent.dc_format_value(@record[@yaml['name']])) if @readonly
1002
+ value = @record[@yaml['name']] ? I18n.localize(@record[@yaml['name']].localtime) : nil
1003
+ return ro_standard( @parent.dc_format_value(value)) if @readonly
768
1004
  #
769
1005
  @yaml['options'] ||= {}
770
1006
  set_initial_value
771
- @yaml['html']['size'] ||= 12
772
- @yaml['html']['value'] = I18n.localize(@record[@yaml['name']].localtime) if @record[@yaml['name']]
1007
+ @yaml['html']['size'] ||= 14
1008
+ @yaml['html']['value'] = value if @record[@yaml['name']]
773
1009
  #
774
1010
  @yaml['options']['lang'] ||= "'#{I18n.locale}'"
775
1011
  @yaml['options']['format'] ||= "'#{t('datetimepicker.formats.datetime')}'"
@@ -799,9 +1035,27 @@ end
799
1035
 
800
1036
  ###########################################################################
801
1037
  # Implementation of text_autocomplete DRG CMS form field.
1038
+ #
1039
+ # ===Form options:
1040
+ # * +name:+ field name (required)
1041
+ # * +type:+ text_autocomplete (required)
1042
+ # * +table+ Collection (table) name. When defined search must contain field name
1043
+ # * +search:+ Search may consist of three parameters from which are separated either by dot (.) or comma(,)
1044
+ # * search_field_name; when table option is defined search must define field name which will be used for search query
1045
+ # * collection_name.search_field_name; Same as above except that table options must be ommited.
1046
+ # * collection_name.search_field_name.method_name; When searching is more complex custom search
1047
+ # method may be defined in CollectionName model which will provide result set for search.
1048
+ #
1049
+ # Form example:
1050
+ # 10:
1051
+ # name: user_id
1052
+ # type: text_autocomplete
1053
+ # search: dc_user.name
1054
+ # html:
1055
+ # size: 30
802
1056
  ###########################################################################
803
1057
  class TextAutocomplete < DrgcmsField
804
-
1058
+
805
1059
  ###########################################################################
806
1060
  # Render text_autocomplete field html code
807
1061
  ###########################################################################
@@ -890,6 +1144,18 @@ end
890
1144
 
891
1145
  ###########################################################################
892
1146
  # Implementation of text_area DRG CMS form field.
1147
+ #
1148
+ # ===Form options:
1149
+ # * +type:+ text_area (required)
1150
+ # * +name:+ Field name (required)
1151
+ # * +html:+ html options which apply to text_area field (optional)
1152
+ #
1153
+ # Form example:
1154
+ # 10:
1155
+ # name: css
1156
+ # type: text_area
1157
+ # html:
1158
+ # size: 100x30
893
1159
  ###########################################################################
894
1160
  class TextArea < DrgcmsField
895
1161
 
@@ -911,6 +1177,18 @@ end
911
1177
 
912
1178
  ###########################################################################
913
1179
  # Implementation of text_field DRG CMS form field.
1180
+ #
1181
+ # ===Form options:
1182
+ # * +type:+ text_field (required)
1183
+ # * +name:+ Field name (required)
1184
+ # * +html:+ html options which apply to text_field field (optional)
1185
+ #
1186
+ # Form example:
1187
+ # 10:
1188
+ # name: title
1189
+ # type: text_field
1190
+ # html:
1191
+ # size: 30
914
1192
  ###########################################################################
915
1193
  class TextField < DrgcmsField
916
1194
 
@@ -928,9 +1206,39 @@ end
928
1206
  end
929
1207
 
930
1208
  ###########################################################################
931
- # Implementation of text_with_select DRG CMS form field.
1209
+ # Implementation of text_with_select DRG CMS form field. Field will provide
1210
+ # text_field entry field with select dropdown box with optional values for the field.
1211
+ # Form options are mostly same as in select field.
1212
+ #
1213
+ # ===Form options:
1214
+ # * +name:+ field name (required)
1215
+ # * +type:+ text_with_select (required)
1216
+ # * +choices:+ Values for choices separated by comma. Values can also be specified like description:value.
1217
+ # In this case description will be shown to user, but value will be saved to document.
1218
+ # * choices: 'OK:0,Ready:1,Error:2'
1219
+ # * choices: Ruby,Pyton,PHP
1220
+ # * +eval:+ Choices will be provided by evaluating expression
1221
+ # * eval: dc_choices4('model_name','description_field_name','_id'); dc_choices4 helper will provide data for select field.
1222
+ # * eval: ModelName.choices4_field; ModelName class will define method choices4_field which
1223
+ # will provide data for select field. Since expression is evaluated in the context of Form Field object
1224
+ # even session session variables can be accessed. Ex. +eval: 'MyClass.method(@parent.session[:user_id])'+
1225
+ # * collection_name.search_field_name.method_name; When searching is more complex custom search
1226
+ # method may be defined in CollectionName model which will provide result set for search.
1227
+ # * If choices or eval is not defined choices will be provided from translation helpers. For example:
1228
+ # Collection has field status choices for field may be provided by en.helpers.model_name.choices4_status
1229
+ # entry of english translation. English is of course default translation. If you provide translations in
1230
+ # your local language then select choices will be localized.
1231
+ # * en.helpers.model_name.choices4_status: 'OK:0,Ready:1,Error:2'
1232
+ # * sl.helpers.model_name.choices4_status: 'V redu:0,Pripravljen:1,Napaka:2'
1233
+ # * +html:+ html options which apply to select and text_field fields (optional)
932
1234
  #
933
- # Create text_field with select dropdown box with optional values for the field
1235
+ # Form example:
1236
+ # 10:
1237
+ # name: link
1238
+ # type: text_with_select
1239
+ # eval: '@parent.dc_page_class.all_pages_for_site(@parent.dc_get_site)'
1240
+ # html:
1241
+ # size: 50
934
1242
  ###########################################################################
935
1243
  class TextWithSelect < Select
936
1244
 
@@ -963,11 +1271,25 @@ end
963
1271
  end
964
1272
 
965
1273
  ###########################################################################
966
- # Implementation of html_field DRG CMS form field.
1274
+ # Implementation of html_field DRG CMS form field.
1275
+ #
1276
+ # HtmlField class only implements code for calling actual html edit field code.
1277
+ # This is by default drg_default_html_editor gem which uses CK editor javascript plugin
1278
+ # or any other plugin. Which plugin will be used as html editor is defined by
1279
+ # dc_site.settings html_editor setting.
967
1280
  #
968
- # HtmlField class implements redirection for calling actual html edit field code.
969
- # This can be drg_default_html_editor's ckeditor or any other code defined
970
- # by dc_site.settings html_editor setting.
1281
+ # Example of dc_site.setting used for drg_default_html_editor gem.
1282
+ # html_editor: ckeditor
1283
+ # ck_editor:
1284
+ # config_file: /files/ck_config.js
1285
+ # css_file: /files/ck_css.css
1286
+ # file_select: elfinder
1287
+ #
1288
+ # Form example:
1289
+ # 10:
1290
+ # name: body
1291
+ # type: html_field
1292
+ # options: "height: 500, width: 550, toolbar: 'basic'"
971
1293
  ###########################################################################
972
1294
  class HtmlField < DrgcmsField
973
1295
 
@@ -999,6 +1321,20 @@ end
999
1321
  # FileSelect like HtmlField implements redirection for calling document manager edit field code.
1000
1322
  # This can be drg_default_html_editor's elfinder or any other code defined
1001
1323
  # by dc_site.settings file_select setting.
1324
+ #
1325
+ # Example of dc_site.setting used for drg_default_html_editor gem.
1326
+ # html_editor: ckeditor
1327
+ # ck_editor:
1328
+ # config_file: /files/ck_config.js
1329
+ # css_file: /files/ck_css.css
1330
+ # file_select: elfinder
1331
+ #
1332
+ # Form example:
1333
+ # 60:
1334
+ # name: picture
1335
+ # type: file_select
1336
+ # html:
1337
+ # size: 50
1002
1338
  ###########################################################################
1003
1339
  class FileSelect < DrgcmsField
1004
1340