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 HtmlControl < Control
|
3
|
-
|
4
|
-
def initialize(params={}, &block)
|
5
|
-
super
|
6
|
-
@html = ::Builder::XmlMarkup.new
|
7
|
-
if block
|
8
|
-
yield @html
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_block(&block)
|
13
|
-
yield @html
|
14
|
-
end
|
15
|
-
|
16
|
-
def render
|
17
|
-
return @html.target!
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class ImageAttribute < Attribute
|
3
|
-
|
4
|
-
# - Modul UploadBuffer muss für write vorhanden sein
|
5
|
-
# - json ansicht auf bild muss vorhanden sein
|
6
|
-
|
7
|
-
attr_accessor :image_style, :hide_if_not_exists, :object
|
8
|
-
|
9
|
-
def render_read
|
10
|
-
image_style = @image_style || :thumb
|
11
|
-
|
12
|
-
return '' if value.nil? and @hide_if_not_exists
|
13
|
-
|
14
|
-
html = ::Builder::XmlMarkup.new
|
15
|
-
opts = {class: "image_#{image_style}"}
|
16
|
-
opts[:class] += ' ' + @html_class.join(' ') unless @html_class.empty? or @surrounding_tag
|
17
|
-
html.div opts do
|
18
|
-
if value
|
19
|
-
html << h.image_tag(value.url(image_style), class: 'image img-responsive')
|
20
|
-
else
|
21
|
-
html << h.image_tag('missing_thumb.png', class: 'image img-responsive')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
return html.target!
|
25
|
-
end
|
26
|
-
|
27
|
-
def render_write
|
28
|
-
image_style = @image_style || :thumb
|
29
|
-
|
30
|
-
html = ::Builder::XmlMarkup.new
|
31
|
-
html.div class: 'image_attribute_container' do
|
32
|
-
unless value.nil? and @hide_if_not_exists
|
33
|
-
html.div class: 'inline-block' do
|
34
|
-
html << h.image_tag(value.url(image_style), class: 'image img-responsive')
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
html.div class: 'inline-block' do
|
39
|
-
html.div class: "clearfix" do
|
40
|
-
html.span class: "btn btn-default fileinput-button" do
|
41
|
-
html.span "Bild hochladen" # todo
|
42
|
-
html << h.file_field_tag("upload_buffer[attachment]", class: 'upload_image',
|
43
|
-
data: {url: "/upload_buffers.json", type: 'POST'})
|
44
|
-
end
|
45
|
-
end
|
46
|
-
html << Interview::ProgressBar.new(hidden: true).render
|
47
|
-
html << form_builder.hidden_field(:upload_buffer_id, class: 'upload_buffer_id')
|
48
|
-
|
49
|
-
# if attachment.exists?
|
50
|
-
# html << form_builder.check_box("destroy_#{@method}")
|
51
|
-
# html.text! ' Datei löschen'
|
52
|
-
# end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
return html.target!
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class ImageGalleryAttribute < Attribute
|
3
|
-
|
4
|
-
attr_accessor :object, :submethod, :image_style, :light_box_image_style
|
5
|
-
|
6
|
-
def render_read
|
7
|
-
submethod = @submethod || 'attachment'
|
8
|
-
image_style = @image_style || :thumb
|
9
|
-
images = value
|
10
|
-
|
11
|
-
html = ::Builder::XmlMarkup.new
|
12
|
-
render_gallery(html, images, submethod, image_style, @light_box_image_style)
|
13
|
-
return html.target!
|
14
|
-
end
|
15
|
-
|
16
|
-
def render_write
|
17
|
-
object = @object || find_attribute(:object)
|
18
|
-
submethod = @submethod || 'attachment'
|
19
|
-
image_style = @image_style || :thumb
|
20
|
-
images = object.send @method
|
21
|
-
model = images.klass.model_name.singular
|
22
|
-
|
23
|
-
html = ::Builder::XmlMarkup.new
|
24
|
-
html.div class: 'image-upload-group' do
|
25
|
-
|
26
|
-
html << form_builder.hidden_field("#{@method.singularize}_ids", class: 'image-ids')
|
27
|
-
|
28
|
-
# render_gallery(html, images, submethod, image_style, @light_box_image_style)
|
29
|
-
#
|
30
|
-
# light_box_image_url = @light_box_image_style ? "#{@light_box_image_style}_url" : 'url'
|
31
|
-
# html.script id: 'image-thumb-script', type: 'text/x-tmpl' do
|
32
|
-
# html.a href: "{%=o.#{light_box_image_url}%}", class: 'img-link' do
|
33
|
-
# html.img class: 'img-thumb', src: "{%=o.thumb_url%}"
|
34
|
-
# end
|
35
|
-
# end
|
36
|
-
|
37
|
-
html.div class: "clearfix" do
|
38
|
-
html.span class: "btn btn-default fileinput-button" do
|
39
|
-
html.span "Bilder hinzufügen" # todo
|
40
|
-
html << h.file_field_tag("#{model}[#{submethod}]", class: 'multiple-image-upload', multiple: true,
|
41
|
-
data: {url: "/#{model.pluralize}.json", type: 'POST'})
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
html.div class: 'upload-progress' do
|
46
|
-
end
|
47
|
-
|
48
|
-
html.script id: 'upload-progress-script', type: 'text/x-tmpl' do
|
49
|
-
html.div do
|
50
|
-
html.div class: 'inline-block' do
|
51
|
-
html.img class: 'img-thumb', src: '/assets/missing_180x180.png'
|
52
|
-
end
|
53
|
-
html.div class: 'inline-block' do
|
54
|
-
html.text! "{%=o.name%}"
|
55
|
-
html.div class: 'progress' do
|
56
|
-
html.div '', class: 'progress-bar bar', style: 'width: 0%'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
return html.target!
|
64
|
-
end
|
65
|
-
|
66
|
-
protected
|
67
|
-
|
68
|
-
def render_gallery(html, images, submethod, image_style, light_box_image_style)
|
69
|
-
html.div class: 'image-gallery' do
|
70
|
-
images.each do |image|
|
71
|
-
html.a href: image.send(submethod).url(light_box_image_style), class: 'img-link', title: image.subtitle do
|
72
|
-
html << h.image_tag(image.send(submethod).url(image_style), class: 'img-thumb')
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class ImageLightBox < Control
|
3
|
-
|
4
|
-
def render
|
5
|
-
html = ::Builder::XmlMarkup.new
|
6
|
-
html.div id: "blueimp-gallery", class: "blueimp-gallery" do
|
7
|
-
html.div '', class: "slides"
|
8
|
-
html.h3 '', class: "title"
|
9
|
-
html.a '‹', class: "prev"
|
10
|
-
html.a '›', class: "next"
|
11
|
-
html.a '×', class: "close"
|
12
|
-
html.a '', class: "play-pause"
|
13
|
-
html.ol '', class: "indicator"
|
14
|
-
end
|
15
|
-
return html.target!
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
data/lib/interview/link.rb
DELETED
@@ -1,134 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class Link < Control
|
3
|
-
include HasControls
|
4
|
-
|
5
|
-
attr_accessor :image, :caption, :hint, :style, :active,
|
6
|
-
:url, :controller, :object, :action, :http_method, :redirect_to,
|
7
|
-
:nested_resource, :trail
|
8
|
-
attr_reader :url_params, :html_class, :html_data
|
9
|
-
|
10
|
-
def initialize(params={})
|
11
|
-
@html_class = []
|
12
|
-
@html_data = {}
|
13
|
-
@url_params = {}
|
14
|
-
super
|
15
|
-
end
|
16
|
-
|
17
|
-
def scope=(scope)
|
18
|
-
@url_params[:scope] = scope
|
19
|
-
end
|
20
|
-
|
21
|
-
def filter=(filter)
|
22
|
-
@url_params[:filter] = filter
|
23
|
-
end
|
24
|
-
|
25
|
-
def render
|
26
|
-
if @redirect_to
|
27
|
-
if @redirect_to == :current
|
28
|
-
@url_params[:redirect_to] = h.request.original_url
|
29
|
-
elsif @redirect_to == :parent and Object.const_defined? 'Gretel'
|
30
|
-
@url_params[:redirect_to] = h.parent_breadcrumb.url
|
31
|
-
else
|
32
|
-
@url_params[:redirect_to] = @redirect_to
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
if @trail and Object.const_defined? 'Gretel'
|
37
|
-
@url_params[:trail] = h.breadcrumb_trail
|
38
|
-
end
|
39
|
-
|
40
|
-
if @url
|
41
|
-
url = @url
|
42
|
-
url = "#{h.root_url}#{url}" if url[0..3] != 'http'
|
43
|
-
elsif @controller
|
44
|
-
url_options = @url_option.dup
|
45
|
-
opts = {controller: @controller, action: @action}.merge @url_params
|
46
|
-
url = h.url_for opts
|
47
|
-
else
|
48
|
-
url_params = @url_params.dup
|
49
|
-
url_params[:action] = @action if @action and not %w(index show create update destroy).include? @action
|
50
|
-
object = @object || find_attribute!(:object)
|
51
|
-
url_params.each do |key, value|
|
52
|
-
url_params[key] = value.call(self) if value.is_a? Proc
|
53
|
-
end
|
54
|
-
if @nested_resource and assoc_object
|
55
|
-
url = h.polymorphic_path [assoc_object, object], url_params
|
56
|
-
else
|
57
|
-
url = h.polymorphic_path object, url_params
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
html_options = {}
|
62
|
-
html_class = @html_class.dup
|
63
|
-
if @action == 'destroy'
|
64
|
-
html_options[:method] = :delete
|
65
|
-
html_options[:data] = { confirm: 'Are you sure?' }
|
66
|
-
end
|
67
|
-
if @http_method
|
68
|
-
html_options[:method] = @http_method.to_sym
|
69
|
-
end
|
70
|
-
|
71
|
-
if @hint
|
72
|
-
html_class << 'action_hint'
|
73
|
-
html_options[:'data-toggle'] = 'tooltip'
|
74
|
-
html_options[:title] = @hint
|
75
|
-
end
|
76
|
-
|
77
|
-
if @style and respond_to? "render_#{@style}_style", true
|
78
|
-
return send "render_#{@style}_style", url, html_class, html_options
|
79
|
-
else
|
80
|
-
return render_link url, html_class, html_options
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def object # todo: Überdenken
|
85
|
-
find_attribute(:object)
|
86
|
-
end
|
87
|
-
|
88
|
-
def assoc_object # todo: Überdenken
|
89
|
-
find_attribute(:assoc_object)
|
90
|
-
end
|
91
|
-
|
92
|
-
protected
|
93
|
-
|
94
|
-
def render_button_style(url, html_class=[], html_options={})
|
95
|
-
html_class << 'btn btn-default'
|
96
|
-
return render_link(url, html_class, html_options)
|
97
|
-
end
|
98
|
-
|
99
|
-
def render_primary_button_style(url, html_class=[], html_options={})
|
100
|
-
html_class << 'btn btn-primary'
|
101
|
-
return render_link(url, html_class, html_options)
|
102
|
-
end
|
103
|
-
|
104
|
-
def render_list_style(url, html_class=[], html_options={})
|
105
|
-
html = ::Builder::XmlMarkup.new
|
106
|
-
li_class = @active ? 'active' : ''
|
107
|
-
html.li class: li_class do
|
108
|
-
html << render_link(url, html_class, html_options)
|
109
|
-
end
|
110
|
-
return html.target!
|
111
|
-
end
|
112
|
-
|
113
|
-
def render_link(url, html_class=[], html_options={})
|
114
|
-
controls = add_parent(build_children)
|
115
|
-
class_string = html_class.join(' ')
|
116
|
-
html_options[:class] = class_string unless html_class.empty?
|
117
|
-
html_options[:data] = @html_data unless @html_data.empty?
|
118
|
-
return h.link_to(url, html_options) do
|
119
|
-
html = ::Builder::XmlMarkup.new
|
120
|
-
if controls.empty?
|
121
|
-
html.span '', class: "glyphicon glyphicon-#{@image}" if @image
|
122
|
-
html.text! ' ' if @image and @caption
|
123
|
-
html << @caption if @caption
|
124
|
-
else
|
125
|
-
controls.each do |control|
|
126
|
-
html << control.render
|
127
|
-
end
|
128
|
-
end
|
129
|
-
html.target!.html_safe
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
end
|
data/lib/interview/list.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class List < Control
|
3
|
-
include HasControls
|
4
|
-
|
5
|
-
attr_accessor :objects, :empty_message
|
6
|
-
attr_reader :object
|
7
|
-
|
8
|
-
def render
|
9
|
-
objects = @objects || find_attribute!(:objects)
|
10
|
-
html = ::Builder::XmlMarkup.new
|
11
|
-
objects.each do |object|
|
12
|
-
@object = object
|
13
|
-
add_parent(build_children).each do |control| # todo: controls neu initialisieren?
|
14
|
-
html << control.render
|
15
|
-
end
|
16
|
-
end
|
17
|
-
if objects.empty? and @empty_message != :hide
|
18
|
-
object = find_attribute!(:object)
|
19
|
-
empty_message = @empty_message || "Keine #{object.class.human_name(count: 2)} vorhanden."
|
20
|
-
html.p empty_message, class: 'text-center text-muted'
|
21
|
-
end
|
22
|
-
return html.target!
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class MediaObject < Control
|
3
|
-
include HasControls
|
4
|
-
|
5
|
-
attr_reader :object
|
6
|
-
|
7
|
-
def render
|
8
|
-
image_size = @image_size || :thumb
|
9
|
-
object = find_attribute :object
|
10
|
-
controls = add_parent(build_children)
|
11
|
-
@object = object
|
12
|
-
html = ::Builder::XmlMarkup.new(indent: 2)
|
13
|
-
html.div class: 'media' do
|
14
|
-
controls[0].html_class << 'pull-left' if controls[0].respond_to? 'html_class'
|
15
|
-
html << controls.first.render
|
16
|
-
html.div class: 'media-body' do
|
17
|
-
controls[1].html_class << 'media-heading' if controls[1].respond_to? 'html_class'
|
18
|
-
controls[1..-1].each do |control|
|
19
|
-
html << control.render
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
return html.target!
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
data/lib/interview/navigation.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class Navigation < Control
|
3
|
-
include HasControls
|
4
|
-
|
5
|
-
attr_accessor :controller_name, :action_name, :current_scope, :current_filter
|
6
|
-
|
7
|
-
def render
|
8
|
-
auto_set_active
|
9
|
-
|
10
|
-
html = ::Builder::XmlMarkup.new
|
11
|
-
html.ul class: 'nav nav-pills nav-stacked' do
|
12
|
-
add_parent(build_children).each do |control|
|
13
|
-
html << control.render
|
14
|
-
end
|
15
|
-
end
|
16
|
-
return html.target!
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def auto_set_active
|
22
|
-
siblings.each { |sib| sib.active = false }
|
23
|
-
if (nav_item = siblings.find { |sib| controller_match(sib) && action_match(sib) && scope_match(sib) && filter_match(sib) })
|
24
|
-
nav_item.active = true
|
25
|
-
elsif (nav_item = siblings.find { |sib| controller_match(sib) && scope_match(sib) && filter_match(sib) })
|
26
|
-
nav_item.active = true
|
27
|
-
elsif (nav_item = siblings.find { |sib| controller_match(sib) && (scope_match(sib) || filter_match(sib)) })
|
28
|
-
nav_item.active = true
|
29
|
-
elsif (nav_item = siblings.find { |sib| controller_match(sib) })
|
30
|
-
nav_item.active = true
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def controller_match(nav_item)
|
35
|
-
return @controller_name == nav_item.controller
|
36
|
-
end
|
37
|
-
|
38
|
-
def action_match(nav_item)
|
39
|
-
return @action_name == nav_item.action
|
40
|
-
end
|
41
|
-
|
42
|
-
def scope_match(nav_item)
|
43
|
-
return true if @current_scope.nil?
|
44
|
-
return false if nav_item.url_options[:scope].nil?
|
45
|
-
return true if nav_item.url_options[:scope] == @current_scope
|
46
|
-
end
|
47
|
-
|
48
|
-
def filter_match(nav_item)
|
49
|
-
return true if @current_filter.nil?
|
50
|
-
return false if nav_item.url_options[:filter].nil?
|
51
|
-
return @current_filter.all? { |key, value| nav_item.url_options[:filter][key] == value }
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module Interview
|
2
|
-
class NavigationItem < Control
|
3
|
-
|
4
|
-
include HasControls
|
5
|
-
|
6
|
-
attr_accessor :active, :image, :caption, :badge_formula,
|
7
|
-
:url, :controller, :object, :action, :http_method, :trail
|
8
|
-
|
9
|
-
def render
|
10
|
-
css_class = "level#{ancestors.count-1}"
|
11
|
-
css_class += " active" if @active
|
12
|
-
show_siblings = @active || siblings.any? { |sib| sib.active }
|
13
|
-
|
14
|
-
link = Link.new(parent: self, url: @url, controller: @controller, object: @object,
|
15
|
-
action: @action, http_method: @http_method, trail: @trail)
|
16
|
-
badge = @badge_formula.call if @badge_formula
|
17
|
-
unless badge.nil? or badge == 0 or badge == ''
|
18
|
-
link.add_control(HtmlControl.new do |html|
|
19
|
-
html.span badge, class: 'badge pull-right'
|
20
|
-
end)
|
21
|
-
end
|
22
|
-
link.add_control(HtmlControl.new do |html|
|
23
|
-
html.span '', class: "glyphicon glyphicon-#{@image}" if @image
|
24
|
-
html.text! ' ' if @image and @caption
|
25
|
-
html << @caption if @caption
|
26
|
-
end)
|
27
|
-
|
28
|
-
html = ::Builder::XmlMarkup.new
|
29
|
-
html.li class: css_class do
|
30
|
-
html << link.render
|
31
|
-
end
|
32
|
-
if show_siblings
|
33
|
-
add_parent(build_children).each do |c|
|
34
|
-
html << c.render
|
35
|
-
end
|
36
|
-
end
|
37
|
-
return html.target!
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|