interview 0.1.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/interview.gemspec +1 -0
- data/lib/{generators/interview/install/templates → assets/javascripts}/interview.js.coffee +17 -25
- data/lib/{generators/interview/install/templates/bootstrap_interview.css.scss → assets/stylesheets/interview.css.scss} +3 -2
- data/lib/generators/interview/install/install_generator.rb +0 -2
- data/lib/generators/interview/install/templates/interview.rb +1 -1
- data/lib/interview.rb +65 -51
- data/lib/interview/association_methods.rb +2 -0
- data/lib/interview/builder.rb +32 -24
- data/lib/interview/control.rb +25 -7
- data/lib/interview/controls/actionbar.rb +41 -0
- data/lib/interview/controls/alert.rb +15 -0
- data/lib/interview/{association_attribute.rb → controls/association_attribute.rb} +8 -8
- data/lib/interview/{association_list_attribute.rb → controls/association_list_attribute.rb} +10 -9
- data/lib/interview/controls/attribute.rb +80 -0
- data/lib/interview/controls/auto_attribute.rb +16 -0
- data/lib/interview/controls/boolean_attribute.rb +20 -0
- data/lib/interview/controls/breadcrumbs.rb +15 -0
- data/lib/interview/controls/button.rb +25 -0
- data/lib/interview/controls/caret.rb +9 -0
- data/lib/interview/controls/collapse_container.rb +16 -0
- data/lib/interview/controls/container.rb +5 -0
- data/lib/interview/controls/container_attribute.rb +28 -0
- data/lib/interview/controls/date_attribute.rb +23 -0
- data/lib/interview/controls/datetime_attribute.rb +22 -0
- data/lib/interview/controls/decimal_attribute.rb +12 -0
- data/lib/interview/controls/dropdown.rb +35 -0
- data/lib/interview/controls/form.rb +35 -0
- data/lib/interview/controls/form_errors.rb +20 -0
- data/lib/interview/controls/glyphicon.rb +19 -0
- data/lib/interview/controls/grid.rb +62 -0
- data/lib/interview/controls/hidden_attribute.rb +11 -0
- data/lib/interview/controls/horizontal_form_container.rb +13 -0
- data/lib/interview/controls/html_control.rb +13 -0
- data/lib/interview/controls/html_doctype.rb +9 -0
- data/lib/interview/controls/html_headers.rb +12 -0
- data/lib/interview/{html_text_attribute.rb → controls/html_text_attribute.rb} +9 -5
- data/lib/interview/controls/image_attribute.rb +61 -0
- data/lib/interview/controls/image_gallery_attribute.rb +72 -0
- data/lib/interview/controls/image_light_box.rb +17 -0
- data/lib/interview/{integer_attribute.rb → controls/integer_attribute.rb} +0 -0
- data/lib/interview/controls/link.rb +90 -0
- data/lib/interview/controls/list.rb +20 -0
- data/lib/interview/controls/media_object.rb +37 -0
- data/lib/interview/controls/navigation.rb +11 -0
- data/lib/interview/controls/navigation_item.rb +33 -0
- data/lib/interview/controls/nested_form.rb +45 -0
- data/lib/interview/controls/nested_form_add_images.rb +15 -0
- data/lib/interview/controls/nested_form_add_link.rb +29 -0
- data/lib/interview/controls/nested_form_remove_link.rb +12 -0
- data/lib/interview/{option_attribute.rb → controls/option_attribute.rb} +19 -19
- data/lib/interview/controls/pagination.rb +12 -0
- data/lib/interview/controls/panel.rb +13 -0
- data/lib/interview/{polymorphic_add_link.rb → controls/polymorphic_add_link.rb} +1 -1
- data/lib/interview/controls/polymorphic_nested_form.rb +17 -0
- data/lib/interview/{nested_form_add_link.rb → controls/polymorphic_nested_form_add_link.rb} +12 -28
- data/lib/interview/controls/progress_bar.rb +18 -0
- data/lib/interview/controls/scaffold_card.rb +27 -0
- data/lib/interview/controls/scaffold_form.rb +108 -0
- data/lib/interview/controls/search_form.rb +25 -0
- data/lib/interview/controls/section.rb +16 -0
- data/lib/interview/{space.rb → controls/space.rb} +5 -6
- data/lib/interview/{string_attribute.rb → controls/string_attribute.rb} +0 -0
- data/lib/interview/controls/submit.rb +14 -0
- data/lib/interview/controls/tab.rb +27 -0
- data/lib/interview/controls/tab_box.rb +21 -0
- data/lib/interview/controls/text.rb +33 -0
- data/lib/interview/{text_attribute.rb → controls/text_attribute.rb} +7 -5
- data/lib/interview/controls/tooltip.rb +21 -0
- data/lib/interview/{tree.rb → controls/tree.rb} +2 -3
- data/lib/interview/{view.rb → controls/view.rb} +4 -6
- data/lib/interview/engine.rb +4 -0
- data/lib/interview/handler.rb +15 -0
- data/lib/interview/has_html_options.rb +29 -0
- data/lib/interview/meta_control.rb +18 -0
- data/lib/interview/nested_buildable.rb +17 -0
- data/lib/interview/version.rb +1 -1
- metadata +84 -54
- data/lib/interview/actionbar.rb +0 -39
- data/lib/interview/attribute.rb +0 -166
- data/lib/interview/boolean_attribute.rb +0 -59
- data/lib/interview/breadcrumbs.rb +0 -21
- data/lib/interview/button.rb +0 -29
- data/lib/interview/collapse_container.rb +0 -31
- data/lib/interview/condition_container.rb +0 -19
- data/lib/interview/container.rb +0 -13
- data/lib/interview/container_attribute.rb +0 -30
- data/lib/interview/date_attribute.rb +0 -20
- data/lib/interview/datetime_attribute.rb +0 -20
- data/lib/interview/decimal_attribute.rb +0 -10
- data/lib/interview/dropdown.rb +0 -39
- data/lib/interview/form.rb +0 -64
- data/lib/interview/form_errors.rb +0 -22
- data/lib/interview/grid.rb +0 -54
- data/lib/interview/has_controls.rb +0 -40
- data/lib/interview/hidden_attribute.rb +0 -15
- data/lib/interview/html_control.rb +0 -21
- data/lib/interview/image_attribute.rb +0 -59
- data/lib/interview/image_gallery_attribute.rb +0 -79
- data/lib/interview/image_light_box.rb +0 -19
- data/lib/interview/link.rb +0 -134
- data/lib/interview/list.rb +0 -26
- data/lib/interview/media_object.rb +0 -27
- data/lib/interview/navigation.rb +0 -55
- data/lib/interview/navigation_item.rb +0 -41
- data/lib/interview/navigation_item_old.rb +0 -26
- data/lib/interview/nested_form.rb +0 -66
- data/lib/interview/nested_form_add_images.rb +0 -33
- data/lib/interview/nested_form_remove_link.rb +0 -28
- data/lib/interview/panel.rb +0 -18
- data/lib/interview/progress_bar.rb +0 -25
- data/lib/interview/search_form.rb +0 -21
- data/lib/interview/tab.rb +0 -21
- data/lib/interview/tab_box.rb +0 -30
- data/lib/interview/text.rb +0 -45
- 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
|
data/lib/interview/button.rb
DELETED
@@ -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
|
data/lib/interview/container.rb
DELETED
@@ -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
|
data/lib/interview/dropdown.rb
DELETED
@@ -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
|
data/lib/interview/form.rb
DELETED
@@ -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
|
data/lib/interview/grid.rb
DELETED
@@ -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
|