interview 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/interview.gemspec +1 -0
  3. data/lib/{generators/interview/install/templates → assets/javascripts}/interview.js.coffee +17 -25
  4. data/lib/{generators/interview/install/templates/bootstrap_interview.css.scss → assets/stylesheets/interview.css.scss} +3 -2
  5. data/lib/generators/interview/install/install_generator.rb +0 -2
  6. data/lib/generators/interview/install/templates/interview.rb +1 -1
  7. data/lib/interview.rb +65 -51
  8. data/lib/interview/association_methods.rb +2 -0
  9. data/lib/interview/builder.rb +32 -24
  10. data/lib/interview/control.rb +25 -7
  11. data/lib/interview/controls/actionbar.rb +41 -0
  12. data/lib/interview/controls/alert.rb +15 -0
  13. data/lib/interview/{association_attribute.rb → controls/association_attribute.rb} +8 -8
  14. data/lib/interview/{association_list_attribute.rb → controls/association_list_attribute.rb} +10 -9
  15. data/lib/interview/controls/attribute.rb +80 -0
  16. data/lib/interview/controls/auto_attribute.rb +16 -0
  17. data/lib/interview/controls/boolean_attribute.rb +20 -0
  18. data/lib/interview/controls/breadcrumbs.rb +15 -0
  19. data/lib/interview/controls/button.rb +25 -0
  20. data/lib/interview/controls/caret.rb +9 -0
  21. data/lib/interview/controls/collapse_container.rb +16 -0
  22. data/lib/interview/controls/container.rb +5 -0
  23. data/lib/interview/controls/container_attribute.rb +28 -0
  24. data/lib/interview/controls/date_attribute.rb +23 -0
  25. data/lib/interview/controls/datetime_attribute.rb +22 -0
  26. data/lib/interview/controls/decimal_attribute.rb +12 -0
  27. data/lib/interview/controls/dropdown.rb +35 -0
  28. data/lib/interview/controls/form.rb +35 -0
  29. data/lib/interview/controls/form_errors.rb +20 -0
  30. data/lib/interview/controls/glyphicon.rb +19 -0
  31. data/lib/interview/controls/grid.rb +62 -0
  32. data/lib/interview/controls/hidden_attribute.rb +11 -0
  33. data/lib/interview/controls/horizontal_form_container.rb +13 -0
  34. data/lib/interview/controls/html_control.rb +13 -0
  35. data/lib/interview/controls/html_doctype.rb +9 -0
  36. data/lib/interview/controls/html_headers.rb +12 -0
  37. data/lib/interview/{html_text_attribute.rb → controls/html_text_attribute.rb} +9 -5
  38. data/lib/interview/controls/image_attribute.rb +61 -0
  39. data/lib/interview/controls/image_gallery_attribute.rb +72 -0
  40. data/lib/interview/controls/image_light_box.rb +17 -0
  41. data/lib/interview/{integer_attribute.rb → controls/integer_attribute.rb} +0 -0
  42. data/lib/interview/controls/link.rb +90 -0
  43. data/lib/interview/controls/list.rb +20 -0
  44. data/lib/interview/controls/media_object.rb +37 -0
  45. data/lib/interview/controls/navigation.rb +11 -0
  46. data/lib/interview/controls/navigation_item.rb +33 -0
  47. data/lib/interview/controls/nested_form.rb +45 -0
  48. data/lib/interview/controls/nested_form_add_images.rb +15 -0
  49. data/lib/interview/controls/nested_form_add_link.rb +29 -0
  50. data/lib/interview/controls/nested_form_remove_link.rb +12 -0
  51. data/lib/interview/{option_attribute.rb → controls/option_attribute.rb} +19 -19
  52. data/lib/interview/controls/pagination.rb +12 -0
  53. data/lib/interview/controls/panel.rb +13 -0
  54. data/lib/interview/{polymorphic_add_link.rb → controls/polymorphic_add_link.rb} +1 -1
  55. data/lib/interview/controls/polymorphic_nested_form.rb +17 -0
  56. data/lib/interview/{nested_form_add_link.rb → controls/polymorphic_nested_form_add_link.rb} +12 -28
  57. data/lib/interview/controls/progress_bar.rb +18 -0
  58. data/lib/interview/controls/scaffold_card.rb +27 -0
  59. data/lib/interview/controls/scaffold_form.rb +108 -0
  60. data/lib/interview/controls/search_form.rb +25 -0
  61. data/lib/interview/controls/section.rb +16 -0
  62. data/lib/interview/{space.rb → controls/space.rb} +5 -6
  63. data/lib/interview/{string_attribute.rb → controls/string_attribute.rb} +0 -0
  64. data/lib/interview/controls/submit.rb +14 -0
  65. data/lib/interview/controls/tab.rb +27 -0
  66. data/lib/interview/controls/tab_box.rb +21 -0
  67. data/lib/interview/controls/text.rb +33 -0
  68. data/lib/interview/{text_attribute.rb → controls/text_attribute.rb} +7 -5
  69. data/lib/interview/controls/tooltip.rb +21 -0
  70. data/lib/interview/{tree.rb → controls/tree.rb} +2 -3
  71. data/lib/interview/{view.rb → controls/view.rb} +4 -6
  72. data/lib/interview/engine.rb +4 -0
  73. data/lib/interview/handler.rb +15 -0
  74. data/lib/interview/has_html_options.rb +29 -0
  75. data/lib/interview/meta_control.rb +18 -0
  76. data/lib/interview/nested_buildable.rb +17 -0
  77. data/lib/interview/version.rb +1 -1
  78. metadata +84 -54
  79. data/lib/interview/actionbar.rb +0 -39
  80. data/lib/interview/attribute.rb +0 -166
  81. data/lib/interview/boolean_attribute.rb +0 -59
  82. data/lib/interview/breadcrumbs.rb +0 -21
  83. data/lib/interview/button.rb +0 -29
  84. data/lib/interview/collapse_container.rb +0 -31
  85. data/lib/interview/condition_container.rb +0 -19
  86. data/lib/interview/container.rb +0 -13
  87. data/lib/interview/container_attribute.rb +0 -30
  88. data/lib/interview/date_attribute.rb +0 -20
  89. data/lib/interview/datetime_attribute.rb +0 -20
  90. data/lib/interview/decimal_attribute.rb +0 -10
  91. data/lib/interview/dropdown.rb +0 -39
  92. data/lib/interview/form.rb +0 -64
  93. data/lib/interview/form_errors.rb +0 -22
  94. data/lib/interview/grid.rb +0 -54
  95. data/lib/interview/has_controls.rb +0 -40
  96. data/lib/interview/hidden_attribute.rb +0 -15
  97. data/lib/interview/html_control.rb +0 -21
  98. data/lib/interview/image_attribute.rb +0 -59
  99. data/lib/interview/image_gallery_attribute.rb +0 -79
  100. data/lib/interview/image_light_box.rb +0 -19
  101. data/lib/interview/link.rb +0 -134
  102. data/lib/interview/list.rb +0 -26
  103. data/lib/interview/media_object.rb +0 -27
  104. data/lib/interview/navigation.rb +0 -55
  105. data/lib/interview/navigation_item.rb +0 -41
  106. data/lib/interview/navigation_item_old.rb +0 -26
  107. data/lib/interview/nested_form.rb +0 -66
  108. data/lib/interview/nested_form_add_images.rb +0 -33
  109. data/lib/interview/nested_form_remove_link.rb +0 -28
  110. data/lib/interview/panel.rb +0 -18
  111. data/lib/interview/progress_bar.rb +0 -25
  112. data/lib/interview/search_form.rb +0 -21
  113. data/lib/interview/tab.rb +0 -21
  114. data/lib/interview/tab_box.rb +0 -30
  115. data/lib/interview/text.rb +0 -45
  116. data/lib/interview/tooltip.rb +0 -38
@@ -1,21 +0,0 @@
1
- module Interview
2
- class Breadcrumbs < Control
3
-
4
- include HasControls
5
-
6
- def render
7
- if Object.const_defined?('Gretel')
8
- return h.breadcrumbs
9
- else
10
- html = ::Builder::XmlMarkup.new
11
- html.ol class: 'breadcrumb' do
12
- add_parent(build_children).each do |control|
13
- html << control.render
14
- end
15
- end
16
- return html.target!
17
- end
18
- end
19
-
20
- end
21
- end
@@ -1,29 +0,0 @@
1
- module Interview
2
- class Button < Control
3
- include HasControls
4
-
5
- attr_accessor :caption, :name, :style, :submit
6
- attr_reader :html_class
7
-
8
- def initialize(params={})
9
- @html_class = []
10
- super
11
- end
12
-
13
- def render
14
- html_class = @html_class
15
- if @style.to_s == 'primary'
16
- html_class << 'btn btn-primary'
17
- else
18
- html_class << 'btn btn-default'
19
- end
20
-
21
- if @submit
22
- h.submit_tag @caption, name: @name, class: @html_class.join(' ')
23
- else
24
- h.button_tag @caption, name: @name, class: @html_class.join(' ')
25
- end
26
- end
27
-
28
- end
29
- end
@@ -1,31 +0,0 @@
1
- module Interview
2
- class CollapseContainer < Control
3
- include HasControls
4
-
5
- attr_accessor :caption
6
-
7
- def render
8
- html = ::Builder::XmlMarkup.new
9
- controls = add_parent(build_children)
10
- if @caption
11
- link = Interview::Link.new(caption: @caption)
12
- else
13
- link = controls.first
14
- controls = controls[1..-1]
15
- end
16
- link.url = '#'
17
- link.html_class << 'collapse_link'
18
- link.html_data[:toggle] = 'collapse'
19
- new_id = Time.now.to_f.to_s.delete('.')
20
- link.html_data[:target] = "##{new_id}"
21
- html << link.render
22
- html.div id: new_id, class: 'panel-collapse collapse' do
23
- controls.each do |control|
24
- html << control.render
25
- end
26
- end
27
- return html.target!
28
- end
29
-
30
- end
31
- end
@@ -1,19 +0,0 @@
1
- module Interview
2
- class ConditionContainer < Control
3
- include HasControls
4
-
5
- attr_accessor :condition
6
-
7
- def render
8
- object = find_attribute :object
9
- if @condition.call(object)
10
- return add_parent(build_children).map do |control|
11
- control.render
12
- end.join
13
- else
14
- return ''
15
- end
16
- end
17
-
18
- end
19
- end
@@ -1,13 +0,0 @@
1
- module Interview
2
- class Container < Control
3
-
4
- include HasControls
5
-
6
- def render
7
- return add_parent(build_children).map do |control|
8
- control.render
9
- end.join
10
- end
11
-
12
- end
13
- end
@@ -1,30 +0,0 @@
1
- module Interview
2
- class ContainerAttribute < Attribute
3
- include HasControls
4
-
5
- def value
6
- return nil
7
- end
8
-
9
- def caption
10
- return @caption.to_s
11
- end
12
-
13
- def tooltip
14
- return ''
15
- end
16
-
17
- def render_read
18
- html = ::Builder::XmlMarkup.new
19
- add_parent(build_children).each do |control|
20
- html << control.render
21
- end
22
- return html.target!
23
- end
24
-
25
- def render_write
26
- render_read
27
- end
28
-
29
- end
30
- end
@@ -1,20 +0,0 @@
1
- module Interview
2
- class DateAttribute < Attribute
3
-
4
- attr_accessor :format
5
-
6
- def render_read
7
- return '' if value.nil?
8
- if @format
9
- return value.strftime(@format)
10
- else
11
- return h.l value
12
- end
13
- end
14
-
15
- def render_write
16
- form_builder.date_select @method #, {}, {class: 'form-control'}
17
- end
18
-
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- module Interview
2
- class DatetimeAttribute < Attribute
3
-
4
- attr_accessor :format
5
-
6
- def render_read
7
- return '' if value.nil?
8
- if @format
9
- return value.strftime(@format)
10
- else
11
- return h.l value
12
- end
13
- end
14
-
15
- def render_write
16
- form_builder.date_select @method #, {}, {class: 'form-control'}
17
- end
18
-
19
- end
20
- end
@@ -1,10 +0,0 @@
1
- module Interview
2
- class DecimalAttribute < Attribute
3
-
4
- def render_read
5
- return '' if value.nil?
6
- return h.number_with_precision(value).to_s
7
- end
8
-
9
- end
10
- end
@@ -1,39 +0,0 @@
1
- module Interview
2
- class Dropdown < Control
3
- include HasControls
4
-
5
- attr_accessor :image, :caption, :style, :html_class, :container_tag
6
-
7
- def initialize(params={})
8
- @html_class = []
9
- super
10
- end
11
-
12
- def render
13
- container_tag = @container_tag || 'div'
14
- html = ::Builder::XmlMarkup.new
15
- html_class = @html_class.dup
16
- html_class << 'dropdown'
17
- html.tag! container_tag, class: html_class.join(' ') do
18
- html_class = 'dropdown-toggle'
19
- html_class += ' btn btn-default' if @style == 'button'
20
- html.a class: html_class, href: '#', :'data-toggle' => 'dropdown' do
21
- html.span '', class: "glyphicon glyphicon-#{@image}" if @image
22
- html.text! ' ' if @image and @caption
23
- html.text! @caption if @caption
24
- html.text! ' ' if @caption
25
- html.span '', class: 'caret'
26
- end
27
- html.ul class: 'dropdown-menu' do
28
- add_parent(build_children).each do |control|
29
- html.li do
30
- html << control.render
31
- end
32
- end
33
- end
34
- end
35
- return html.target!
36
- end
37
-
38
- end
39
- end
@@ -1,64 +0,0 @@
1
- module Interview
2
- class Form < Control
3
- include HasControls
4
-
5
- attr_accessor :skip_submit, :submit_label, :multi_create, :align, :redirect_to
6
- attr_reader :form_builder
7
-
8
- def render
9
- object = find_attribute!(:object)
10
- html_options = case @align
11
- when 'horizontal' then { class: 'form-horizontal' }
12
- when 'inline' then { class: 'form-inline' }
13
- else {}
14
- end
15
- return h.form_for(object, role: 'form', html: html_options) do |form_builder|
16
- @form_builder = form_builder
17
- html = ::Builder::XmlMarkup.new(indent: 2)
18
-
19
- render_default_controls(html)
20
-
21
- add_parent(build_children).each do |control|
22
- html << control.render
23
- html.text! ' ' if @align == 'inline'
24
- end
25
-
26
- if @align == 'horizontal'
27
- html.div class: 'form-group' do
28
- html.div class: 'col-sm-offset-3 col-sm-9' do
29
- render_submit(html)
30
- end
31
- end
32
- else
33
- render_submit(html)
34
- end
35
-
36
- html.target!.html_safe
37
- end
38
- end
39
-
40
- protected
41
-
42
- def render_submit(html)
43
- if not @skip_submit
44
- html << form_builder.submit(@submit_label, class: 'btn btn-primary')
45
- if @multi_create || find_attribute(:multi_create)
46
- html.text! ' '
47
- html << h.check_box_tag('new_record', '1', true)
48
- html.text! ' und weiteren Datesatz' # todo
49
- end
50
- end
51
- end
52
-
53
- def render_default_controls(html)
54
- html << FormErrors.new(parent: self).render
55
-
56
- if @redirect_to == :parent and Object.const_defined? 'Gretel'
57
- html << h.hidden_field_tag('redirect_to', h.parent_breadcrumb.url)
58
- elsif @redirect_to == :current
59
- html << h.hidden_field_tag('redirect_to', h.request.original_url)
60
- end
61
- end
62
-
63
- end
64
- end
@@ -1,22 +0,0 @@
1
- module Interview
2
- class FormErrors < Control
3
-
4
- def render
5
- object = find_attribute!(:object)
6
-
7
- html = ::Builder::XmlMarkup.new
8
- if object.errors.any?
9
- html.div class: 'alert alert-danger' do
10
- html.h4 h.translate("errors.template.header", count: object.errors.count, model: object.class.model_name.human)
11
- html.ul do
12
- object.errors.full_messages.each do |msg|
13
- html.li msg
14
- end
15
- end
16
- end
17
- end
18
- return html.target!
19
- end
20
-
21
- end
22
- end
@@ -1,54 +0,0 @@
1
- module Interview
2
- class Grid < Control
3
- include HasControls
4
-
5
- attr_accessor :objects, :sortable
6
- attr_reader :object
7
-
8
- def render
9
- objects = @objects || find_attribute!(:objects)
10
- controls = add_parent(build_children)
11
- @object = find_attribute!(:object)
12
- sortable_id = "sortable_#{@object.class.model_name.plural}" if @sortable
13
- html = ::Builder::XmlMarkup.new
14
- html.table class: 'table' do
15
- html.thead do
16
- html.tr do
17
- html.th '' if @sortable
18
- controls.each do |control|
19
- html.th do
20
- html << control.caption
21
- end
22
- end
23
- end
24
- end
25
- html_opts = {}
26
- html_opts[:id] = sortable_id if @sortable
27
- html.tbody html_opts do
28
- objects.each do |object|
29
- @object = object
30
- html_opts = {}
31
- html_opts[:id] = "#{sortable_id}_#{object.id}" if @sortable
32
- html.tr html_opts do
33
- if @sortable
34
- html.td do
35
- html.span '', class: 'handle glyphicon glyphicon-resize-vertical'
36
- end
37
- end
38
- controls.each do |control|
39
- html.td do
40
- html << control.render
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
47
- if objects.empty?
48
- html.p "Keine #{@object.class.human_name(count: 2)} vorhanden.", class: 'text-center text-muted'
49
- end
50
- return html.target!
51
- end
52
-
53
- end
54
- end
@@ -1,40 +0,0 @@
1
- module HasControls
2
-
3
- attr_reader :controls
4
-
5
- def initialize(params={})
6
- super
7
- @controls = []
8
- end
9
-
10
- def add_control(control, &block)
11
- control.parent = self
12
- yield(control) if block_given?
13
- @controls << control
14
- end
15
-
16
- def add_controls(controls)
17
- add_parent(controls)
18
- @controls += controls
19
- end
20
-
21
- def siblings
22
- return @controls.map do |control|
23
- if control.respond_to? :siblings
24
- [control] + control.siblings
25
- else
26
- control
27
- end
28
- end.flatten
29
- end
30
-
31
- def build_children
32
- return @controls
33
- end
34
-
35
- def add_parent(controls)
36
- controls.each { |control| control.parent = self }
37
- return controls
38
- end
39
-
40
- end
@@ -1,15 +0,0 @@
1
- module Interview
2
- class HiddenAttribute < Attribute
3
-
4
- def render_write
5
- form_builder.hidden_field @method
6
- end
7
-
8
- protected
9
-
10
- def render_form_style
11
- return render_write
12
- end
13
-
14
- end
15
- end