ui_bibz 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +44 -0
  3. data/.travis.yml +13 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +171 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +728 -0
  8. data/README.rdoc +0 -0
  9. data/Rakefile +34 -0
  10. data/config/locales/en.yml +14 -0
  11. data/config/locales/fr.yml +14 -0
  12. data/doc/images/alert.png +0 -0
  13. data/doc/images/breadcrumb.png +0 -0
  14. data/doc/images/button.png +0 -0
  15. data/doc/images/button_dropdown.png +0 -0
  16. data/doc/images/button_group.png +0 -0
  17. data/doc/images/button_link.png +0 -0
  18. data/doc/images/button_split_dropdown.png +0 -0
  19. data/doc/images/glyph.png +0 -0
  20. data/doc/images/list.png +0 -0
  21. data/doc/images/nav.png +0 -0
  22. data/doc/images/panel.png +0 -0
  23. data/doc/images/table.png +0 -0
  24. data/doc/images/table_pagination_per_page.png +0 -0
  25. data/doc/images/table_panel.png +0 -0
  26. data/doc/images/table_search_field.png +0 -0
  27. data/doc/images/ui-bibz-logo-without-border.gif +0 -0
  28. data/doc/images/ui-bibz-logo.gif +0 -0
  29. data/lib/tasks/ui_bibz_tasks.rake +4 -0
  30. data/lib/ui_bibz/concerns/models/searchable.rb +93 -0
  31. data/lib/ui_bibz/helpers/meta_helper.rb +27 -0
  32. data/lib/ui_bibz/helpers/ui_helper.rb +108 -0
  33. data/lib/ui_bibz/helpers/utils_helper.rb +9 -0
  34. data/lib/ui_bibz/rails/engine.rb +39 -0
  35. data/lib/ui_bibz/ui/alert.rb +67 -0
  36. data/lib/ui_bibz/ui/breadcrumb/breadcrumb.rb +54 -0
  37. data/lib/ui_bibz/ui/breadcrumb/components/breadcrumb_link.rb +62 -0
  38. data/lib/ui_bibz/ui/button/button.rb +65 -0
  39. data/lib/ui_bibz/ui/button/button_dropdown.rb +56 -0
  40. data/lib/ui_bibz/ui/button/button_group.rb +62 -0
  41. data/lib/ui_bibz/ui/button/button_link.rb +66 -0
  42. data/lib/ui_bibz/ui/button/button_split_dropdown.rb +80 -0
  43. data/lib/ui_bibz/ui/component.rb +137 -0
  44. data/lib/ui_bibz/ui/dropdown/components/dropdown_list.rb +73 -0
  45. data/lib/ui_bibz/ui/dropdown/dropdown.rb +101 -0
  46. data/lib/ui_bibz/ui/glyph.rb +92 -0
  47. data/lib/ui_bibz/ui/grid/components/col.rb +74 -0
  48. data/lib/ui_bibz/ui/grid/components/row.rb +32 -0
  49. data/lib/ui_bibz/ui/grid/grid.rb +108 -0
  50. data/lib/ui_bibz/ui/jumbotron.rb +58 -0
  51. data/lib/ui_bibz/ui/label.rb +58 -0
  52. data/lib/ui_bibz/ui/list/components/list.rb +105 -0
  53. data/lib/ui_bibz/ui/list/list_group.rb +78 -0
  54. data/lib/ui_bibz/ui/nav/components/nav_link.rb +68 -0
  55. data/lib/ui_bibz/ui/nav/nav.rb +65 -0
  56. data/lib/ui_bibz/ui/panel.rb +101 -0
  57. data/lib/ui_bibz/ui/table/components/actions.rb +44 -0
  58. data/lib/ui_bibz/ui/table/components/column.rb +34 -0
  59. data/lib/ui_bibz/ui/table/components/columns.rb +16 -0
  60. data/lib/ui_bibz/ui/table/components/store.rb +67 -0
  61. data/lib/ui_bibz/ui/table/components/table_action.rb +21 -0
  62. data/lib/ui_bibz/ui/table/table.rb +146 -0
  63. data/lib/ui_bibz/ui/table/table_pagination.rb +29 -0
  64. data/lib/ui_bibz/ui/table/table_pagination_per_page.rb +53 -0
  65. data/lib/ui_bibz/ui/table/table_panel.rb +66 -0
  66. data/lib/ui_bibz/ui/table/table_search_field.rb +62 -0
  67. data/lib/ui_bibz/ui/table/ux/actionable.rb +59 -0
  68. data/lib/ui_bibz/ui/table/ux/paginable.rb +35 -0
  69. data/lib/ui_bibz/ui/table/ux/searchable.rb +47 -0
  70. data/lib/ui_bibz/ui/table/ux/sortable.rb +93 -0
  71. data/lib/ui_bibz/ui/ui.rb +14 -0
  72. data/lib/ui_bibz/utils/internationalization.rb +30 -0
  73. data/lib/ui_bibz/version.rb +3 -0
  74. data/lib/ui_bibz.rb +60 -0
  75. data/test/dummy/README.rdoc +28 -0
  76. data/test/dummy/Rakefile +6 -0
  77. data/test/dummy/app/assets/images/.keep +0 -0
  78. data/test/dummy/app/assets/javascripts/application.js +13 -0
  79. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  80. data/test/dummy/app/controllers/application_controller.rb +5 -0
  81. data/test/dummy/app/controllers/concerns/.keep +0 -0
  82. data/test/dummy/app/helpers/application_helper.rb +2 -0
  83. data/test/dummy/app/mailers/.keep +0 -0
  84. data/test/dummy/app/models/.keep +0 -0
  85. data/test/dummy/app/models/concerns/.keep +0 -0
  86. data/test/dummy/app/models/user.rb +5 -0
  87. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  88. data/test/dummy/bin/bundle +3 -0
  89. data/test/dummy/bin/rails +4 -0
  90. data/test/dummy/bin/rake +4 -0
  91. data/test/dummy/bin/setup +29 -0
  92. data/test/dummy/config/application.rb +26 -0
  93. data/test/dummy/config/boot.rb +5 -0
  94. data/test/dummy/config/database.yml +25 -0
  95. data/test/dummy/config/environment.rb +5 -0
  96. data/test/dummy/config/environments/development.rb +41 -0
  97. data/test/dummy/config/environments/production.rb +79 -0
  98. data/test/dummy/config/environments/test.rb +42 -0
  99. data/test/dummy/config/initializers/assets.rb +11 -0
  100. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  101. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  102. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  103. data/test/dummy/config/initializers/inflections.rb +16 -0
  104. data/test/dummy/config/initializers/mime_types.rb +4 -0
  105. data/test/dummy/config/initializers/session_store.rb +3 -0
  106. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  107. data/test/dummy/config/locales/en.yml +23 -0
  108. data/test/dummy/config/routes.rb +57 -0
  109. data/test/dummy/config/secrets.yml +22 -0
  110. data/test/dummy/config.ru +4 -0
  111. data/test/dummy/db/migrate/20150123191721_user.rb +4 -0
  112. data/test/dummy/db/migrate/20150123191805_create_users.rb +12 -0
  113. data/test/dummy/db/schema.rb +25 -0
  114. data/test/dummy/lib/assets/.keep +0 -0
  115. data/test/dummy/log/.keep +0 -0
  116. data/test/dummy/public/404.html +67 -0
  117. data/test/dummy/public/422.html +67 -0
  118. data/test/dummy/public/500.html +66 -0
  119. data/test/dummy/public/favicon.ico +0 -0
  120. data/test/dummy/test/fixtures/users.yml +13 -0
  121. data/test/dummy/test/models/user_test.rb +7 -0
  122. data/test/factories/user.rb +8 -0
  123. data/test/store_test.rb +46 -0
  124. data/test/support/factory_girl.rb +6 -0
  125. data/test/test_helper.rb +23 -0
  126. data/test/ui/button_test.rb +56 -0
  127. data/test/ui/component_test.rb +21 -0
  128. data/test/ui/dropdown_test.rb +18 -0
  129. data/test/ui/glyph_test.rb +23 -0
  130. data/test/ui/grid_test.rb +46 -0
  131. data/test/ui/list_group_test.rb +28 -0
  132. data/test/ui/nav_test.rb +27 -0
  133. data/test/ui/panel_test.rb +52 -0
  134. data/test/ui/table_test.rb +178 -0
  135. data/test/ui_bibz_test.rb +13 -0
  136. data/test/ui_helper_test.rb +44 -0
  137. data/ui_bibz.gemspec +36 -0
  138. data/vendor/assets/javascripts/ui_bibz.js.coffee +24 -0
  139. data/vendor/assets/stylesheets/ui_bibz.sass +46 -0
  140. metadata +398 -0
@@ -0,0 +1,56 @@
1
+ module UiBibz::Ui
2
+
3
+ # Create a button dropdown
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Dropdown.
6
+ #
7
+ # ==== Attributes
8
+ #
9
+ # * +content+ - Content of element
10
+ # * +options+ - Options of element
11
+ # * +html_options+ - Html Options of element
12
+ #
13
+ # ==== Options
14
+ #
15
+ # You can add HTML attributes using the +html_options+.
16
+ # You can pass arguments in options attribute:
17
+ # * +state+ - State of élement with symbol value:
18
+ # (+:default+, +:primary+, +:info+, +:warning+, +:danger+)
19
+ # * +size+
20
+ # (+:xs+, +:sm+, +:lg+)
21
+ # * +glyph+ - Add glyph with name or hash options
22
+ # * +name+ - String
23
+ # * +size+ - Integer
24
+ # * +type+ - Symbol
25
+ #
26
+ # ==== Signatures
27
+ #
28
+ # UiBibz::Ui::ButtonDropdown.new(options = nil, html_options = nil).tap do |d|
29
+ # d.list content = nil, options = nil, html_options = nil, &block
30
+ # d.list content = nil, options = nil, html_options = nil, &block
31
+ # d.list content = nil, options = nil, html_options = nil, &block
32
+ # ...
33
+ # end
34
+ #
35
+ # ==== Examples
36
+ #
37
+ # UiBibz::Ui::ButtonDropdown.new(name, state: :success).tap do |d|
38
+ # d.list link_to('test', '#')
39
+ # d.list link_to('test2', '#')
40
+ # end.render
41
+ #
42
+ class ButtonDropdown < Dropdown
43
+
44
+ def initialize name, options = nil, html_options = nil, &block
45
+ super
46
+ end
47
+
48
+ def render
49
+ content_tag :div, class_and_html_options(['btn-group', type]).merge({ role: 'group' }) do
50
+ concat button_html
51
+ concat ul_html
52
+ end
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,62 @@
1
+ module UiBibz::Ui
2
+
3
+ # Create a button group
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Component.
6
+ #
7
+ # ==== Attributes
8
+ #
9
+ # * +content+ - Content of element
10
+ # * +options+ - Options of element
11
+ # * +html_options+ - Html Options of element
12
+ #
13
+ # ==== Options
14
+ #
15
+ # You can add HTML attributes using the +html_options+.
16
+ # You can pass arguments in options attribute:
17
+ # * +state+ - State of element with +symbol+ value:
18
+ # (+:default+, +:primary+, +:info+, +:warning+, +:danger+)
19
+ # * +size+ - Size of element with +symbol+ value:
20
+ # (+:xs+, +:sm+, +:lg+)
21
+ # * +position+ - Position vertical or horizontal with +symbol+ value:
22
+ # (+:vertical+, +:horizontal+)
23
+ #
24
+ # ==== Signatures
25
+ #
26
+ # UiBibz::Ui::ButtonGroup.new(options = nil, html_options = nil) do
27
+ # ...
28
+ # end
29
+ #
30
+ # ==== Examples
31
+ #
32
+ # UiBibz::Ui::ButtonGroup.new(position: :vertical, size: :xs) do
33
+ # UiBibz::Ui.Button.new('test').render
34
+ # UiBibz::Ui.Button.new('test2').render
35
+ # end.render
36
+ #
37
+ class ButtonGroup < Component
38
+
39
+ def initialize content = nil, options = nil, html_options = nil, &block
40
+ super
41
+ end
42
+
43
+ def render
44
+ content_tag :div, @content, class_and_html_options(["btn-#{ type }", size, position]).merge({ role: type })
45
+ end
46
+
47
+ private
48
+
49
+ def type
50
+ @options[:type] || :group
51
+ end
52
+
53
+ def size
54
+ "btn-group-#{ @options[:size] }" if @options[:size]
55
+ end
56
+
57
+ def position
58
+ "btn-group-#{ @options[:position] }" if @options[:position]
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,66 @@
1
+ module UiBibz::Ui
2
+
3
+ # Create a button link
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Component.
6
+ #
7
+ # ==== Attributes
8
+ #
9
+ # * +content+ - Content of element
10
+ # * +options+ - Options of element
11
+ # * +html_options+ - Html Options of element
12
+ #
13
+ # ==== Options
14
+ #
15
+ # You can add HTML attributes using the +html_options+.
16
+ # You can pass arguments in options attribute:
17
+ # * +state+ - State of élement with symbol value:
18
+ # (+:default+, +:primary+, +:info+, +:warning+, +:danger+)
19
+ # * +size+
20
+ # (+:xs+, +:sm+, +:lg+)
21
+ # * +url+ - String url
22
+ # * +glyph+ - Add glyph with name or hash options
23
+ # * +name+ - String
24
+ # * +size+ - Integer
25
+ # * +type+ - Symbol
26
+ #
27
+ # ==== Signatures
28
+ #
29
+ # UiBibz::Ui::ButtonLink.new(content, options = nil, html_options = nil)
30
+ #
31
+ # UiBibz::Ui::ButtonLink.new(options = nil, html_options = nil) do
32
+ # content
33
+ # end
34
+ #
35
+ # ==== Examples
36
+ #
37
+ # UiBibz::Ui::ButtonLink.new('test', type: :primary, url: '#')
38
+ #
39
+ # UiBibz::Ui::ButtonLink.new(type: :primary, url: '#') do
40
+ # test
41
+ # end.render
42
+ #
43
+ class ButtonLink < Component
44
+
45
+ def initialize content = nil, options = nil, html_options = nil, &block
46
+ super
47
+ end
48
+
49
+ def render
50
+ link_to glyph_and_content_html, @options[:url], class_and_html_options("btn")
51
+ end
52
+
53
+ private
54
+
55
+ def state
56
+ sym = @options[:state] || :default
57
+ "btn-#{ states[sym] }"
58
+ end
59
+
60
+ # :lg, :sm or :xs
61
+ def size
62
+ "btn-#{ @options[:size] }" if @options[:size]
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,80 @@
1
+ module UiBibz::Ui
2
+
3
+ # Create a button dropdown
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Dropdown.
6
+ #
7
+ # ==== Attributes
8
+ #
9
+ # * +content+ - Content of element
10
+ # * +options+ - Options of element
11
+ # * +html_options+ - Html Options of element
12
+ #
13
+ # ==== Options
14
+ #
15
+ # You can add HTML attributes using the +html_options+.
16
+ # You can pass arguments in options attribute:
17
+ # * +state+ - State of élement with symbol value:
18
+ # (+:default+, +:primary+, +:info+, +:warning+, +:danger+)
19
+ # * +size+
20
+ # (+:xs+, +:sm+, +:lg+)
21
+ # * +glyph+ - Add glyph with name or hash options
22
+ # * +name+ - String
23
+ # * +size+ - Integer
24
+ # * +type+ - Symbol
25
+ #
26
+ # ==== Signatures
27
+ #
28
+ # UiBibz::Ui::ButtonSplitDropdown.new(options = nil, html_options = nil).tap do |d|
29
+ # d.list content = nil, options = nil, html_options = nil, &block
30
+ # d.list content = nil, options = nil, html_options = nil, &block
31
+ # d.list content = nil, options = nil, html_options = nil, &block
32
+ # ...
33
+ # end
34
+ #
35
+ # ==== Examples
36
+ #
37
+ # UiBibz::Ui::ButtonSplitDropdown.new(name, state: :success).tap do |d|
38
+ # d.list link_to('test', '#')
39
+ # d.list link_to('test2', '#')
40
+ # end.render
41
+ #
42
+ class ButtonSplitDropdown < Dropdown
43
+
44
+ def initialize name, options = nil, html_options = nil, &block
45
+ super
46
+ end
47
+
48
+ def render
49
+ content_tag :div, class_and_html_options(['btn-group', type]).merge({ role: 'group' }) do
50
+ concat button_html
51
+ concat split_html
52
+ concat ul_html
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+
59
+ def button_html
60
+ content_tag :button, button_content, class: add_classes("btn", button_state, size)
61
+ end
62
+
63
+ def split_html
64
+ content_tag :button, split_content, class: add_classes("btn", button_state, "dropdown-toggle"), type: 'button', "data-toggle" => 'dropdown', "aria-expanded" => false
65
+ end
66
+
67
+ def split_content
68
+ [caret, src_only].join.html_safe
69
+ end
70
+
71
+ def src_only
72
+ content_tag :span, "Toggle Dropdown", class: "sr-only"
73
+ end
74
+
75
+ def button_content
76
+ [glyph_with_space, @content].compact.join.html_safe
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,137 @@
1
+ require 'haml'
2
+ module UiBibz::Ui
3
+
4
+ # Creates a component of the given +name+ using options created by the set of +options+.
5
+ #
6
+ # ==== Attributes
7
+ #
8
+ # * +content+ - Content of element
9
+ # * +options+ - Options of element
10
+ # * +html_options+ - Html Options of element
11
+ #
12
+ # ==== Options
13
+ #
14
+ # You can add HTML attributes using the +html_options+.
15
+ # You can pass arguments in options attribute:
16
+ # * +state+ - State of élement with symbol value:
17
+ # (+:default+, +:primary+, +:info+, +:warning+, +:danger+)
18
+ # * +glyph+ - Add glyph with name or hash options
19
+ # * +name+ - String
20
+ # * +size+ - Integer
21
+ # * +type+ - Symbol
22
+ #
23
+ # ==== Signatures
24
+ #
25
+ # UiBibz::Ui::Component.new(content, options = nil, html_options = nil)
26
+ #
27
+ # UiBibz::Ui::Component.new(options = nil, html_options = nil) do
28
+ # content
29
+ # end
30
+ #
31
+ # ==== Examples
32
+ #
33
+ # UiBibz::Ui::Component.new(content, { type: :success, glyph: 'eye' },{ class: 'test' })
34
+ # # or
35
+ # UiBibz::Ui::Component.new({glyph: { name: 'eye', size: 3}, { class: 'test' }) do
36
+ # content
37
+ # end
38
+ #
39
+ class Component < Ui
40
+
41
+ attr_accessor :content, :html_options, :options
42
+
43
+ def initialize content = nil, options = nil, html_options = nil, &block
44
+ if !block.nil?
45
+ @html_options, @options = options, content
46
+ context = eval("self", block.binding)
47
+ @content = context.capture(&block)
48
+ else
49
+ if content.kind_of?(Hash)
50
+ @html_options, @options = options, content
51
+ else
52
+ @html_options, @options, @content = html_options, options, content
53
+ end
54
+ end
55
+ @html_options = @html_options || {}
56
+ @options = @options || {}
57
+ end
58
+
59
+ def render
60
+ glyph_and_content_html
61
+ end
62
+
63
+ def glyph_and_content_html
64
+ [glyph_with_space, @content].compact.join.html_safe
65
+ end
66
+
67
+ def glyph
68
+ glyph_info = options[:glyph] if options.kind_of?(Hash)
69
+ Glyph.new(glyph_info).render unless glyph_info.nil?
70
+ end
71
+
72
+ def glyph_with_space
73
+ "#{ glyph } " unless glyph.nil?
74
+ end
75
+
76
+ def options
77
+ @options
78
+ end
79
+
80
+ def html_options
81
+ @html_options
82
+ end
83
+
84
+ def content
85
+ @content
86
+ end
87
+
88
+ def state
89
+ sym = options.delete(:state) if options[:state]
90
+ sym = sym || :default
91
+ states[:sym]
92
+ end
93
+
94
+ def badge_html
95
+ content_tag :span, @options[:badge], class: 'badge'
96
+ end
97
+
98
+ def class_and_html_options classes = nil
99
+ options_class = options[:class] if options.kind_of?(Hash)
100
+ cls = [
101
+ html_options[:class],
102
+ status,
103
+ state,
104
+ options_class
105
+ ]
106
+ cls << classes unless classes.nil?
107
+ cls = cls.flatten.compact
108
+ html_options[:class] = cls.join(' ') unless cls.empty?
109
+ html_options
110
+ end
111
+
112
+ def options_in_html_options opts
113
+ html_options.merge!(opts) unless opts.nil?
114
+ html_options
115
+ end
116
+
117
+ def status
118
+ options[:status]
119
+ end
120
+
121
+ def states
122
+ if @states.nil?
123
+ states = {}
124
+ %w(default success primary info waring danger).each do |s|
125
+ states = states.merge(Hash[s.to_sym, s])
126
+ end
127
+ @states = states
128
+ end
129
+ @states
130
+ end
131
+
132
+ def add_classes *classes
133
+ classes.compact.join(' ')
134
+ end
135
+
136
+ end
137
+ end
@@ -0,0 +1,73 @@
1
+ module UiBibz::Ui
2
+
3
+ # Create DropdownList
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Component.
6
+ # Use '---' in content to add a separator
7
+ #
8
+ # ==== Attributes
9
+ #
10
+ # * +content+ - Content of element
11
+ # * +options+ - Options of element
12
+ # * +html_options+ - Html Options of element
13
+ #
14
+ # ==== Options
15
+ #
16
+ # You can add HTML attributes using the +html_options+.
17
+ # You can pass arguments in options attribute:
18
+ # * +status+ - State of élement with symbol value:
19
+ # (+:active+)
20
+ # * +url+ - String
21
+ # * +glyph+ - Add glyph with name or hash options
22
+ # * +name+ - String
23
+ # * +size+ - Integer
24
+ # * +type+ - Symbol
25
+ #
26
+ # ==== Signatures
27
+ #
28
+ # UiBibz::Ui::DropdownList.new(content, options = nil, html_options = nil)
29
+ #
30
+ # UiBibz::Ui::DropdownList.new(options = nil, html_options = nil) do
31
+ # content
32
+ # end
33
+ #
34
+ # ==== Examples
35
+ #
36
+ # UiBibz::Ui::DropdownList.new('Home', { glyph: 'home', status: :active },{ class: 'test' }).render
37
+ #
38
+ # UiBibz::Ui::DropdownList.new({glyph: { name: 'eye', size: 3}, { class: 'test' }) do
39
+ # 'Home'
40
+ # end.render
41
+ #
42
+ # UiBibz::UiBibz::DropdownList.new('---').render # To add a separator
43
+ #
44
+ class DropdownList < Component
45
+
46
+ DIVIDER = '---'
47
+
48
+ def initialize content = nil, options = nil, html_options = nil, &block
49
+ super
50
+ end
51
+
52
+ def render
53
+ @content == DIVIDER ? divider_html : link_html
54
+ end
55
+
56
+ private
57
+
58
+ def divider_html
59
+ content_tag :li, '', class_and_html_options('divider').merge({ role: 'presentation' })
60
+ end
61
+
62
+ def link_html
63
+ content_tag :li, class_and_html_options(type).merge({ role: 'presentation' }) do
64
+ @content
65
+ end
66
+ end
67
+
68
+ def type
69
+ "dropdown-header" if @options[:type] == :header
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,101 @@
1
+ require 'ui_bibz/ui/dropdown/components/dropdown_list'
2
+ module UiBibz::Ui
3
+
4
+ # Create a dropdown
5
+ #
6
+ # This element is an extend of UiBibz::Ui::Component.
7
+ # You can use tap method to add list items.
8
+ #
9
+ # ==== Attributes
10
+ #
11
+ # * +content+ - Content of element
12
+ # * +options+ - Options of element
13
+ # * +html_options+ - Html Options of element
14
+ #
15
+ # ==== Options
16
+ #
17
+ # You can add HTML attributes using the +html_options+.
18
+ # You can pass arguments in options attribute:
19
+ # * +state+ - State of élement with symbol value:
20
+ # (+:default+, +:primary+, +:info+, +:warning+, +:danger+)
21
+ # * +size+
22
+ # (+:xs+, +:sm+, +:lg+)
23
+ # * +glyph+ - Add glyph with name or hash options
24
+ # * +name+ - String
25
+ # * +size+ - Integer
26
+ # * +type+ - Symbol
27
+ #
28
+ # ==== Signatures
29
+ #
30
+ # UiBibz::Ui::Dropdown.new(options = nil, html_options = nil).tap do |d|
31
+ # d.list content = nil, options = nil, html_options = nil, &block
32
+ # d.list content = nil, options = nil, html_options = nil, &block
33
+ # d.list content = nil, options = nil, html_options = nil, &block
34
+ # ...
35
+ # end
36
+ #
37
+ # ==== Examples
38
+ #
39
+ # UiBibz::Ui::Dropdown.new(name, state: :success).tap do |d|
40
+ # d.list link_to('test', '#')
41
+ # d.list link_to('test2', '#')
42
+ # end.render
43
+ #
44
+ class Dropdown < Component
45
+
46
+ def initialize content, options = nil, html_options = nil, &block
47
+ super
48
+ @lists = []
49
+ @state = @options.delete(:state)
50
+ end
51
+
52
+ def render
53
+ content_tag :div, class_and_html_options(type) do
54
+ concat button_html
55
+ concat ul_html
56
+ end
57
+ end
58
+
59
+ # See UiBibz::Ui::DropdownList
60
+ def list content = nil, options = nil, html_options = nil, &block
61
+ @lists << DropdownList.new(content, options, html_options, &block).render
62
+ end
63
+
64
+ private
65
+
66
+ def button_content
67
+ [glyph_with_space, @content, ' ', caret].compact.join.html_safe
68
+ end
69
+
70
+ def button_html
71
+ content_tag :button, button_content, class: add_classes("btn", button_state, size, "dropdown-toggle"), type: 'button', "data-toggle" => 'dropdown', "aria-expanded" => false
72
+ end
73
+
74
+ def ul_html
75
+ content_tag :ul, @lists.join.html_safe, class: "dropdown-menu dropdown-menu-#{ position }", role: 'menu'
76
+ end
77
+
78
+ def caret
79
+ content_tag :span, '', class: 'caret'
80
+ end
81
+
82
+ def position
83
+ @options[:position] || 'left'
84
+ end
85
+
86
+ def type
87
+ @options[:type] || 'dropdown'
88
+ end
89
+
90
+ def button_state
91
+ sym = @state || :default
92
+ "btn-#{ states[sym] }"
93
+ end
94
+
95
+ # :lg, :sm or :xs
96
+ def size
97
+ "btn-#{ @options[:size] }" if @options[:size]
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,92 @@
1
+ module UiBibz::Ui
2
+
3
+ # Create a glyph
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Component.
6
+ #
7
+ # ==== Attributes
8
+ #
9
+ # * +content+ - Content of element
10
+ # * +options+ - Options of element
11
+ # * +html_options+ - Html Options of element
12
+ #
13
+ # ==== Options
14
+ #
15
+ # You can add HTML attributes using the +html_options+.
16
+ # You can pass arguments in options attribute:
17
+ # * +name+ - String
18
+ # * +size+ - Integer
19
+ # * +type+ - Symbol
20
+ #
21
+ # ==== Signatures
22
+ #
23
+ # UiBibz::Ui::Glyph.new content = nil, options = nil, html_options = nil,
24
+ # &block
25
+ #
26
+ # UiBibz::Ui::Glyph.new(options = nil, html_options = nil) do
27
+ # content
28
+ # end
29
+ #
30
+ # UiBibz::Ui::Glyph.new content = {}
31
+ #
32
+ # UiBibz::Ui::Glyph.new content, options = {}, html_options = {}
33
+ #
34
+ # ==== Exemples
35
+ #
36
+ # UiBibz::Ui::Glyph.new('eye').render
37
+ #
38
+ # UiBibz::Ui::Glyph.new() do
39
+ # name
40
+ # end.render
41
+ #
42
+ # UiBibz::Ui::Glyph.new('eye', { size: 3, type: 'fw' }).render
43
+ #
44
+ # UiBibz::Ui::Glyph.new({ name: 'eye', size: 3, type: 'fw' }).render
45
+ #
46
+ #
47
+ class Glyph < Component
48
+
49
+ def initialize content, options = nil, html_options = nil, &block
50
+ super
51
+ end
52
+
53
+ def render
54
+ content_tag :i, '', class_and_html_options(classes)
55
+ end
56
+
57
+ def classes
58
+ cls = ["glyph", "fa", "fa-#{ content }"]
59
+ cls << "fa-#{ size }x" unless size.nil?
60
+ cls << "fa-rotate-#{ rotate }" unless rotate.nil?
61
+ cls << "fa-flip-#{ flip }" unless flip.nil?
62
+ cls << "fa-stack-#{ stack }x" unless stack.nil?
63
+ cls << "fa-#{ type }" unless type.nil?
64
+ cls.compact.join(' ')
65
+ end
66
+
67
+ def size
68
+ @options[:size]
69
+ end
70
+
71
+ def stack
72
+ @options[:stack]
73
+ end
74
+
75
+ def rotate
76
+ @options[:rotate]
77
+ end
78
+
79
+ def flip
80
+ @options[:flip]
81
+ end
82
+
83
+ def type
84
+ @options[:type]
85
+ end
86
+
87
+ def content
88
+ @options[:name] || @content
89
+ end
90
+
91
+ end
92
+ end