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,26 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class NavigationItem < Link
|
3
|
-
|
4
|
-
include HasControls
|
5
|
-
|
6
|
-
attr_accessor :active
|
7
|
-
|
8
|
-
def render
|
9
|
-
css_class = "level#{ancestors.count-1}"
|
10
|
-
css_class += " active" if @active
|
11
|
-
show_siblings = @active || siblings.any? { |sib| sib.active }
|
12
|
-
|
13
|
-
html = ::Builder::XmlMarkup.new
|
14
|
-
html.li class: css_class do
|
15
|
-
html << super
|
16
|
-
end
|
17
|
-
if show_siblings
|
18
|
-
add_parent(build_children).each do |c|
|
19
|
-
html << c.render
|
20
|
-
end
|
21
|
-
end
|
22
|
-
return html.target!
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class NestedForm < Control
|
3
|
-
include HasControls
|
4
|
-
|
5
|
-
attr_accessor :polymorphic, :align, :image_based # todo: align einbauen
|
6
|
-
attr_reader :form_builder, :object
|
7
|
-
|
8
|
-
def render
|
9
|
-
assoc_form_builder = find_attribute! :form_builder
|
10
|
-
assoc_method = find_attribute! :assoc_method
|
11
|
-
|
12
|
-
html = ::Builder::XmlMarkup.new
|
13
|
-
html.div class: 'nested_form_container' do
|
14
|
-
if @image_based
|
15
|
-
html << Interview::NestedFormAddImages.new.render
|
16
|
-
end
|
17
|
-
html << assoc_form_builder.fields_for(assoc_method.to_sym) do |form_builder|
|
18
|
-
if @polymorphic
|
19
|
-
render_polymorphic_nested_form(form_builder)
|
20
|
-
else
|
21
|
-
render_nested_form(form_builder)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
html.script class: 'nested_form_script', type: 'text/x-tmpl' do
|
25
|
-
new_object = assoc_form_builder.object.association(assoc_method.to_sym).build # todo: polymorphic add link
|
26
|
-
html << assoc_form_builder.fields_for(assoc_method.to_sym, new_object, :child_index => "${index}") do |form_builder|
|
27
|
-
if @polymorphic
|
28
|
-
render_polymorphic_nested_form(form_builder)
|
29
|
-
else
|
30
|
-
render_nested_form(form_builder)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
return html.target!
|
36
|
-
end
|
37
|
-
|
38
|
-
def render_nested_form(form_builder)
|
39
|
-
@form_builder = form_builder
|
40
|
-
@object = form_builder.object
|
41
|
-
html = ::Builder::XmlMarkup.new
|
42
|
-
html.div class: 'nested_form collapse in' do
|
43
|
-
add_parent(build_children).each do |control|
|
44
|
-
html << control.render
|
45
|
-
end
|
46
|
-
html << form_builder.hidden_field(:id)
|
47
|
-
html << form_builder.hidden_field(:_destroy, class: 'nested_form_destroy')
|
48
|
-
if @image_based
|
49
|
-
html << form_builder.hidden_field(:upload_buffer_id, class: 'upload_buffer_id')
|
50
|
-
end
|
51
|
-
end
|
52
|
-
html.target!.html_safe
|
53
|
-
end
|
54
|
-
|
55
|
-
def render_polymorphic_nested_form(form_builder)
|
56
|
-
object = form_builder.object
|
57
|
-
if klass = "#{object.class.name}NestedForm".safe_constantize
|
58
|
-
nested_form = klass.new(parent: self)
|
59
|
-
return nested_form.render_nested_form(form_builder)
|
60
|
-
else
|
61
|
-
return self.render_nested_form(form_builder)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class NestedFormAddImages < Control
|
3
|
-
|
4
|
-
attr_accessor :style
|
5
|
-
|
6
|
-
def render
|
7
|
-
if @style and @style.to_sym == :horizontal_form
|
8
|
-
html = ::Builder::XmlMarkup.new # todo: in eigenes Objekt auslagern?
|
9
|
-
html.div class: 'row' do
|
10
|
-
html.div class: 'col-xs-9 col-xs-offset-3' do
|
11
|
-
html << render_link
|
12
|
-
end
|
13
|
-
end
|
14
|
-
return html.target!
|
15
|
-
else
|
16
|
-
return render_link
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def render_link
|
21
|
-
html = ::Builder::XmlMarkup.new
|
22
|
-
html.div class: "clearfix" do
|
23
|
-
html.span class: "btn btn-default fileinput-button" do
|
24
|
-
html.span "Bilder hinzufügen" # todo
|
25
|
-
html << h.file_field_tag("upload_buffer[attachment]", class: 'nested_form_add_images',
|
26
|
-
multiple: true, data: {url: "/upload_buffers.json", type: 'POST'})
|
27
|
-
end
|
28
|
-
end
|
29
|
-
return html.target!
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class NestedFormRemoveLink < Control
|
3
|
-
|
4
|
-
attr_accessor :style
|
5
|
-
|
6
|
-
def render
|
7
|
-
if @style and @style.to_sym == :horizontal_form
|
8
|
-
html = ::Builder::XmlMarkup.new
|
9
|
-
html.div class: 'row' do
|
10
|
-
html.div class: 'col-xs-9 col-xs-offset-3' do
|
11
|
-
html << render_link
|
12
|
-
end
|
13
|
-
end
|
14
|
-
return html.target!
|
15
|
-
else
|
16
|
-
return render_link
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def render_link
|
21
|
-
assoc_object = find_attribute! :assoc_object
|
22
|
-
assoc_method = find_attribute!(:assoc_method).to_s
|
23
|
-
text = h.t('views.nested_form_remove', association: assoc_object.class.human_attribute_name(assoc_method.singularize)) # todo: in view auslagern
|
24
|
-
return h.content_tag :a, text, href: '#', class: 'nested_form_remove_link'
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
data/lib/interview/panel.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class Panel < Control
|
3
|
-
include HasControls
|
4
|
-
|
5
|
-
def render
|
6
|
-
html = ::Builder::XmlMarkup.new
|
7
|
-
html.div class: 'panel panel-default' do
|
8
|
-
html.div class: 'panel-body' do
|
9
|
-
add_parent(build_children).each do |control|
|
10
|
-
html << control.render
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
return html.target!
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class ProgressBar < Control
|
3
|
-
|
4
|
-
attr_accessor :hidden, :html_class
|
5
|
-
|
6
|
-
def initialize(params={})
|
7
|
-
super
|
8
|
-
@html_class = []
|
9
|
-
@html_class << params[:html_class] if params[:html_class]
|
10
|
-
end
|
11
|
-
|
12
|
-
def render
|
13
|
-
html_class = @html_class
|
14
|
-
html = ::Builder::XmlMarkup.new
|
15
|
-
opts = { class: "progress" }
|
16
|
-
opts[:class] += " collapse" if @hidden
|
17
|
-
opts[:class] += ' ' + @html_class.join(' ') unless @html_class.empty?
|
18
|
-
html.div opts do
|
19
|
-
html.div '', class: 'progress-bar bar', style: 'width: 0%'
|
20
|
-
end
|
21
|
-
return html.target!
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class SearchForm < Control
|
3
|
-
|
4
|
-
def render
|
5
|
-
object = find_attribute! :object
|
6
|
-
return h.form_tag(h.polymorphic_path(object.class.model_name.plural, action: 'search'), method: :get, class: 'form-inline', role: 'form') do
|
7
|
-
html = ::Builder::XmlMarkup.new(indent: 2)
|
8
|
-
html.div do
|
9
|
-
html.div class: 'form-group' do
|
10
|
-
html << h.text_field_tag(:search, h.params[:search], class: 'form-control')
|
11
|
-
end
|
12
|
-
html.div class: 'form-group' do
|
13
|
-
html << h.submit_tag('Suchen', :name => nil, class: 'form-control btn btn-primary') # todo: 'Suchen' ändern
|
14
|
-
end
|
15
|
-
end
|
16
|
-
html.target!.html_safe
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
data/lib/interview/tab.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class Tab < Control
|
3
|
-
|
4
|
-
include HasControls
|
5
|
-
|
6
|
-
attr_accessor :caption, :active
|
7
|
-
|
8
|
-
def render
|
9
|
-
html = ::Builder::XmlMarkup.new
|
10
|
-
html_class = 'tab-pane'
|
11
|
-
html_class += ' active' if @active
|
12
|
-
html.div class: html_class, id: @caption do
|
13
|
-
add_parent(build_children).each do |control|
|
14
|
-
html << control.render
|
15
|
-
end
|
16
|
-
end
|
17
|
-
return html.target!
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
data/lib/interview/tab_box.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class TabBox < Control
|
3
|
-
|
4
|
-
include HasControls
|
5
|
-
|
6
|
-
def render
|
7
|
-
controls = add_parent(build_children)
|
8
|
-
if controls.none? { |c| c.active }
|
9
|
-
controls.first.active = true
|
10
|
-
end
|
11
|
-
|
12
|
-
html = ::Builder::XmlMarkup.new
|
13
|
-
html.ul class: 'nav nav-tabs tab_box' do
|
14
|
-
controls.each do |control|
|
15
|
-
html_class = control.active ? 'active' : ''
|
16
|
-
html.li class: html_class do
|
17
|
-
html.a control.caption, href: "##{control.caption}", :'data-toogle' => 'tab'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
html.div class: 'tab-content' do
|
22
|
-
controls.each do |control|
|
23
|
-
html << control.render
|
24
|
-
end
|
25
|
-
end
|
26
|
-
return html.target!
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
data/lib/interview/text.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class Text < Control
|
3
|
-
include HasControls
|
4
|
-
|
5
|
-
attr_accessor :text, :style, :bold, :html_class
|
6
|
-
|
7
|
-
def initialize(params={})
|
8
|
-
@html_class = []
|
9
|
-
super
|
10
|
-
end
|
11
|
-
|
12
|
-
def render
|
13
|
-
html = ::Builder::XmlMarkup.new
|
14
|
-
if @style
|
15
|
-
opts = {}
|
16
|
-
opts[:class] = @html_class.join(' ') unless @html_class.empty?
|
17
|
-
html.tag! @style.to_sym, opts do
|
18
|
-
render_text(html)
|
19
|
-
end
|
20
|
-
else
|
21
|
-
render_text(html)
|
22
|
-
end
|
23
|
-
return html.target!
|
24
|
-
end
|
25
|
-
|
26
|
-
protected
|
27
|
-
|
28
|
-
def render_text(html)
|
29
|
-
if @bold
|
30
|
-
html.b do
|
31
|
-
html << @text # todo: besser .text! statt << ?
|
32
|
-
add_parent(build_children).each do |control|
|
33
|
-
html << control.render
|
34
|
-
end
|
35
|
-
end
|
36
|
-
else
|
37
|
-
html << @text if @text # todo: besser .text! statt << ?
|
38
|
-
add_parent(build_children).each do |control|
|
39
|
-
html << control.render
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
data/lib/interview/tooltip.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class Tooltip < Control
|
3
|
-
|
4
|
-
attr_accessor :tooltip, :style
|
5
|
-
|
6
|
-
def tooltip
|
7
|
-
@tooltip || find_attribute(:tooltip)
|
8
|
-
end
|
9
|
-
|
10
|
-
def render
|
11
|
-
if @style and respond_to?("render_#{@style}_style", true)
|
12
|
-
return send "render_#{@style}_style"
|
13
|
-
else
|
14
|
-
return render_default_style
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
protected
|
19
|
-
|
20
|
-
def render_default_style
|
21
|
-
return "<p class='text-muted'>#{tooltip}</p>".html_safe
|
22
|
-
end
|
23
|
-
|
24
|
-
def render_box_style
|
25
|
-
return "<div class='alert alert-info'>#{tooltip}</div>".html_safe
|
26
|
-
end
|
27
|
-
|
28
|
-
def render_popover_style
|
29
|
-
html = ::Builder::XmlMarkup.new
|
30
|
-
html.text! ' '
|
31
|
-
html.a href: '#', class: 'tip', :'data-toggle' => 'popover', :'data-content' => tooltip do
|
32
|
-
html.span '', class: 'glyphicon glyphicon-question-sign'
|
33
|
-
end
|
34
|
-
return html.target!
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|