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.
- checksums.yaml +7 -0
- data/.gitignore +44 -0
- data/.travis.yml +13 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +171 -0
- data/MIT-LICENSE +20 -0
- data/README.md +728 -0
- data/README.rdoc +0 -0
- data/Rakefile +34 -0
- data/config/locales/en.yml +14 -0
- data/config/locales/fr.yml +14 -0
- data/doc/images/alert.png +0 -0
- data/doc/images/breadcrumb.png +0 -0
- data/doc/images/button.png +0 -0
- data/doc/images/button_dropdown.png +0 -0
- data/doc/images/button_group.png +0 -0
- data/doc/images/button_link.png +0 -0
- data/doc/images/button_split_dropdown.png +0 -0
- data/doc/images/glyph.png +0 -0
- data/doc/images/list.png +0 -0
- data/doc/images/nav.png +0 -0
- data/doc/images/panel.png +0 -0
- data/doc/images/table.png +0 -0
- data/doc/images/table_pagination_per_page.png +0 -0
- data/doc/images/table_panel.png +0 -0
- data/doc/images/table_search_field.png +0 -0
- data/doc/images/ui-bibz-logo-without-border.gif +0 -0
- data/doc/images/ui-bibz-logo.gif +0 -0
- data/lib/tasks/ui_bibz_tasks.rake +4 -0
- data/lib/ui_bibz/concerns/models/searchable.rb +93 -0
- data/lib/ui_bibz/helpers/meta_helper.rb +27 -0
- data/lib/ui_bibz/helpers/ui_helper.rb +108 -0
- data/lib/ui_bibz/helpers/utils_helper.rb +9 -0
- data/lib/ui_bibz/rails/engine.rb +39 -0
- data/lib/ui_bibz/ui/alert.rb +67 -0
- data/lib/ui_bibz/ui/breadcrumb/breadcrumb.rb +54 -0
- data/lib/ui_bibz/ui/breadcrumb/components/breadcrumb_link.rb +62 -0
- data/lib/ui_bibz/ui/button/button.rb +65 -0
- data/lib/ui_bibz/ui/button/button_dropdown.rb +56 -0
- data/lib/ui_bibz/ui/button/button_group.rb +62 -0
- data/lib/ui_bibz/ui/button/button_link.rb +66 -0
- data/lib/ui_bibz/ui/button/button_split_dropdown.rb +80 -0
- data/lib/ui_bibz/ui/component.rb +137 -0
- data/lib/ui_bibz/ui/dropdown/components/dropdown_list.rb +73 -0
- data/lib/ui_bibz/ui/dropdown/dropdown.rb +101 -0
- data/lib/ui_bibz/ui/glyph.rb +92 -0
- data/lib/ui_bibz/ui/grid/components/col.rb +74 -0
- data/lib/ui_bibz/ui/grid/components/row.rb +32 -0
- data/lib/ui_bibz/ui/grid/grid.rb +108 -0
- data/lib/ui_bibz/ui/jumbotron.rb +58 -0
- data/lib/ui_bibz/ui/label.rb +58 -0
- data/lib/ui_bibz/ui/list/components/list.rb +105 -0
- data/lib/ui_bibz/ui/list/list_group.rb +78 -0
- data/lib/ui_bibz/ui/nav/components/nav_link.rb +68 -0
- data/lib/ui_bibz/ui/nav/nav.rb +65 -0
- data/lib/ui_bibz/ui/panel.rb +101 -0
- data/lib/ui_bibz/ui/table/components/actions.rb +44 -0
- data/lib/ui_bibz/ui/table/components/column.rb +34 -0
- data/lib/ui_bibz/ui/table/components/columns.rb +16 -0
- data/lib/ui_bibz/ui/table/components/store.rb +67 -0
- data/lib/ui_bibz/ui/table/components/table_action.rb +21 -0
- data/lib/ui_bibz/ui/table/table.rb +146 -0
- data/lib/ui_bibz/ui/table/table_pagination.rb +29 -0
- data/lib/ui_bibz/ui/table/table_pagination_per_page.rb +53 -0
- data/lib/ui_bibz/ui/table/table_panel.rb +66 -0
- data/lib/ui_bibz/ui/table/table_search_field.rb +62 -0
- data/lib/ui_bibz/ui/table/ux/actionable.rb +59 -0
- data/lib/ui_bibz/ui/table/ux/paginable.rb +35 -0
- data/lib/ui_bibz/ui/table/ux/searchable.rb +47 -0
- data/lib/ui_bibz/ui/table/ux/sortable.rb +93 -0
- data/lib/ui_bibz/ui/ui.rb +14 -0
- data/lib/ui_bibz/utils/internationalization.rb +30 -0
- data/lib/ui_bibz/version.rb +3 -0
- data/lib/ui_bibz.rb +60 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/models/user.rb +5 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +57 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20150123191721_user.rb +4 -0
- data/test/dummy/db/migrate/20150123191805_create_users.rb +12 -0
- data/test/dummy/db/schema.rb +25 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/test/fixtures/users.yml +13 -0
- data/test/dummy/test/models/user_test.rb +7 -0
- data/test/factories/user.rb +8 -0
- data/test/store_test.rb +46 -0
- data/test/support/factory_girl.rb +6 -0
- data/test/test_helper.rb +23 -0
- data/test/ui/button_test.rb +56 -0
- data/test/ui/component_test.rb +21 -0
- data/test/ui/dropdown_test.rb +18 -0
- data/test/ui/glyph_test.rb +23 -0
- data/test/ui/grid_test.rb +46 -0
- data/test/ui/list_group_test.rb +28 -0
- data/test/ui/nav_test.rb +27 -0
- data/test/ui/panel_test.rb +52 -0
- data/test/ui/table_test.rb +178 -0
- data/test/ui_bibz_test.rb +13 -0
- data/test/ui_helper_test.rb +44 -0
- data/ui_bibz.gemspec +36 -0
- data/vendor/assets/javascripts/ui_bibz.js.coffee +24 -0
- data/vendor/assets/stylesheets/ui_bibz.sass +46 -0
- metadata +398 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
include UiBibz::Helpers
|
4
|
+
class ComponentTest < ActionView::TestCase
|
5
|
+
|
6
|
+
test 'create complex component' do
|
7
|
+
actual = UiBibz::Ui::Component.new('New component', { status: :active, glyph: 'add' }, { class: 'new-class' }).render
|
8
|
+
expected = '<i class="glyph fa fa-add"></i> New component'
|
9
|
+
|
10
|
+
assert_equal expected, actual
|
11
|
+
end
|
12
|
+
|
13
|
+
test 'create complex component with block' do
|
14
|
+
actual = UiBibz::Ui::Component.new(status: :active) do
|
15
|
+
"New content"
|
16
|
+
end.render
|
17
|
+
expected = 'New content'
|
18
|
+
|
19
|
+
assert_equal expected, actual
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class DropdownTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test 'Dropdown' do
|
6
|
+
actual = UiBibz::Ui::Dropdown.new("Dropdown", type: :dropup, state: :success).tap do |d|
|
7
|
+
d.list 'toto'
|
8
|
+
d.list 'header', type: :header
|
9
|
+
d.list 'momo'
|
10
|
+
d.list '---'
|
11
|
+
d.list 'lolo'
|
12
|
+
end.render
|
13
|
+
expected = "<div class=\"dropup\"><button class=\"btn btn-success dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-expanded=\"false\">Dropdown <span class=\"caret\"></span></button><ul class=\"dropdown-menu dropdown-menu-left\" role=\"menu\"><li role=\"presentation\">toto</li><li class=\"dropdown-header\" role=\"presentation\">header</li><li role=\"presentation\">momo</li><li class=\"divider\" role=\"presentation\"></li><li role=\"presentation\">lolo</li></ul></div>"
|
14
|
+
|
15
|
+
assert_equal expected, actual
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
include UiBibz::Helpers
|
4
|
+
class GlyphTest < ActionView::TestCase
|
5
|
+
|
6
|
+
test 'create glyph with a name' do
|
7
|
+
actual = UiBibz::Ui::Glyph.new('add').render
|
8
|
+
expected = '<i class="glyph fa fa-add"></i>'
|
9
|
+
assert_equal expected, actual
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'create glyph with hash' do
|
13
|
+
actual = UiBibz::Ui::Glyph.new({ name: 'add', size: 3, type: 'li'}).render
|
14
|
+
expected = '<i class="glyph fa fa-add fa-3x fa-li"></i>'
|
15
|
+
assert_equal expected, actual
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'create glyph with name and hash' do
|
19
|
+
actual = UiBibz::Ui::Glyph.new('add', { size: 3, type: 'li' }).render
|
20
|
+
expected = '<i class="glyph fa fa-add fa-3x fa-li"></i>'
|
21
|
+
assert_equal expected, actual
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class GridTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test 'row' do
|
6
|
+
actual = UiBibz::Ui::Row.new() do
|
7
|
+
'test'
|
8
|
+
end.render
|
9
|
+
expected = "<div class=\"row\">test</div>"
|
10
|
+
|
11
|
+
assert_equal expected, actual
|
12
|
+
end
|
13
|
+
|
14
|
+
test 'col with simple arg' do
|
15
|
+
actual = UiBibz::Ui::Col.new({ size: :lg, num: 1}) do
|
16
|
+
'test'
|
17
|
+
end.render
|
18
|
+
expected = "<div class=\"col-lg-1\">test</div>"
|
19
|
+
|
20
|
+
assert_equal expected, actual
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'col with multiple args' do
|
24
|
+
actual = UiBibz::Ui::Col.new([{ size: :lg, num: 1, offset: 2}, { num: 1 }], class: 'test') do
|
25
|
+
'test'
|
26
|
+
end.render
|
27
|
+
expected = "<div class=\"test col-lg-1 col-offset-2 col-md-1\">test</div>"
|
28
|
+
|
29
|
+
assert_equal expected, actual
|
30
|
+
end
|
31
|
+
|
32
|
+
test 'grid' do
|
33
|
+
actual = UiBibz::Ui::Grid.new().tap do |g|
|
34
|
+
g.view position: :left do
|
35
|
+
'left'
|
36
|
+
end
|
37
|
+
g.view 'center', position: :center
|
38
|
+
g.view 'right', position: :right
|
39
|
+
g.view 'bottom', position: :bottom
|
40
|
+
end.render
|
41
|
+
expected = "<div class=\"grid row\"><div class=\"col grid-left col-md-1\">left</div><div class=\"col grid-center col-md-10\">center</div><div class=\"col grid-right col-md-1\">right</div><div class=\"col grid-bottom col-md-12\">bottom</div></div>"
|
42
|
+
|
43
|
+
assert_equal expected, actual
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class ListGroupTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test 'list_group with link' do
|
6
|
+
actual = UiBibz::Ui::ListGroup.new(type: :link).tap do |lg|
|
7
|
+
lg.list 'Momo', { state: :success, url: '#momo' }
|
8
|
+
lg.list({ tap: true, active: true, url: '#toto' }) do |l|
|
9
|
+
l.header 'My title'
|
10
|
+
l.body 'My body'
|
11
|
+
end
|
12
|
+
end.render
|
13
|
+
expected = "<div class=\"list-group\"><a href=\"#momo\" class=\"list-group-item-success list-group-item\">Momo</a><a type=\"link\" href=\"#toto\" class=\"list-group-item\"><h4 class=\"list-group-item-heading\">My title</h4><p class=\"list-group-item-text\">My body</p></a></div>"
|
14
|
+
|
15
|
+
assert_equal expected, actual
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'list_group' do
|
19
|
+
actual = UiBibz::Ui::ListGroup.new().tap do |lg|
|
20
|
+
lg.list 'Lulu'
|
21
|
+
lg.list 'Toto'
|
22
|
+
end.render
|
23
|
+
expected = "<ul class=\"list-group\"><li class=\"list-group-item\">Lulu</li><li class=\"list-group-item\">Toto</li></ul>"
|
24
|
+
|
25
|
+
assert_equal expected, actual
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/test/ui/nav_test.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class NavTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test 'Nav with tab' do
|
6
|
+
actual = UiBibz::Ui::Nav.new().tap do |n|
|
7
|
+
n.link 'Home', status: :active, url: "#Home", selector: 'home'
|
8
|
+
n.link 'Profile', url: "#profile", selector: 'profile'
|
9
|
+
n.link 'Messages', url: "#messages", selector: 'messages'
|
10
|
+
end.render
|
11
|
+
expected = "<ul class=\"nav nav-tabs\"><li class=\"active\" role=\"presentation\"><a aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\" href=\"#Home\">Home</a></li><li role=\"presentation\"><a aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\" href=\"#profile\">Profile</a></li><li role=\"presentation\"><a aria-controls=\"messages\" role=\"tab\" data-toggle=\"tab\" href=\"#messages\">Messages</a></li></ul>"
|
12
|
+
|
13
|
+
assert_equal expected, actual
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'Nav with pills' do
|
17
|
+
actual = UiBibz::Ui::Nav.new(type: :pills, position: :justified).tap do |n|
|
18
|
+
n.link 'Home', status: :active, url: "#Home", selector: 'home'
|
19
|
+
n.link 'Profile', url: "#profile", selector: 'profile', badge: 16
|
20
|
+
n.link 'Messages', url: "#messages", selector: 'messages', status: :disabled
|
21
|
+
end.render
|
22
|
+
expected = "<ul class=\"nav nav-pills nav-justified\"><li class=\"active\" role=\"presentation\"><a href=\"#Home\">Home</a></li><li role=\"presentation\"><a href=\"#profile\">Profile<span class=\"badge\">16</span></a></li><li class=\"disabled\" role=\"presentation\"><a href=\"#messages\">Messages</a></li></ul>"
|
23
|
+
|
24
|
+
assert_equal expected, actual
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include UiBibz::Helpers
|
3
|
+
class PanelTest < ActionView::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
@content = 'Example'
|
7
|
+
end
|
8
|
+
|
9
|
+
test 'simple panel' do
|
10
|
+
actual = UiBibz::Ui::Panel.new(@content).render
|
11
|
+
expected = "<div class=\"panel-default panel\"><div class=\"panel-body\">#{ @content }</div></div>"
|
12
|
+
|
13
|
+
assert_equal expected, actual
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'simple panel with block' do
|
17
|
+
actual = UiBibz::Ui::Panel.new do
|
18
|
+
@content
|
19
|
+
end.render
|
20
|
+
expected = "<div class=\"panel-default panel\"><div class=\"panel-body\">#{ @content }</div></div>"
|
21
|
+
|
22
|
+
assert_equal expected, actual
|
23
|
+
end
|
24
|
+
|
25
|
+
test 'simple panel with tap' do
|
26
|
+
actual = UiBibz::Ui::Panel.new().tap do |p|
|
27
|
+
p.body @content
|
28
|
+
end.render
|
29
|
+
expected = "<div class=\"panel-default panel\"><div class=\"panel-body\">#{ @content }</div></div>"
|
30
|
+
|
31
|
+
assert_equal expected, actual
|
32
|
+
end
|
33
|
+
|
34
|
+
test 'complex panel with tap' do
|
35
|
+
actual = UiBibz::Ui::Panel.new({state: :danger}, { class: 'example'}).tap do |p|
|
36
|
+
p.header 'header', class: 'header-example'
|
37
|
+
p.body class: 'body-example' do
|
38
|
+
@content
|
39
|
+
end
|
40
|
+
p.footer do
|
41
|
+
"footer"
|
42
|
+
end
|
43
|
+
end.render
|
44
|
+
expected = "<div class=\"example panel-danger panel\">\
|
45
|
+
<div class=\"header-example panel-heading\">header</div>\
|
46
|
+
<div class=\"body-example panel-body\">#{ @content }</div>\
|
47
|
+
<div class=\"panel-footer\">footer</div></div>"
|
48
|
+
|
49
|
+
assert_equal expected, actual
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require "ui_bibz/ui/table/components/store"
|
3
|
+
require "ui_bibz/ui/table/ux/paginable"
|
4
|
+
require "ui_bibz/ui/table/ux/searchable"
|
5
|
+
require "ui_bibz/ui/table/ux/sortable"
|
6
|
+
require "ui_bibz/ui/table/ux/actionable"
|
7
|
+
include UiBibz::Helpers
|
8
|
+
class TableTest < ActionView::TestCase
|
9
|
+
|
10
|
+
setup do
|
11
|
+
create_list(:user, 25)
|
12
|
+
params = {
|
13
|
+
controller: 'users',
|
14
|
+
action: 'index',
|
15
|
+
sort: 'users.name_fr',
|
16
|
+
direction: 'asc',
|
17
|
+
search: 'Name fr',
|
18
|
+
per_page: 2,
|
19
|
+
page: 1
|
20
|
+
}
|
21
|
+
@users = User.table_search_pagination(params, session)
|
22
|
+
@store = UiBibz::Ui::Store.new @users
|
23
|
+
end
|
24
|
+
|
25
|
+
test 'table search field' do
|
26
|
+
actual = UiBibz::Ui::TableSearchField.new({ store: @users}).render
|
27
|
+
expected = "<form action=\"/users\" accept-charset=\"UTF-8\" method=\"get\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><div class=\"input-group input-group-sm table-search-field\"><span class=\"input-group-addon\"><i class=\"glyph fa fa-search\"></i></span><input type=\"search\" value=\"Name fr\" name=\"search\" class=\"form-control\" placeholder=\"Search by name_fr and name_en...\" /><span class=\"clear-search-btn input-group-addon\"><i class=\"glyph fa fa-times-circle\"></i></span></div></form>"
|
28
|
+
|
29
|
+
assert_equal expected, actual
|
30
|
+
end
|
31
|
+
|
32
|
+
test 'table pagination' do
|
33
|
+
actual = UiBibz::Ui::TablePagination.new({ store: @users}).render
|
34
|
+
expected = "<ul class=\"pagination pagination\"><li class=\"prev disabled\"><span>← Previous</span></li> <li class=\"active\"><span>1</span></li> <li><a rel=\"next\" href=\"/users?page=2\">2</a></li> <li><a href=\"/users?page=3\">3</a></li> <li><a href=\"/users?page=4\">4</a></li> <li><a href=\"/users?page=5\">5</a></li> <li><a href=\"/users?page=6\">6</a></li> <li><a href=\"/users?page=7\">7</a></li> <li><a href=\"/users?page=8\">8</a></li> <li><a href=\"/users?page=9\">9</a></li> <li class=\"disabled\"><span>…</span></li> <li><a href=\"/users?page=12\">12</a></li> <li><a href=\"/users?page=13\">13</a></li> <li class=\"next\"><a rel=\"next\" href=\"/users?page=2\">Next →</a></li></ul>"
|
35
|
+
|
36
|
+
assert_equal expected, actual
|
37
|
+
end
|
38
|
+
|
39
|
+
test 'table non sortable' do
|
40
|
+
options = { sortable: false }
|
41
|
+
actual = UiBibz::Ui::Sortable.new(@store, options).header(@store.columns.list.first)
|
42
|
+
expected = "Id"
|
43
|
+
|
44
|
+
assert_equal expected, actual
|
45
|
+
end
|
46
|
+
|
47
|
+
test 'table sortable' do
|
48
|
+
options = { sortable: true }
|
49
|
+
actual = UiBibz::Ui::Sortable.new(@store, options).header(@store.columns.list.first)
|
50
|
+
expected = "<a class=\"dropup\" href=\"/users?direction=asc&search=Name+fr&sort=users.id\">Id</a>"
|
51
|
+
|
52
|
+
assert_equal expected, actual
|
53
|
+
end
|
54
|
+
|
55
|
+
test 'table non paginable' do
|
56
|
+
options = { paginable: false }
|
57
|
+
pagination = UiBibz::Ui::Paginable.new(@store, options)
|
58
|
+
actual = pagination.render if pagination.paginable?
|
59
|
+
expected = nil
|
60
|
+
|
61
|
+
assert_equal expected, actual
|
62
|
+
end
|
63
|
+
|
64
|
+
test 'table paginable' do
|
65
|
+
options = { paginable: true }
|
66
|
+
pagination = UiBibz::Ui::Paginable.new(@store, options)
|
67
|
+
actual = pagination.render if pagination.paginable?
|
68
|
+
expected = "<div><ul class=\"pagination pagination\"><li class=\"prev disabled\"><span>← Previous</span></li> <li class=\"active\"><span>1</span></li> <li><a rel=\"next\" href=\"/users?page=2\">2</a></li> <li><a href=\"/users?page=3\">3</a></li> <li><a href=\"/users?page=4\">4</a></li> <li><a href=\"/users?page=5\">5</a></li> <li><a href=\"/users?page=6\">6</a></li> <li><a href=\"/users?page=7\">7</a></li> <li><a href=\"/users?page=8\">8</a></li> <li><a href=\"/users?page=9\">9</a></li> <li class=\"disabled\"><span>…</span></li> <li><a href=\"/users?page=12\">12</a></li> <li><a href=\"/users?page=13\">13</a></li> <li class=\"next\"><a rel=\"next\" href=\"/users?page=2\">Next →</a></li></ul><form action=\"/users\" accept-charset=\"UTF-8\" method=\"get\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><div class=\"table-pagination-per-page\">Displaying User <b>1 - 2</b> of <b>25</b> in total | Per page: <select name=\"per_page\" id=\"per_page\" class=\"form-control\"><option value=\"25\">25</option>
|
69
|
+
<option value=\"50\">50</option>
|
70
|
+
<option value=\"100\">100</option></select></div></form><br class=\"clear\" /></div>"
|
71
|
+
|
72
|
+
assert_equal expected, actual
|
73
|
+
end
|
74
|
+
|
75
|
+
test 'table non searchable' do
|
76
|
+
options = { searchable: false }
|
77
|
+
actual = UiBibz::Ui::Searchable.new(@store, options).render
|
78
|
+
expected = "<div><div class=\"title\">Users list</div><br class=\"clear\" /></div>"
|
79
|
+
|
80
|
+
assert_equal expected, actual
|
81
|
+
end
|
82
|
+
|
83
|
+
test 'table non searchable with a title and glyph' do
|
84
|
+
options = { searchable: false, glyph: 'toto', title: 'Title list' }
|
85
|
+
actual = UiBibz::Ui::Searchable.new(@store, options).render
|
86
|
+
expected = "<div><div class=\"title\"><i class=\"glyph fa fa-toto\"></i>Title list</div><br class=\"clear\" /></div>"
|
87
|
+
|
88
|
+
assert_equal expected, actual
|
89
|
+
end
|
90
|
+
|
91
|
+
test 'table searchable' do
|
92
|
+
options = { searchable: true }
|
93
|
+
actual = UiBibz::Ui::Searchable.new(@store, options).render
|
94
|
+
expected = "<div><div class=\"title\">Users list</div><div class=\"input-group input-group-sm table-search-field\"><span class=\"input-group-addon\"><i class=\"glyph fa fa-search\"></i></span><input type=\"search\" value=\"Name fr\" name=\"search\" class=\"form-control\" placeholder=\"Search by name_fr and name_en...\" /><span class=\"clear-search-btn input-group-addon\"><i class=\"glyph fa fa-times-circle\"></i></span></div><br class=\"clear\" /></div>"
|
95
|
+
|
96
|
+
assert_equal expected, actual
|
97
|
+
end
|
98
|
+
|
99
|
+
test 'table actionable header' do
|
100
|
+
options = { actionable: true }
|
101
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
102
|
+
actual = action.header []
|
103
|
+
expected = ["<th class=\"action\"></th>"]
|
104
|
+
|
105
|
+
assert_equal expected, actual
|
106
|
+
end
|
107
|
+
|
108
|
+
test 'table actionable body' do
|
109
|
+
options = { actionable: true }
|
110
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
111
|
+
actual = action.body @store.records.first, []
|
112
|
+
expected = ["<td><div class=\"btn-group-xs dropdown\"><button class=\"btn btn-default dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-expanded=\"false\"><i class=\"glyph fa fa-ellipsis-v fa-fw\"></i> Actions <span class=\"caret\"></span></button><ul class=\"dropdown-menu dropdown-menu-right\" role=\"menu\"></ul></div></td>"]
|
113
|
+
|
114
|
+
|
115
|
+
assert_equal expected, actual
|
116
|
+
end
|
117
|
+
|
118
|
+
test 'table actionable inject_url' do
|
119
|
+
options = { actionable: true }
|
120
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
121
|
+
actual = action.inject_url 'http://localhost/users/id/test', @store.records.first
|
122
|
+
expected = "http://localhost/users/1/test"
|
123
|
+
|
124
|
+
assert_equal expected, actual
|
125
|
+
end
|
126
|
+
|
127
|
+
test 'table non actionable header' do
|
128
|
+
options = { actionable: false }
|
129
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
130
|
+
actual = action.header []
|
131
|
+
expected = []
|
132
|
+
|
133
|
+
assert_equal expected, actual
|
134
|
+
end
|
135
|
+
|
136
|
+
test 'table non actionable body' do
|
137
|
+
options = { actionable: false }
|
138
|
+
action = UiBibz::Ui::Actionable.new(@store, options)
|
139
|
+
actual = action.body @store.records.first, []
|
140
|
+
expected = []
|
141
|
+
|
142
|
+
assert_equal expected, actual
|
143
|
+
end
|
144
|
+
|
145
|
+
test 'simple table_panel' do
|
146
|
+
actual = UiBibz::Ui::TablePanel.new(store: @users, tap: true).render
|
147
|
+
end
|
148
|
+
|
149
|
+
test 'complex table_panel' do
|
150
|
+
actual = UiBibz::Ui::TablePanel.new({ store: @users, tap: true }, { class: 'toto' }).tap do |pane|
|
151
|
+
pane.header 'Test header'
|
152
|
+
pane.body class: 'ui' do
|
153
|
+
'Test body'
|
154
|
+
end
|
155
|
+
end.render
|
156
|
+
end
|
157
|
+
|
158
|
+
test 'complex table_panel with custom actions' do
|
159
|
+
actual = UiBibz::Ui::TablePanel.new({ store: @users, tap: true }, { class: 'toto'}).tap do |pane|
|
160
|
+
pane.header 'Test header'
|
161
|
+
pane.body cls: 'ui' do
|
162
|
+
'Test body'
|
163
|
+
end
|
164
|
+
pane.columns do |c|
|
165
|
+
c.column({ name: '#', data_index: 'id' })
|
166
|
+
c.column({ name: 'Name fr', data_index: 'name_fr', link: edit_user_path(:id), order: 2 })
|
167
|
+
c.column({ name: 'Name en', data_index: 'name_en', order: 1 })
|
168
|
+
c.column({ name: 'Name en', data_index: 'name_en', format: lambda{ |records, record| "name #{ record.id}"}})
|
169
|
+
end
|
170
|
+
pane.actions do |a|
|
171
|
+
a.action 'toto', url: users_path(:id), glyph: 'eye'
|
172
|
+
a.action '---'
|
173
|
+
a.action 'momo', url: users_path(:id), glyph: 'home'
|
174
|
+
end
|
175
|
+
end.render
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
include UiBibz::Helpers
|
4
|
+
class UiHelperTest < ActionView::TestCase
|
5
|
+
|
6
|
+
test 'breadcrumb' do
|
7
|
+
actual = breadcrumb do |b|
|
8
|
+
b.link 'Home', url: '#home', glyph: 'home'
|
9
|
+
b.link 'Toto', { url: '#toto', status: :active }
|
10
|
+
end
|
11
|
+
expected = "<ol class=\"breadcrumb\"><li><a href=\"#home\"><i class=\"glyph fa fa-home\"></i> Home</a></li><li class=\"active\"><a href=\"#toto\">Toto</a></li></ol>"
|
12
|
+
|
13
|
+
assert_equal expected, actual
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'alert' do
|
17
|
+
actual = notify 'toto'
|
18
|
+
expected = "<div class=\"alert-info alert\" role=\"alert\">toto</div>"
|
19
|
+
|
20
|
+
assert_equal expected, actual
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'label' do
|
24
|
+
actual = lab 'toto', state: :success, glyph: 'pencil'
|
25
|
+
expected = "<span class=\"label-success label\"><i class=\"glyph fa fa-pencil\"></i> toto</span>"
|
26
|
+
|
27
|
+
assert_equal expected, actual
|
28
|
+
end
|
29
|
+
|
30
|
+
test 'jumbotron with full_width' do
|
31
|
+
actual = jumbotron 'toto', full_width: true
|
32
|
+
expected = "<div class=\"jumbotron\"><div class=\"container\">toto</div></div>"
|
33
|
+
|
34
|
+
assert_equal expected, actual
|
35
|
+
end
|
36
|
+
|
37
|
+
test 'jumbotron' do
|
38
|
+
actual = jumbotron 'toto'
|
39
|
+
expected = "<div class=\"jumbotron\">toto</div>"
|
40
|
+
|
41
|
+
assert_equal expected, actual
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/ui_bibz.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
# Maintain your gem's version:
|
4
|
+
require "ui_bibz/version"
|
5
|
+
|
6
|
+
# Describe your gem and declare its dependencies:
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "ui_bibz"
|
9
|
+
s.version = UiBibz::VERSION
|
10
|
+
s.authors = ["Thooams"]
|
11
|
+
s.email = ["thooams@gmail.com"]
|
12
|
+
s.homepage = "https://github.com/thooams/ui-bibz"
|
13
|
+
s.summary = "A Rails plugin with Boostrap framework..."
|
14
|
+
s.description = "A Rails plugin with Boostrap framework..."
|
15
|
+
s.license = "MIT"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
# rails
|
23
|
+
s.add_dependency 'rails', '~> 4.2.0'
|
24
|
+
s.add_dependency 'will_paginate', '~> 3.0.6'
|
25
|
+
s.add_dependency 'will_paginate-bootstrap'
|
26
|
+
s.add_dependency 'will-paginate-i18n'
|
27
|
+
s.add_dependency 'haml'
|
28
|
+
s.add_dependency 'haml-rails'
|
29
|
+
s.add_dependency 'sass-rails', '~> 5.0.1'
|
30
|
+
|
31
|
+
s.add_development_dependency "minitest"
|
32
|
+
s.add_development_dependency "sqlite3"
|
33
|
+
s.add_development_dependency "factory_girl_rails", "~> 4.0"
|
34
|
+
s.add_development_dependency "codeclimate-test-reporter"
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# For turbolink
|
2
|
+
$(document).on 'ready page:load', ->
|
3
|
+
|
4
|
+
# Submit form when per_page select changing
|
5
|
+
$('.table-pagination-per-page select').change () ->
|
6
|
+
$(this).parents('form').submit()
|
7
|
+
|
8
|
+
# Clear search
|
9
|
+
$('.table-search-field .clear-search-btn').click () ->
|
10
|
+
$(this).prev().val('')
|
11
|
+
$(this).parents('form').submit()
|
12
|
+
|
13
|
+
# Resize search field
|
14
|
+
$('.table-panel input[type=search]').blur ->
|
15
|
+
$parent = $(this).parent()
|
16
|
+
$parent.removeClass('has-value') if $(this).val() == ''
|
17
|
+
$parent.removeClass('is-focused')
|
18
|
+
|
19
|
+
$('.table-panel input[type=search]').focus ->
|
20
|
+
$(this).parent().addClass('is-focused has-value')
|
21
|
+
|
22
|
+
$('.table-panel input[type=search]').each ->
|
23
|
+
$(this).parent().addClass('has-value') if $(this).val() != ''
|
24
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
.table-panel
|
2
|
+
.action
|
3
|
+
width: 92px
|
4
|
+
.panel-heading
|
5
|
+
background-color: #f5f5f5
|
6
|
+
.title
|
7
|
+
float: left
|
8
|
+
font-size: 20px
|
9
|
+
.has-value
|
10
|
+
width: 400px !important
|
11
|
+
.input-group
|
12
|
+
width: 300px
|
13
|
+
transition: width .5s ease-in-out
|
14
|
+
float: right
|
15
|
+
.panel-table, .panel-body
|
16
|
+
overflow-x: auto
|
17
|
+
.panel-footer
|
18
|
+
padding: 10px 10px
|
19
|
+
.pagination
|
20
|
+
margin: 0
|
21
|
+
.table-pagination-per-page
|
22
|
+
float: right
|
23
|
+
select
|
24
|
+
width: 75px
|
25
|
+
display: inline-block
|
26
|
+
|
27
|
+
.table-hover>tbody>tr:hover
|
28
|
+
td:last-child .dropdown
|
29
|
+
display: block
|
30
|
+
|
31
|
+
.table-hover>tbody>tr
|
32
|
+
td:last-child
|
33
|
+
height: 39px
|
34
|
+
.dropdown
|
35
|
+
display: none
|
36
|
+
|
37
|
+
.table-search-field
|
38
|
+
.clear-search-btn
|
39
|
+
cursor: pointer
|
40
|
+
.glyph
|
41
|
+
margin: 0
|
42
|
+
|
43
|
+
.table
|
44
|
+
.action
|
45
|
+
width: 92px
|
46
|
+
|