interview 0.0.11 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/generators/interview/install/templates/interview.js.coffee +1 -1
- data/lib/interview/actionbar.rb +4 -3
- data/lib/interview/attribute.rb +3 -3
- data/lib/interview/boolean_attribute.rb +4 -4
- data/lib/interview/breadcrumbs.rb +2 -2
- data/lib/interview/builder.rb +49 -0
- data/lib/interview/collapse_container.rb +4 -4
- data/lib/interview/condition_container.rb +1 -1
- data/lib/interview/container.rb +13 -0
- data/lib/interview/container_attribute.rb +2 -2
- data/lib/interview/control.rb +0 -16
- data/lib/interview/dropdown.rb +2 -2
- data/lib/interview/form.rb +2 -2
- data/lib/interview/form_errors.rb +1 -1
- data/lib/interview/grid.rb +4 -3
- data/lib/interview/has_controls.rb +7 -10
- data/lib/interview/html_control.rb +7 -1
- data/lib/interview/image_attribute.rb +2 -2
- data/lib/interview/image_gallery_attribute.rb +2 -2
- data/lib/interview/image_light_box.rb +1 -1
- data/lib/interview/link.rb +5 -4
- data/lib/interview/list.rb +2 -2
- data/lib/interview/media_object.rb +6 -5
- data/lib/interview/navigation.rb +2 -2
- data/lib/interview/navigation_item.rb +2 -2
- data/lib/interview/navigation_item_old.rb +2 -2
- data/lib/interview/nested_form.rb +3 -3
- data/lib/interview/nested_form_add_images.rb +2 -2
- data/lib/interview/nested_form_add_link.rb +2 -2
- data/lib/interview/nested_form_remove_link.rb +1 -1
- data/lib/interview/object_context.rb +5 -1
- data/lib/interview/option_attribute.rb +1 -1
- data/lib/interview/panel.rb +2 -2
- data/lib/interview/polymorphic_add_link.rb +1 -1
- data/lib/interview/progress_bar.rb +1 -1
- data/lib/interview/search_form.rb +1 -1
- data/lib/interview/space.rb +1 -1
- data/lib/interview/tab.rb +2 -2
- data/lib/interview/tab_box.rb +6 -5
- data/lib/interview/text.rb +3 -3
- data/lib/interview/tooltip.rb +1 -1
- data/lib/interview/version.rb +1 -1
- data/lib/interview/view.rb +1 -1
- data/lib/interview.rb +3 -168
- metadata +4 -4
- data/lib/interview/control_def.rb +0 -36
- data/lib/interview/pagination.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c086485085f2eb7fa260a71e20dc4ada0005abd7
|
4
|
+
data.tar.gz: 65f36b1b39de18b9bd330ab4467254b4b1a24c37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e65be2cb25eea128a5f19da3624aea3816bb03f9f2d8979031e461e7cf83be18be9b5e5a5f7bdcb283e0dcd601e33e2c062095e030ce5d1a2c5d26e2d6ce9c29
|
7
|
+
data.tar.gz: 2c610a979c4efe97cb05514b515216cba453d58765e603e7b5e95285607a962558e31c8ddec24c01f5a5116f48a46ee20a5c6d8a248e2fe7444d01462c6b3a6a
|
@@ -128,5 +128,5 @@ jQuery ->
|
|
128
128
|
nested_form = $(this)
|
129
129
|
upload_buffer_id = $(this).find('.upload_buffer_id').attr('value')
|
130
130
|
if upload_buffer_id
|
131
|
-
$.getJSON "upload_buffers/#{upload_buffer_id}.json", (data) ->
|
131
|
+
$.getJSON "/upload_buffers/#{upload_buffer_id}.json", (data) ->
|
132
132
|
nested_form.find('.image').attr('src', data.thumb_url)
|
data/lib/interview/actionbar.rb
CHANGED
@@ -11,12 +11,13 @@ module Interview
|
|
11
11
|
object = find_attribute! :object
|
12
12
|
icon = object.icon
|
13
13
|
end
|
14
|
+
controls = add_parent(build_children)
|
14
15
|
|
15
|
-
html = Builder::XmlMarkup.new
|
16
|
+
html = ::Builder::XmlMarkup.new
|
16
17
|
html.div class: 'clearfix' do
|
17
|
-
unless
|
18
|
+
unless controls.empty?
|
18
19
|
html.ul class: 'list-inline pull-right' do
|
19
|
-
|
20
|
+
controls.each do |control|
|
20
21
|
html.li do
|
21
22
|
html << control.render
|
22
23
|
end
|
data/lib/interview/attribute.rb
CHANGED
@@ -62,7 +62,7 @@ module Interview
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def render_card_style
|
65
|
-
html = Builder::XmlMarkup.new
|
65
|
+
html = ::Builder::XmlMarkup.new
|
66
66
|
html.div class: 'row' do
|
67
67
|
html.p class: 'col-xs-3' do
|
68
68
|
html.b caption unless @hide_caption
|
@@ -82,7 +82,7 @@ module Interview
|
|
82
82
|
object = find_attribute! :object
|
83
83
|
align = @align || find_attribute(:align)
|
84
84
|
|
85
|
-
html = Builder::XmlMarkup.new(indent: 2)
|
85
|
+
html = ::Builder::XmlMarkup.new(indent: 2)
|
86
86
|
html.div class: 'form-group' do
|
87
87
|
|
88
88
|
html.div class: 'col-xs-3' if (@hide_caption or @caption_as_placeholder) and align == 'horizontal'
|
@@ -112,7 +112,7 @@ module Interview
|
|
112
112
|
{}
|
113
113
|
end
|
114
114
|
html << form_builder.label(@method, html_opts) do
|
115
|
-
form_html = Builder::XmlMarkup.new
|
115
|
+
form_html = ::Builder::XmlMarkup.new
|
116
116
|
form_html.text! caption
|
117
117
|
form_html.target!.html_safe
|
118
118
|
end
|
@@ -3,7 +3,7 @@ module Interview
|
|
3
3
|
|
4
4
|
def render_read
|
5
5
|
return '' if value.nil?
|
6
|
-
html = Builder::XmlMarkup.new
|
6
|
+
html = ::Builder::XmlMarkup.new
|
7
7
|
if value
|
8
8
|
html.span '', class: 'glyphicon glyphicon-ok'
|
9
9
|
else
|
@@ -23,7 +23,7 @@ module Interview
|
|
23
23
|
object = find_attribute! :object
|
24
24
|
align = @align || find_attribute(:align)
|
25
25
|
|
26
|
-
html = Builder::XmlMarkup.new
|
26
|
+
html = ::Builder::XmlMarkup.new
|
27
27
|
html.div class: "form-group attribute_#{@method.to_s} collapse in" do
|
28
28
|
if align == 'horizontal'
|
29
29
|
html.div class: 'col-xs-9 col-xs-offset-3' do
|
@@ -37,11 +37,11 @@ module Interview
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def render_checkbox
|
40
|
-
html = Builder::XmlMarkup.new
|
40
|
+
html = ::Builder::XmlMarkup.new
|
41
41
|
html << render_write
|
42
42
|
html.text! ' '
|
43
43
|
html << form_builder.label(@method) do
|
44
|
-
form_html = Builder::XmlMarkup.new
|
44
|
+
form_html = ::Builder::XmlMarkup.new
|
45
45
|
form_html.text! caption
|
46
46
|
# if not @hide_tooltip and tooltip != ''
|
47
47
|
# form_html.text! ' '
|
@@ -7,9 +7,9 @@ module Interview
|
|
7
7
|
if Object.const_defined?('Gretel')
|
8
8
|
return h.breadcrumbs
|
9
9
|
else
|
10
|
-
html = Builder::XmlMarkup.new
|
10
|
+
html = ::Builder::XmlMarkup.new
|
11
11
|
html.ol class: 'breadcrumb' do
|
12
|
-
|
12
|
+
add_parent(build_children).each do |control|
|
13
13
|
html << control.render
|
14
14
|
end
|
15
15
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Interview
|
2
|
+
class Builder
|
3
|
+
|
4
|
+
def initialize(options={})
|
5
|
+
@target = Interview::Container.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def controls!
|
9
|
+
@target.controls
|
10
|
+
end
|
11
|
+
|
12
|
+
def render!
|
13
|
+
@target.render
|
14
|
+
end
|
15
|
+
|
16
|
+
def add!(sym, *args, &block)
|
17
|
+
if Object.const_defined?(sym.to_s.camelcase) and
|
18
|
+
Object.const_get(sym.to_s.camelcase) <= Interview::Control
|
19
|
+
control = Object.const_get(sym.to_s.camelcase).new(*args)
|
20
|
+
else
|
21
|
+
control = Object.const_get("Interview::#{sym.to_s.camelcase}").new(*args)
|
22
|
+
end
|
23
|
+
@target.add_control control
|
24
|
+
if block and control.respond_to? :add_block
|
25
|
+
control.add_block(&block)
|
26
|
+
elsif block
|
27
|
+
temp_target = @target
|
28
|
+
@target = control
|
29
|
+
yield
|
30
|
+
@target = temp_target
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def <<(control_or_array)
|
35
|
+
if control_or_array.kind_of? Array
|
36
|
+
@target.add_controls control_or_array
|
37
|
+
else
|
38
|
+
@target.add_control control_or_array
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def method_missing(sym, *args, &block)
|
43
|
+
add!(sym, *args, &block)
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -5,13 +5,13 @@ module Interview
|
|
5
5
|
attr_accessor :caption
|
6
6
|
|
7
7
|
def render
|
8
|
-
html = Builder::XmlMarkup.new
|
8
|
+
html = ::Builder::XmlMarkup.new
|
9
|
+
controls = add_parent(build_children)
|
9
10
|
if @caption
|
10
11
|
link = Interview::Link.new(caption: @caption)
|
11
|
-
controls = @controls
|
12
12
|
else
|
13
|
-
link =
|
14
|
-
controls =
|
13
|
+
link = controls.first
|
14
|
+
controls = controls[1..-1]
|
15
15
|
end
|
16
16
|
link.url = '#'
|
17
17
|
link.html_class << 'collapse_link'
|
data/lib/interview/control.rb
CHANGED
@@ -53,21 +53,5 @@ module Interview
|
|
53
53
|
return ''
|
54
54
|
end
|
55
55
|
|
56
|
-
@definition = ControlDef.new :control
|
57
|
-
|
58
|
-
def self.definition
|
59
|
-
return @definition
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.build(opts={})
|
63
|
-
return @definition.build(opts)
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.inherited(subclass)
|
67
|
-
new_def = @definition.deep_dup
|
68
|
-
new_def.klass = subclass.name.underscore.to_sym
|
69
|
-
subclass.instance_variable_set :@definition, new_def
|
70
|
-
end
|
71
|
-
|
72
56
|
end
|
73
57
|
end
|
data/lib/interview/dropdown.rb
CHANGED
@@ -11,7 +11,7 @@ module Interview
|
|
11
11
|
|
12
12
|
def render
|
13
13
|
container_tag = @container_tag || 'div'
|
14
|
-
html = Builder::XmlMarkup.new
|
14
|
+
html = ::Builder::XmlMarkup.new
|
15
15
|
html_class = @html_class.dup
|
16
16
|
html_class << 'dropdown'
|
17
17
|
html.tag! container_tag, class: html_class.join(' ') do
|
@@ -25,7 +25,7 @@ module Interview
|
|
25
25
|
html.span '', class: 'caret'
|
26
26
|
end
|
27
27
|
html.ul class: 'dropdown-menu' do
|
28
|
-
|
28
|
+
add_parent(build_children).each do |control|
|
29
29
|
html.li do
|
30
30
|
html << control.render
|
31
31
|
end
|
data/lib/interview/form.rb
CHANGED
@@ -14,11 +14,11 @@ module Interview
|
|
14
14
|
end
|
15
15
|
return h.form_for(object, role: 'form', html: html_options) do |form_builder|
|
16
16
|
@form_builder = form_builder
|
17
|
-
html = Builder::XmlMarkup.new(indent: 2)
|
17
|
+
html = ::Builder::XmlMarkup.new(indent: 2)
|
18
18
|
|
19
19
|
render_default_controls(html)
|
20
20
|
|
21
|
-
|
21
|
+
add_parent(build_children).each do |control|
|
22
22
|
html << control.render
|
23
23
|
html.text! ' ' if @align == 'inline'
|
24
24
|
end
|
@@ -4,7 +4,7 @@ module Interview
|
|
4
4
|
def render
|
5
5
|
object = find_attribute!(:object)
|
6
6
|
|
7
|
-
html = Builder::XmlMarkup.new
|
7
|
+
html = ::Builder::XmlMarkup.new
|
8
8
|
if object.errors.any?
|
9
9
|
html.div class: 'alert alert-danger' do
|
10
10
|
html.h4 h.translate("errors.template.header", count: object.errors.count, model: object.class.model_name.human)
|
data/lib/interview/grid.rb
CHANGED
@@ -7,14 +7,15 @@ module Interview
|
|
7
7
|
|
8
8
|
def render
|
9
9
|
objects = @objects || find_attribute!(:objects)
|
10
|
+
controls = add_parent(build_children)
|
10
11
|
@object = find_attribute!(:object)
|
11
12
|
sortable_id = "sortable_#{@object.class.model_name.plural}" if @sortable
|
12
|
-
html = Builder::XmlMarkup.new
|
13
|
+
html = ::Builder::XmlMarkup.new
|
13
14
|
html.table class: 'table' do
|
14
15
|
html.thead do
|
15
16
|
html.tr do
|
16
17
|
html.th '' if @sortable
|
17
|
-
|
18
|
+
controls.each do |control|
|
18
19
|
html.th do
|
19
20
|
html << control.caption
|
20
21
|
end
|
@@ -34,7 +35,7 @@ module Interview
|
|
34
35
|
html.span '', class: 'handle glyphicon glyphicon-resize-vertical'
|
35
36
|
end
|
36
37
|
end
|
37
|
-
|
38
|
+
controls.each do |control|
|
38
39
|
html.td do
|
39
40
|
html << control.render
|
40
41
|
end
|
@@ -4,7 +4,7 @@ module HasControls
|
|
4
4
|
|
5
5
|
def initialize(params={})
|
6
6
|
super
|
7
|
-
@controls =
|
7
|
+
@controls = []
|
8
8
|
end
|
9
9
|
|
10
10
|
def add_control(control, &block)
|
@@ -14,7 +14,7 @@ module HasControls
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def add_controls(controls)
|
17
|
-
controls
|
17
|
+
add_parent(controls)
|
18
18
|
@controls += controls
|
19
19
|
end
|
20
20
|
|
@@ -28,16 +28,13 @@ module HasControls
|
|
28
28
|
end.flatten
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
|
31
|
+
def build_children
|
32
|
+
return @controls
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
@definition.control(klass, params, &block)
|
39
|
-
end
|
40
|
-
|
35
|
+
def add_parent(controls)
|
36
|
+
controls.each { |control| control.parent = self }
|
37
|
+
return controls
|
41
38
|
end
|
42
39
|
|
43
40
|
end
|
@@ -11,7 +11,7 @@ module Interview
|
|
11
11
|
|
12
12
|
return '' if value.nil? and @hide_if_not_exists
|
13
13
|
|
14
|
-
html = Builder::XmlMarkup.new
|
14
|
+
html = ::Builder::XmlMarkup.new
|
15
15
|
opts = {class: "image_#{image_style}"}
|
16
16
|
opts[:class] += ' ' + @html_class.join(' ') unless @html_class.empty? or @surrounding_tag
|
17
17
|
html.div opts do
|
@@ -27,7 +27,7 @@ module Interview
|
|
27
27
|
def render_write
|
28
28
|
image_style = @image_style || :thumb
|
29
29
|
|
30
|
-
html = Builder::XmlMarkup.new
|
30
|
+
html = ::Builder::XmlMarkup.new
|
31
31
|
html.div class: 'image_attribute_container' do
|
32
32
|
unless value.nil? and @hide_if_not_exists
|
33
33
|
html.div class: 'inline-block' do
|
@@ -8,7 +8,7 @@ module Interview
|
|
8
8
|
image_style = @image_style || :thumb
|
9
9
|
images = value
|
10
10
|
|
11
|
-
html = Builder::XmlMarkup.new
|
11
|
+
html = ::Builder::XmlMarkup.new
|
12
12
|
render_gallery(html, images, submethod, image_style, @light_box_image_style)
|
13
13
|
return html.target!
|
14
14
|
end
|
@@ -20,7 +20,7 @@ module Interview
|
|
20
20
|
images = object.send @method
|
21
21
|
model = images.klass.model_name.singular
|
22
22
|
|
23
|
-
html = Builder::XmlMarkup.new
|
23
|
+
html = ::Builder::XmlMarkup.new
|
24
24
|
html.div class: 'image-upload-group' do
|
25
25
|
|
26
26
|
html << form_builder.hidden_field("#{@method.singularize}_ids", class: 'image-ids')
|
data/lib/interview/link.rb
CHANGED
@@ -102,7 +102,7 @@ module Interview
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def render_list_style(url, html_class=[], html_options={})
|
105
|
-
html = Builder::XmlMarkup.new
|
105
|
+
html = ::Builder::XmlMarkup.new
|
106
106
|
li_class = @active ? 'active' : ''
|
107
107
|
html.li class: li_class do
|
108
108
|
html << render_link(url, html_class, html_options)
|
@@ -111,17 +111,18 @@ module Interview
|
|
111
111
|
end
|
112
112
|
|
113
113
|
def render_link(url, html_class=[], html_options={})
|
114
|
+
controls = add_parent(build_children)
|
114
115
|
class_string = html_class.join(' ')
|
115
116
|
html_options[:class] = class_string unless html_class.empty?
|
116
117
|
html_options[:data] = @html_data unless @html_data.empty?
|
117
118
|
return h.link_to(url, html_options) do
|
118
|
-
html = Builder::XmlMarkup.new
|
119
|
-
if
|
119
|
+
html = ::Builder::XmlMarkup.new
|
120
|
+
if controls.empty?
|
120
121
|
html.span '', class: "glyphicon glyphicon-#{@image}" if @image
|
121
122
|
html.text! ' ' if @image and @caption
|
122
123
|
html << @caption if @caption
|
123
124
|
else
|
124
|
-
|
125
|
+
controls.each do |control|
|
125
126
|
html << control.render
|
126
127
|
end
|
127
128
|
end
|
data/lib/interview/list.rb
CHANGED
@@ -7,10 +7,10 @@ module Interview
|
|
7
7
|
|
8
8
|
def render
|
9
9
|
objects = @objects || find_attribute!(:objects)
|
10
|
-
html = Builder::XmlMarkup.new
|
10
|
+
html = ::Builder::XmlMarkup.new
|
11
11
|
objects.each do |object|
|
12
12
|
@object = object
|
13
|
-
|
13
|
+
add_parent(build_children).each do |control| # todo: controls neu initialisieren?
|
14
14
|
html << control.render
|
15
15
|
end
|
16
16
|
end
|
@@ -7,14 +7,15 @@ module Interview
|
|
7
7
|
def render
|
8
8
|
image_size = @image_size || :thumb
|
9
9
|
object = find_attribute :object
|
10
|
+
controls = add_parent(build_children)
|
10
11
|
@object = object
|
11
|
-
html = Builder::XmlMarkup.new(indent: 2)
|
12
|
+
html = ::Builder::XmlMarkup.new(indent: 2)
|
12
13
|
html.div class: 'media' do
|
13
|
-
|
14
|
-
html <<
|
14
|
+
controls[0].html_class << 'pull-left' if controls[0].respond_to? 'html_class'
|
15
|
+
html << controls.first.render
|
15
16
|
html.div class: 'media-body' do
|
16
|
-
|
17
|
-
|
17
|
+
controls[1].html_class << 'media-heading' if controls[1].respond_to? 'html_class'
|
18
|
+
controls[1..-1].each do |control|
|
18
19
|
html << control.render
|
19
20
|
end
|
20
21
|
end
|
data/lib/interview/navigation.rb
CHANGED
@@ -7,9 +7,9 @@ module Interview
|
|
7
7
|
def render
|
8
8
|
auto_set_active
|
9
9
|
|
10
|
-
html = Builder::XmlMarkup.new
|
10
|
+
html = ::Builder::XmlMarkup.new
|
11
11
|
html.ul class: 'nav nav-pills nav-stacked' do
|
12
|
-
|
12
|
+
add_parent(build_children).each do |control|
|
13
13
|
html << control.render
|
14
14
|
end
|
15
15
|
end
|
@@ -25,12 +25,12 @@ module Interview
|
|
25
25
|
html << @caption if @caption
|
26
26
|
end)
|
27
27
|
|
28
|
-
html = Builder::XmlMarkup.new
|
28
|
+
html = ::Builder::XmlMarkup.new
|
29
29
|
html.li class: css_class do
|
30
30
|
html << link.render
|
31
31
|
end
|
32
32
|
if show_siblings
|
33
|
-
|
33
|
+
add_parent(build_children).each do |c|
|
34
34
|
html << c.render
|
35
35
|
end
|
36
36
|
end
|
@@ -10,12 +10,12 @@ module Interview
|
|
10
10
|
css_class += " active" if @active
|
11
11
|
show_siblings = @active || siblings.any? { |sib| sib.active }
|
12
12
|
|
13
|
-
html = Builder::XmlMarkup.new
|
13
|
+
html = ::Builder::XmlMarkup.new
|
14
14
|
html.li class: css_class do
|
15
15
|
html << super
|
16
16
|
end
|
17
17
|
if show_siblings
|
18
|
-
|
18
|
+
add_parent(build_children).each do |c|
|
19
19
|
html << c.render
|
20
20
|
end
|
21
21
|
end
|
@@ -9,7 +9,7 @@ module Interview
|
|
9
9
|
assoc_form_builder = find_attribute! :form_builder
|
10
10
|
assoc_method = find_attribute! :assoc_method
|
11
11
|
|
12
|
-
html = Builder::XmlMarkup.new
|
12
|
+
html = ::Builder::XmlMarkup.new
|
13
13
|
html.div class: 'nested_form_container' do
|
14
14
|
if @image_based
|
15
15
|
html << Interview::NestedFormAddImages.new.render
|
@@ -38,9 +38,9 @@ module Interview
|
|
38
38
|
def render_nested_form(form_builder)
|
39
39
|
@form_builder = form_builder
|
40
40
|
@object = form_builder.object
|
41
|
-
html = Builder::XmlMarkup.new
|
41
|
+
html = ::Builder::XmlMarkup.new
|
42
42
|
html.div class: 'nested_form collapse in' do
|
43
|
-
|
43
|
+
add_parent(build_children).each do |control|
|
44
44
|
html << control.render
|
45
45
|
end
|
46
46
|
html << form_builder.hidden_field(:id)
|
@@ -5,7 +5,7 @@ module Interview
|
|
5
5
|
|
6
6
|
def render
|
7
7
|
if @style and @style.to_sym == :horizontal_form
|
8
|
-
html = Builder::XmlMarkup.new # todo: in eigenes Objekt auslagern?
|
8
|
+
html = ::Builder::XmlMarkup.new # todo: in eigenes Objekt auslagern?
|
9
9
|
html.div class: 'row' do
|
10
10
|
html.div class: 'col-xs-9 col-xs-offset-3' do
|
11
11
|
html << render_link
|
@@ -18,7 +18,7 @@ module Interview
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def render_link
|
21
|
-
html = Builder::XmlMarkup.new
|
21
|
+
html = ::Builder::XmlMarkup.new
|
22
22
|
html.div class: "clearfix" do
|
23
23
|
html.span class: "btn btn-default fileinput-button" do
|
24
24
|
html.span "Bilder hinzufügen" # todo
|
@@ -5,7 +5,7 @@ module Interview
|
|
5
5
|
|
6
6
|
def render
|
7
7
|
if @style and @style.to_sym == :horizontal_form
|
8
|
-
html = Builder::XmlMarkup.new # todo: in eigenes Objekt auslagern?
|
8
|
+
html = ::Builder::XmlMarkup.new # todo: in eigenes Objekt auslagern?
|
9
9
|
html.div class: 'row' do
|
10
10
|
html.div class: 'col-xs-9 col-xs-offset-3' do
|
11
11
|
html << render_link
|
@@ -48,7 +48,7 @@ module Interview
|
|
48
48
|
data_content[poly_class.model_name.singular] = html
|
49
49
|
end
|
50
50
|
|
51
|
-
html = Builder::XmlMarkup.new
|
51
|
+
html = ::Builder::XmlMarkup.new
|
52
52
|
html.div do
|
53
53
|
html << h.select_tag("add_link_class", h.options_for_select(select_options), class: 'form-control', style: 'display: inline; width: auto;')
|
54
54
|
html.text! ' '
|
@@ -1,8 +1,12 @@
|
|
1
1
|
module Interview
|
2
|
-
module ObjectContext
|
2
|
+
module ObjectContext
|
3
3
|
|
4
4
|
attr_reader :object
|
5
5
|
|
6
|
+
def initialize
|
7
|
+
puts "DEPRECATION WARNING: Interview::ObjectContext is deprecated."
|
8
|
+
end
|
9
|
+
|
6
10
|
def object=(object)
|
7
11
|
if object.is_a? String
|
8
12
|
@object = Object::const_get(object.camelcase).new
|
data/lib/interview/panel.rb
CHANGED
@@ -3,10 +3,10 @@ module Interview
|
|
3
3
|
include HasControls
|
4
4
|
|
5
5
|
def render
|
6
|
-
html = Builder::XmlMarkup.new
|
6
|
+
html = ::Builder::XmlMarkup.new
|
7
7
|
html.div class: 'panel panel-default' do
|
8
8
|
html.div class: 'panel-body' do
|
9
|
-
|
9
|
+
add_parent(build_children).each do |control|
|
10
10
|
html << control.render
|
11
11
|
end
|
12
12
|
end
|
@@ -35,7 +35,7 @@ module Interview
|
|
35
35
|
[ poly_class.human_name, poly_class.name ]
|
36
36
|
end
|
37
37
|
|
38
|
-
html = Builder::XmlMarkup.new
|
38
|
+
html = ::Builder::XmlMarkup.new
|
39
39
|
html.div do
|
40
40
|
html << h.select_tag("add_link_class", h.options_for_select(select_options), class: 'form-control', style: 'display: inline; width: auto;')
|
41
41
|
html.text! ' '
|
@@ -11,7 +11,7 @@ module Interview
|
|
11
11
|
|
12
12
|
def render
|
13
13
|
html_class = @html_class
|
14
|
-
html = Builder::XmlMarkup.new
|
14
|
+
html = ::Builder::XmlMarkup.new
|
15
15
|
opts = { class: "progress" }
|
16
16
|
opts[:class] += " collapse" if @hidden
|
17
17
|
opts[:class] += ' ' + @html_class.join(' ') unless @html_class.empty?
|
@@ -4,7 +4,7 @@ module Interview
|
|
4
4
|
def render
|
5
5
|
object = find_attribute! :object
|
6
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)
|
7
|
+
html = ::Builder::XmlMarkup.new(indent: 2)
|
8
8
|
html.div do
|
9
9
|
html.div class: 'form-group' do
|
10
10
|
html << h.text_field_tag(:search, h.params[:search], class: 'form-control')
|
data/lib/interview/space.rb
CHANGED
data/lib/interview/tab.rb
CHANGED
@@ -6,11 +6,11 @@ module Interview
|
|
6
6
|
attr_accessor :caption, :active
|
7
7
|
|
8
8
|
def render
|
9
|
-
html = Builder::XmlMarkup.new
|
9
|
+
html = ::Builder::XmlMarkup.new
|
10
10
|
html_class = 'tab-pane'
|
11
11
|
html_class += ' active' if @active
|
12
12
|
html.div class: html_class, id: @caption do
|
13
|
-
|
13
|
+
add_parent(build_children).each do |control|
|
14
14
|
html << control.render
|
15
15
|
end
|
16
16
|
end
|
data/lib/interview/tab_box.rb
CHANGED
@@ -4,13 +4,14 @@ module Interview
|
|
4
4
|
include HasControls
|
5
5
|
|
6
6
|
def render
|
7
|
-
|
8
|
-
|
7
|
+
controls = add_parent(build_children)
|
8
|
+
if controls.none? { |c| c.active }
|
9
|
+
controls.first.active = true
|
9
10
|
end
|
10
11
|
|
11
|
-
html = Builder::XmlMarkup.new
|
12
|
+
html = ::Builder::XmlMarkup.new
|
12
13
|
html.ul class: 'nav nav-tabs tab_box' do
|
13
|
-
|
14
|
+
controls.each do |control|
|
14
15
|
html_class = control.active ? 'active' : ''
|
15
16
|
html.li class: html_class do
|
16
17
|
html.a control.caption, href: "##{control.caption}", :'data-toogle' => 'tab'
|
@@ -18,7 +19,7 @@ module Interview
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
html.div class: 'tab-content' do
|
21
|
-
|
22
|
+
controls.each do |control|
|
22
23
|
html << control.render
|
23
24
|
end
|
24
25
|
end
|
data/lib/interview/text.rb
CHANGED
@@ -10,7 +10,7 @@ module Interview
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def render
|
13
|
-
html = Builder::XmlMarkup.new
|
13
|
+
html = ::Builder::XmlMarkup.new
|
14
14
|
if @style
|
15
15
|
opts = {}
|
16
16
|
opts[:class] = @html_class.join(' ') unless @html_class.empty?
|
@@ -29,13 +29,13 @@ module Interview
|
|
29
29
|
if @bold
|
30
30
|
html.b do
|
31
31
|
html << @text # todo: besser .text! statt << ?
|
32
|
-
|
32
|
+
add_parent(build_children).each do |control|
|
33
33
|
html << control.render
|
34
34
|
end
|
35
35
|
end
|
36
36
|
else
|
37
37
|
html << @text if @text # todo: besser .text! statt << ?
|
38
|
-
|
38
|
+
add_parent(build_children).each do |control|
|
39
39
|
html << control.render
|
40
40
|
end
|
41
41
|
end
|
data/lib/interview/tooltip.rb
CHANGED
@@ -26,7 +26,7 @@ module Interview
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def render_popover_style
|
29
|
-
html = Builder::XmlMarkup.new
|
29
|
+
html = ::Builder::XmlMarkup.new
|
30
30
|
html.text! ' '
|
31
31
|
html.a href: '#', class: 'tip', :'data-toggle' => 'popover', :'data-content' => tooltip do
|
32
32
|
html.span '', class: 'glyphicon glyphicon-question-sign'
|
data/lib/interview/version.rb
CHANGED
data/lib/interview/view.rb
CHANGED
data/lib/interview.rb
CHANGED
@@ -4,9 +4,10 @@ require "builder"
|
|
4
4
|
|
5
5
|
require "interview/version"
|
6
6
|
|
7
|
-
require "interview/control_def"
|
8
7
|
require "interview/control"
|
9
8
|
require "interview/has_controls"
|
9
|
+
require "interview/container"
|
10
|
+
require "interview/builder"
|
10
11
|
require "interview/object_context"
|
11
12
|
|
12
13
|
require "interview/text"
|
@@ -28,7 +29,6 @@ require "interview/media_object"
|
|
28
29
|
require "interview/panel"
|
29
30
|
require "interview/collapse_container"
|
30
31
|
require "interview/condition_container"
|
31
|
-
require "interview/pagination"
|
32
32
|
|
33
33
|
require "interview/attribute"
|
34
34
|
require "interview/string_attribute"
|
@@ -90,175 +90,10 @@ module ActiveRecord
|
|
90
90
|
return objects.map { |object| object.human_id }
|
91
91
|
end
|
92
92
|
|
93
|
-
# todo: auslagern in eigenes gem
|
94
|
-
def self.filter(filter)
|
95
|
-
relation = self
|
96
|
-
# self.joins_for_filter(filter).each do |join_table|
|
97
|
-
# relation = relation.joins(join_table)
|
98
|
-
# end
|
99
|
-
return relation.where(*self.filter_to_sql(filter))
|
100
|
-
end
|
101
|
-
|
102
|
-
def self.joins_for_filter(filter)
|
103
|
-
join_tables = []
|
104
|
-
filter.each do |attr, filter|
|
105
|
-
if assoc = self.reflect_on_association(attr) and assoc.macro != :belongs_to
|
106
|
-
join_tables << assoc.plural_name.to_sym # todo
|
107
|
-
end
|
108
|
-
end
|
109
|
-
return join_tables.uniq
|
110
|
-
end
|
111
|
-
|
112
|
-
def self.filter_to_sql(filter)
|
113
|
-
if filter.is_a? Hash # todo
|
114
|
-
result = hash_filter_to_sql(filter)
|
115
|
-
elsif filter.respond_to? :each
|
116
|
-
result = filter_combination_to_sql(filter)
|
117
|
-
end # todo: else
|
118
|
-
return result
|
119
|
-
end
|
120
|
-
|
121
|
-
def self.filter_combination_to_sql(filter)
|
122
|
-
if [:and, :or].include? filter.first
|
123
|
-
combination = filter.first
|
124
|
-
filter = filter[1..-1]
|
125
|
-
end
|
126
|
-
combination ||= :or
|
127
|
-
sqls = []
|
128
|
-
values = []
|
129
|
-
filter.each do |f|
|
130
|
-
f = self.filter_to_sql(f)
|
131
|
-
sqls << f.first
|
132
|
-
values += f[1..-1]
|
133
|
-
end
|
134
|
-
sql = '(' + sqls.join(" #{combination.to_s.upcase} ") + ')'
|
135
|
-
return [sql] + values
|
136
|
-
end
|
137
|
-
|
138
|
-
def self.hash_filter_to_sql(filter)
|
139
|
-
sqls = []
|
140
|
-
values = []
|
141
|
-
filter.each do |attr, filter|
|
142
|
-
if self.reflect_on_association(attr)
|
143
|
-
result = self.assoc_filter_to_sql(attr, filter)
|
144
|
-
elsif column = self.columns_hash[attr.to_s]
|
145
|
-
result = case column.type
|
146
|
-
when :string
|
147
|
-
self.string_filter_to_sql(attr, filter)
|
148
|
-
when :integer, :decimal
|
149
|
-
self.number_filter_to_sql(attr, filter)
|
150
|
-
when :date
|
151
|
-
self.date_filter_to_sql(attr, filter)
|
152
|
-
when :boolean
|
153
|
-
self.boolean_filter_to_sql(attr, filter)
|
154
|
-
end
|
155
|
-
# todo: erweitern
|
156
|
-
else
|
157
|
-
raise "Not possible to set a filter for #{attr}"
|
158
|
-
end
|
159
|
-
sqls << result.first
|
160
|
-
values += result[1..-1]
|
161
|
-
end
|
162
|
-
sql = sqls.join(' AND ')
|
163
|
-
return [sql] + values
|
164
|
-
end
|
165
|
-
|
166
|
-
def self.string_filter_to_sql(attr, filter, negation=false)
|
167
|
-
negation = negation ? 'NOT ' : ''
|
168
|
-
if filter.respond_to?(:each)
|
169
|
-
return self.value_combination_to_sql(attr, filter, :string)
|
170
|
-
else
|
171
|
-
sql = "#{negation}#{attr} = ?"
|
172
|
-
end
|
173
|
-
return [sql, filter]
|
174
|
-
end
|
175
|
-
|
176
|
-
def self.number_filter_to_sql(attr, filter, negation=false)
|
177
|
-
negation = negation ? 'NOT ' : ''
|
178
|
-
if filter.respond_to?(:each)
|
179
|
-
return self.value_combination_to_sql(attr, filter, :number)
|
180
|
-
elsif filter.is_a? String
|
181
|
-
unless result = filter.match(/^([!<>=]*)(\d+\.?\d*)$/)
|
182
|
-
raise "invalid number filter: '#{filter}'"
|
183
|
-
end
|
184
|
-
connective = result[1].blank? ? '=' : result[1]
|
185
|
-
value = result[2].include?('.') ? result[2].to_f : result[2].to_i
|
186
|
-
sql = "#{negation}#{attr} #{connective} ?"
|
187
|
-
values = [value]
|
188
|
-
else
|
189
|
-
sql = "#{negation}#{attr} = ?"
|
190
|
-
values = [filter]
|
191
|
-
end
|
192
|
-
return [sql] + values
|
193
|
-
end
|
194
|
-
|
195
|
-
def self.date_filter_to_sql(attr, filter, negation=false)
|
196
|
-
negation = negation ? 'NOT ' : ''
|
197
|
-
if filter.respond_to?(:each)
|
198
|
-
if filter.size != 2 # todo: value_combination einbauen
|
199
|
-
raise "invalid date filter: #{filter.inspect} 2 elements expected, #{filter.size} given"
|
200
|
-
end
|
201
|
-
sql = "#{negation}#{attr} BETWEEN ? AND ?"
|
202
|
-
values = filter
|
203
|
-
else
|
204
|
-
sql = "#{negation}#{attr} = ?"
|
205
|
-
values = [filter]
|
206
|
-
end
|
207
|
-
return [sql] + values
|
208
|
-
end
|
209
|
-
|
210
|
-
def self.boolean_filter_to_sql(attr, filter, negation=false)
|
211
|
-
if filter.respond_to?(:each)
|
212
|
-
return self.value_combination_to_sql(attr, filter, :boolean)
|
213
|
-
end
|
214
|
-
negation = negation ? 'NOT ' : ''
|
215
|
-
return ["#{negation}#{attr} = ?", filter]
|
216
|
-
end
|
217
|
-
|
218
|
-
def self.assoc_filter_to_sql(attr, filter, negation=false)
|
219
|
-
if filter.respond_to?(:each)
|
220
|
-
return self.value_combination_to_sql(attr, filter, :assoc)
|
221
|
-
end
|
222
|
-
negation = negation ? 'NOT ' : ''
|
223
|
-
assoc = self.reflect_on_association(attr)
|
224
|
-
if assoc.macro == :has_and_belongs_to_many
|
225
|
-
number_filter = self.number_filter_to_sql(assoc.association_foreign_key, filter)
|
226
|
-
values = number_filter[1..-1]
|
227
|
-
sql = "id #{negation}IN (SELECT #{assoc.foreign_key} FROM #{assoc.join_table} WHERE #{number_filter.first})"
|
228
|
-
end # todo: erweitern
|
229
|
-
return [sql] + values
|
230
|
-
end
|
231
|
-
|
232
|
-
def self.value_combination_to_sql(attr, filter, filter_type)
|
233
|
-
# todo: check if set is possible
|
234
|
-
if filter.first == :not
|
235
|
-
return self.send("#{filter_type}_filter_to_sql", attr, filter[1], true)
|
236
|
-
elsif [:and, :or].include? filter.first
|
237
|
-
combination = filter.first
|
238
|
-
filter = filter[1..-1]
|
239
|
-
end
|
240
|
-
combination ||= :or
|
241
|
-
sqls = []
|
242
|
-
values = []
|
243
|
-
filter.each do |f|
|
244
|
-
f = self.send("#{filter_type}_filter_to_sql", attr, f)
|
245
|
-
sqls << f.first
|
246
|
-
values += f[1..-1]
|
247
|
-
end
|
248
|
-
sql = '(' + sqls.join(" #{combination.to_s.upcase} ") + ')'
|
249
|
-
return [sql] + values
|
250
|
-
end
|
251
|
-
|
252
93
|
def self.human_name(options={})
|
253
94
|
options = {scope: [self.i18n_scope, :models], count: 1}.merge(options)
|
254
95
|
I18n.translate(self.name.underscore, options)
|
255
96
|
end
|
256
|
-
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
module ActiveRecord::Associations::Builder
|
261
|
-
class CollectionAssociation < Association
|
262
|
-
include AssociationMethods
|
97
|
+
|
263
98
|
end
|
264
99
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jannes Köhler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -126,12 +126,13 @@ files:
|
|
126
126
|
- lib/interview/attribute.rb
|
127
127
|
- lib/interview/boolean_attribute.rb
|
128
128
|
- lib/interview/breadcrumbs.rb
|
129
|
+
- lib/interview/builder.rb
|
129
130
|
- lib/interview/button.rb
|
130
131
|
- lib/interview/collapse_container.rb
|
131
132
|
- lib/interview/condition_container.rb
|
133
|
+
- lib/interview/container.rb
|
132
134
|
- lib/interview/container_attribute.rb
|
133
135
|
- lib/interview/control.rb
|
134
|
-
- lib/interview/control_def.rb
|
135
136
|
- lib/interview/date_attribute.rb
|
136
137
|
- lib/interview/datetime_attribute.rb
|
137
138
|
- lib/interview/decimal_attribute.rb
|
@@ -159,7 +160,6 @@ files:
|
|
159
160
|
- lib/interview/nested_form_remove_link.rb
|
160
161
|
- lib/interview/object_context.rb
|
161
162
|
- lib/interview/option_attribute.rb
|
162
|
-
- lib/interview/pagination.rb
|
163
163
|
- lib/interview/panel.rb
|
164
164
|
- lib/interview/polymorphic_add_link.rb
|
165
165
|
- lib/interview/progress_bar.rb
|
@@ -1,36 +0,0 @@
|
|
1
|
-
class ControlDef
|
2
|
-
|
3
|
-
attr_accessor :klass
|
4
|
-
attr_reader :params, :controls
|
5
|
-
|
6
|
-
def initialize(klass, params={})
|
7
|
-
@klass = klass.to_sym
|
8
|
-
@params = params
|
9
|
-
@controls = []
|
10
|
-
end
|
11
|
-
|
12
|
-
def control(klass, params={}, &block)
|
13
|
-
control = ControlDef.new(klass, params)
|
14
|
-
@controls << control
|
15
|
-
yield(control) if block_given?
|
16
|
-
end
|
17
|
-
|
18
|
-
def build(params={})
|
19
|
-
control = Object::const_get("#{@klass.to_s.camelcase}").new(@params.merge(params))
|
20
|
-
if control.respond_to? :add_controls
|
21
|
-
control.add_controls build_controls_for(control)
|
22
|
-
end
|
23
|
-
return control
|
24
|
-
end
|
25
|
-
|
26
|
-
def build_controls_for(parent_control)
|
27
|
-
return @controls.map { |c| c.build(parent: parent_control) }
|
28
|
-
end
|
29
|
-
|
30
|
-
def deep_dup
|
31
|
-
new_definition = self.class.new(@klass, @params.deep_dup)
|
32
|
-
new_definition.instance_variable_set :@controls, @controls.deep_dup
|
33
|
-
return new_definition
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|