ui_bibz 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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